所以我想添加一个“footer”(归属)到我通过postscript与groff在linux中生成的pdf文件的每一页的底部。 我正在使用ps2pdf工具将文件从ps转换为pdf,因此我可以访问这两种格式。
这两个post有些帮助:
如何将页码添加到Postscript / PDF中
我怎样才能让一个程序覆盖文本在postscript文件上?
我并不反对使用第一种方法,但是我没有权限访问第一个脚本中提到的pdflatex
实用程序,也没有select将其安装在需要执行工作的机器上。
它看起来像第二种方法可能工作,但我已经安装了ghostscript 8.15版本,我没有看到手册页上列出的许多标志( 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
这给了我这个:
未知开关-o - 忽略 ESP Ghostscript 815.02(2006-04-19) Copyright(C)2004 artofcode LLC,Benicia,CA. 版权所有。 此软件不附带任何担保:有关详细信息,请参阅PUBLIC文件。 错误:/(undefinedfilename)(output.pdf) 操作数堆栈: 执行堆栈: %interp_exit .runexec2 --nostringval - - nostringval - - nostringval - 2%stopped_push --nostringval - - nostringval - --nostringval - false 1%stopped_push 字典堆栈: (g) - - 本案:0/20(G) - - 本案:102/200(L) - 当前分配模式是本地的 上次操作系统错误:2 ESP Ghostscript 815.02:不可恢复的错误,退出代码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次(也许有4页input.ps)
ESP Ghostscript 815.02(2006-04-19) Copyright(C)2004 artofcode LLC,Benicia,CA. 版权所有。 此软件不附带任何担保:有关详细信息,请参阅PUBLIC文件。 找不到(或不能打开)字体文件/usr/share/ghostscript/8.15/Resource/Font/Helvetica-Italic。 找不到(或不能打开)字体文件Helvetica-Italic。 查询操作系统的字体文件... 没有在系统上find这种字体! 将Helvetica-Oblique字体replace为Helvetica-Italic。 从/usr/share/fonts/default/Type1/n019023l.pfb载入NimbusSanL-ReguItal字体... 3742416 2168114 2083056 759694 1完成。 从/usr/share/fonts/default/Type1/n021023l.pfb载入NimbusRomNo9L-ReguItal字体... 3781760 2362033 2365632 1015713 1完成。 从/usr/share/fonts/default/Type1/n021004l.pfb加载NimbusRomNo9L-Medi字体... 3865136 2547267 2365632 1029818 1完成。 从/usr/share/fonts/default/Type1/n021003l.pfb加载NimbusRomNo9L-Regu字体... 4089592 2759001 2365632 1032885 1完成。 使用NimbusRomNo9L-Regu的NimbusRomanNo9L-Regu字体。 >> showpage,按<return>继续<< >> showpage,按<return>继续<< >> showpage,按<return>继续<< >> showpage,按<return>继续<<
所以它似乎很简单,使用gs
来简单地插入一个PS文件中的东西,但它被certificate是相当复杂的…
ESP Ghostscript是Oooo-old 。 除非你完全绝对不能避免它,否则不要再使用它。 这是CUPS使用的原始Ghostscript的一个分支。 (在解决了开发者之间的一些问题之后,更新版本的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)的源代码库。 为此,下面的链接已经改变了,
在您的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
添加页脚的最合理的地方是在groff
源文件中。 确切的做法当然取决于你使用的宏包。 对于-ms
,你可以这样做:
.ds RF "Page \\n(PN
将页码添加为右页脚。 对于-mm
,更像是:
.PF "'''Page \\\\nP'"
单引号限定页脚的“左部”中间部分“右部”。