2011-01-22 16 views
6

Chciałbym więc dodać "stopkę" (atrybucję) na dole każdej strony pliku pdf, który generuję za pomocą postscriptu z groff w linuxie. Konwertuję plik z ps do pdf sam, z narzędziem ps2pdf, więc mam dostęp do obu formatów.Jak dodać stopkę do dolnej części każdej strony pliku postscriptu lub pliku pdf w systemie Linux?

Te dwa stanowiska były nieco pomocny:

How to add page numbers to Postscript/PDF

How can I make a program overlay text on a postscript file?

Nie jestem przeciwko pomocą pierwszej metody, ale nie mam dostępu do narzędzia pdflatex wymienionego w pierwszy skrypt, ani nie mam opcji, aby zainstalować go na komputerze, który musi wykonać pracę.

Wygląda na to, że druga metoda mogłaby działać, ale mam zainstalowaną wersję 8.15 ghostscript i nie widziałem wielu flag wymienionych na stronie man (http://unix.browserdebug.com/man/gs/). Myślę, że mam dostęp do flagi "-c", aby wstawić kod postscriptowy, nawet jeśli nie ma go na liście. Tak czy inaczej, oto dwa polecenia próbowałem bezskutecznie:

 
gs -o output.pdf -sDEVICE=pdfwrite -g5030x5320 \ 
-c "/Helvetica-Italic findfont 15 scalefont setfont 453 482 moveto (test-string) show" \ 
-f input.ps 

że daje mi to:

 
Unknown switch -o - ignoring 
ESP Ghostscript 815.02 (2006-04-19) 
Copyright (C) 2004 artofcode LLC, Benicia, CA. All rights reserved. 
This software comes with NO WARRANTY: see the file PUBLIC for details. 
ERROR: /undefinedfilename in (output.pdf) 
Operand stack: 

Execution stack: 
    %interp_exit .runexec2 --nostringval-- --nostringval-- --nostringval-- 2 %stopped_push --nostringval-- --nostringval-- --nostringval-- false 1 %stopped_push 
Dictionary stack: 
    --dict:1117/1686(ro)(G)-- --dict:0/20(G)-- --dict:102/200(L)-- 
Current allocation mode is local 
Last OS error: 2 
ESP Ghostscript 815.02: Unrecoverable error, exit code 1 

Więc oczywiście -o Flaga ma problem i tak zrobiłem rozeznanie i próbował tej składni:

 

gs -sOUTPUTFILE=output.pdf -sDEVICE=pdfwrite -g5030x5320 \ 
-c "/Helvetica-Italic findfont 15 scalefont setfont 453 482 moveto (test-string) show" \ 
-f input.ps 

który wyprowadza to i sprawia mi naciśnij Enter 4 razy (może istnieją 4 stron input.ps)

 

ESP Ghostscript 815.02 (2006-04-19) 
Copyright (C) 2004 artofcode LLC, Benicia, CA. All rights reserved. 
This software comes with NO WARRANTY: see the file PUBLIC for details. 
Can't find (or can't open) font file /usr/share/ghostscript/8.15/Resource/Font/Helvetica-Italic. 
Can't find (or can't open) font file Helvetica-Italic. 
Querying operating system for font files... 
Didn't find this font on the system! 
Substituting font Helvetica-Oblique for Helvetica-Italic. 
Loading NimbusSanL-ReguItal font from /usr/share/fonts/default/Type1/n019023l.pfb... 3742416 2168114 2083056 759694 1 done. 
Loading NimbusRomNo9L-ReguItal font from /usr/share/fonts/default/Type1/n021023l.pfb... 3781760 2362033 2365632 1015713 1 done. 
Loading NimbusRomNo9L-Medi font from /usr/share/fonts/default/Type1/n021004l.pfb... 3865136 2547267 2365632 1029818 1 done. 
Loading NimbusRomNo9L-Regu font from /usr/share/fonts/default/Type1/n021003l.pfb... 4089592 2759001 2365632 1032885 1 done. 
Using NimbusRomanNo9L-Regu font for NimbusRomNo9L-Regu. 
>>showpage, press <return> to continue<< 

>>showpage, press <return> to continue<< 

>>showpage, press <return> to continue<< 

>>showpage, press <return> to continue<< 


Więc wydaje się, że byłoby to dość proste w użyciu gs po prostu wstawić coś w pliku ps, ale to okazuje się być dość skomplikowane ...

Odpowiedz

5

ESP Ghostscript jest O-O-O-O-stary. Nie używaj go więcej, chyba że absolutnie, absolutnie nie możesz tego uniknąć. Był to widelec oryginalnego Ghostscripta, który przez jakiś czas był używany przez CUPS. (A po pewne problemy między deweloperami gdzie rozwiązany, nowsze wersje CUPS teraz również ponownie użyć GPL Ghostscript ...) wersje

Nowszy GPL Ghostscript tutaj: http://www.ghostscript.com/releases/

Również -o out.pdf jest tylko skrótem -dBATCH -dNOPAUSE -sOutputFile=outpdf. Więc powinieneś tego spróbować. (Część -dNOPAUSE zwalnia Cię z trafienia <return> za każdy postęp strony ....).

Wreszcie, nie oczekuj, że pełny zakres dokumentacji zostanie dostarczony przez stronę trzecią pod numerem man gs. Raczej odnoszą się do oryginalnej dokumentacji Ghostscript w wersji używasz, najważniejsze części są:


Update: Ghostscriptu został przeniesiony do git (zamiast Subversion) za repozytorium kodu źródłowego . Nich poniższe linki uległy zmianie, wielokrotnie:

+0

Używam systemu, który ma zainstalowany ESP bez uprawnień do zainstalowania uaktualnionej wersji. Zastanawiam się, czy istnieje sposób, w jaki mogę go uruchomić z ESP ... – cwd

+0

ESP Ghostscript nie jest już obsługiwany .... Jedynym sposobem na to, aby działał jako nieuprzywilejowany użytkownik, jest zainstalowanie dodatkowej wersji z Ghostscript do twojego katalogu domowego (lub dowolnego innego miejsca zapisywalnego na twoim koncie). –

6

w twojej Plik PostScript można użyć licznika stron i ponownie zdefiniować stronę show, aby wyświetlić go w stopce. Oto przykładowy program:

4 dict begin 

/showpage_org /showpage load def   % you'll need this later! 
/page_num 0 def 
/page_str 3 string def      % Page numbers -99 to 999 supported, error if > 3 char 

/showpage         % with page number footer 
{ 
    gsave 
    /Courier findfont 10 scalefont setfont % Set the font for the footer 
    /page_num page_num 1 add def   % increment page number counter 
    10 10 moveto (Page) show     
    page_num page_str cvs show    % convert page number integer to a string and show it 
    grestore 
    showpage_org       % use the original showpage 
} def 

%Page 1 
/Courier findfont 22 scalefont setfont 
100 500 moveto (Hello) show 
showpage 

%Page 2 
100 500 moveto (World) show 
showpage 

end 
+0

dzięki za odpowiedź! nie miałem jeszcze czasu na sprawdzenie tego (napisałem to pytanie jakiś czas temu), ale jeśli wrócę do tego i działa dobrze, zmienię moją akceptowaną odpowiedź. – cwd

+0

Możesz użyć "bind def" w swojej nowej funkcji "showpage". W ten sposób używa oryginalnej "strony show" w środku, bez potrzeby stosowania metody pomocniczej, a także unikania rekursji. –

+0

Jak zastosować to polecenie do wszystkich/wielu stron? (zamiast skopiować i wkleić kod #NumOfPages razy ...) – Dor

1

Najbardziej logicznym miejscem, aby dodać stronę stopki jest w źródle groff. Dokładny sposób wykonania tej czynności zależy oczywiście od używanego pakietu makr. Dla -ms, można zrobić:

.ds RF "Page \\n(PN 

aby dodać numer strony jako prawe stopce. Dla -mm, to nic więcej jak:

.PF "'''Page \\\\nP'" 

gdzie pojedyncze cytaty wyznaczają „lewa część part'center part'right” w stopce.

Powiązane problemy