2011-01-22 4 views
6

Поэтому я хотел бы добавить «нижний колонтитул» (атрибуция) к нижней части каждой страницы pdf-файла, который я генерирую через постскриптум с помощью groff в linux. Я конвертирую файл из ps в pdf самостоятельно, с помощью ps2pdf-инструмента, поэтому у меня есть доступ к обоим форматам.Как добавить нижний колонтитул к нижней части каждой страницы постскриптума или файла pdf в Linux?

Эти две должности были несколько полезны:

How to add page numbers to Postscript/PDF

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

Я не против использования первого метода, но у меня нет доступа к pdflatex полезности упомянутых в первый сценарий, и у меня нет возможности установить его на машине, которая должна выполнять эту работу.

Похоже, что второй способ может работать, но у меня установлена ​​версия 8.15 ghostscript, и я не видел много флагов, перечисленных на странице руководства (http://unix.browserdebug.com/man/gs/). Я думаю, что у меня есть доступ к флагу «-c», чтобы вставить код postscript, даже если он не указан. Во всяком случае, вот две команды, которые я безуспешно:

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

, что дает мне это:

 
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 

Так, очевидно, -о флаг имеет проблему, и поэтому я сделал некоторые исследования и попробовал этот синтаксис:

 

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

, который выводит это и заставляет меня ударил возврат товара в 4 раза (может быть, есть 4 страницы в 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<< 


Так что, похоже, что это будет достаточно просто использовать gs, чтобы просто вставить что-то в файле пс, но она оказывается довольно сложным ...

ответ

5

ESP Ghostscript является О-о-о-о-старый. Не используйте его больше, если вы абсолютно, абсолютно не можете его избежать. Это была вилка оригинального Ghostscript, которая использовалась CUPS некоторое время. (И после того, как некоторые проблемы в отношениях между разработчиками, где решены, более поздние версии CUPS теперь также используют GPL Ghostscript снова ...) версии

Новые GPL Ghostscript здесь: http://www.ghostscript.com/releases/

Кроме того, -o out.pdf только сокращение для -dBATCH -dNOPAUSE -sOutputFile=outpdf. Поэтому вы должны попробовать это. (Часть -dNOPAUSE освобождает вас от удара <return> за каждую страницу вперед ....).

И наконец, не ожидайте, что весь спектр документации предоставлен третьей сторонойman gs страница. Скорее обратитесь к оригинальной документации Ghostscript для версии, которую вы используете, наиболее важные части являются:


Update: Ghostscript переехал в Git (вместо Subversion) для их хранилища исходного кода , Therefor следующие ссылки изменились, неоднократно:

+0

Я использую систему, в которой ESP установлен без привилегий для установки обновленной версии. Интересно, есть ли способ, которым я могу заставить его работать с ESP ... – cwd

+0

ESP Ghostscript больше не поддерживается .... Единственный способ заставить это работать как непривилегированный пользователь - это дополнительно установить более новую версию Ghostscript в ваш домашний каталог (или любое другое место, которое можно записать в свою учетную запись). –

6

В вашей В файле PostScript вы можете использовать счетчик страниц и переопределять показную страницу, чтобы отобразить ее в нижнем колонтитуле. Вот пример программы:

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

спасибо за ответ! еще не успел проверить это (писал вопрос некоторое время назад), но если я вернусь к этому, и он хорошо работает, я изменю принятый ответ. – cwd

+0

Вы можете использовать «привязать def» в своей новой функции «showpage». Таким образом, он использует оригинальную «showpage» внутри, без необходимости вспомогательного метода, избегая также рекурсии. –

+0

Как применить эту команду ко всем/нескольким страницам? (вместо копирования-вставки кода #NumOfPages раз ...) – Dor

1

Наиболее логичным местом для добавления страницы колонтитулы находится в groff источнике. Точный способ сделать это, конечно, зависит от используемого вами макроса. Для -ms, вы можете сделать:

.ds RF "Page \\n(PN 

добавить номер страницы в правом нижнем колонтитуле. Для -mm, это больше похоже на:

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

где одиночные кавычки разграничить «левый part'center part'right часть» сноске.