Как добавить нижний колонтитул внизу каждой страницы постскриптума или pdf файла в linux? - PullRequest
6 голосов
/ 22 января 2011

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

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

Как добавить номера страниц в Postscript / PDF

Как сделать, чтобы программа наложила текст на файл postscript?

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

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

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

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


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

, который выводит это и заставляет меня нажимать return 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, чтобы просто вставить что-то в файл ps, но это оказывается довольно сложным ...

Ответы [ 3 ]

6 голосов
/ 08 июля 2011

В вашем файле 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
5 голосов
/ 23 января 2011

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

Более новые версии GPL Ghostscript находятся здесь: http://www.ghostscript.com/releases/

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

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


Обновление: Ghostscript перемещен в Git (вместо Subversion) для своего хранилища исходного кода. Для этого неоднократно менялись следующие ссылки:

1 голос
/ 10 июля 2011

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

.ds RF "Page \\n(PN

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

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

, где одинарные кавычки ограничивают 'левую часть' центральная часть 'правая часть' нижнего колонтитула.

...