如何在linux中的postscript或pdf文件的每一页底部添加页脚?

时间:2011-01-22 07:47:29

标签: linux unix pdf ghostscript postscript

所以我想在pdf文件的每一页的底部添加一个“页脚”(一个属性),我通过linux中的groff通过postscript生成。我正在使用ps2pdf工具将文件从ps转换为pdf,因此我可以访问这两种格式。

这两篇帖子有点帮助:

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

很明显-o标志有问题所以我做了一些研究并尝试了这种语法:


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

输出这个并让我点击返回4次(也许在input.ps中有4页)


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 个答案:

答案 0 :(得分:6)

在PostScript文件中,您可以使用页面计数器并重新定义showpage以在页脚中显示它。这是一个示例程序:

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

答案 1 :(得分:5)

ESP Ghostscript O-o-o-o-old 。不要再使用它,除非绝对,绝对无法避免。它是原始Ghostscript的一个分支,CUPS使用了一段时间。 (并且在解决了开发人员之间的一些问题后,更新版本的CUPS现在也再次使用GPL Ghostscript ......)

较新的GPL Ghostscript版本在此处:http://www.ghostscript.com/releases/

此外,-o out.pdf只是-dBATCH -dNOPAUSE -sOutputFile=outpdf的简写。所以你应该试试这个。 (-dNOPAUSE部分可以让您无法按每个页面提前点击<return>。)。

最后,不要指望第三方 man gs页面提供全部文档。而是参考您使用的版本的原始Ghostscript文档,最重要的部分是:


更新:Ghostscript已将其源代码存储库移至Git(而非Subversion)。因此,以下链接反复更改:

答案 2 :(得分:1)

添加页脚的最合理位置是groff来源。这样做的确切方法当然取决于您使用的宏包。对于-ms,您可以执行以下操作:

.ds RF "Page \\n(PN

将页码添加为右页脚。对于-mm,它更像是:

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

其中单引号分隔页脚的“左侧部分'中间部分'右侧部分'。