如何在 linux 中的 postscript 或 pdf 文件的每一页底部添加页脚?
Posted
技术标签:
【中文标题】如何在 linux 中的 postscript 或 pdf 文件的每一页底部添加页脚?【英文标题】:How can I add a footer to the bottom of each page of a postscript or pdf file in linux? 【发布时间】:2011-01-22 07:47:28 【问题描述】:所以我想在我通过 postscript 在 linux 中使用 groff 生成的 pdf 文件的每一页底部添加一个“页脚”(一个属性)。我正在使用 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”标志来插入一些后记代码,即使它没有列出。无论如何,这是我尝试失败的两个命令:
gs -o 输出.pdf -sDEVICE=pdfwrite -g5030x5320 \ -c "/Helvetica-Italic findfont 15 scalefont setfont 453 482 moveto (test-string) show" \ -f 输入.ps这给了我这个:
未知开关 -o - 忽略 ESP Ghostscript 815.02 (2006-04-19) 版权所有 (C) 2004 artofcode LLC, Benicia, CA。版权所有。 此软件不提供任何担保:有关详细信息,请参阅文件 PUBLIC。 错误:/undefinedfilename in (output.pdf) 操作数栈: 执行栈: %interp_exit .runexec2 --nostringval-- --nostringval-- --nostringval-- 2 %stopped_push --nostringval-- --nostringval-- --nostringval-- false 1 %stopped_push 字典栈: --dict:1117/1686(ro)(G)-- --dict:0/20(G)-- --dict: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 输入.ps它输出这个并让我点击返回 4 次(可能 input.ps 中有 4 页)
ESP Ghostscript 815.02 (2006-04-19) 版权所有 (C) 2004 artofcode LLC, Benicia, CA。版权所有。 此软件不提供任何担保:有关详细信息,请参阅文件 PUBLIC。 找不到(或无法打开)字体文件 /usr/share/ghostscript/8.15/Resource/Font/Helvetica-Italic。 找不到(或无法打开)字体文件 Helvetica-Italic。 正在查询操作系统以获取字体文件... 在系统上没有找到这个字体! 将字体 Helvetica-Oblique 替换为 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 字体。 >>显示页面,按因此,使用gs
在 ps 文件中简单地插入一些东西似乎很简单,但事实证明它相当复杂......
【问题讨论】:
【参考方案1】:在您的 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
【讨论】:
感谢您的回答!还没有时间对此进行测试(不久前写了这个问题),但如果我回到这个问题并且效果很好,我会改变我接受的答案。 您可以在新的“显示页面”功能中使用“绑定 def”。这样,它内部使用了原始的“显示页面”,不需要辅助方法,也避免了递归。 如何将该命令应用于所有/多个页面? (而不是复制粘贴代码#NumOfPages 次...)【参考方案2】:ESP Ghostscript 是 O-o-o-o-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)。因此,以下链接已多次更改:
【讨论】:
我使用的系统安装了 ESP,但没有安装升级版本的权限。我想知道是否有办法让它与 ESP 一起工作...... ESP Ghostscript 不再维护.... 让它作为非特权用户工作的唯一方法是在您的主目录(或任何其他地方)另外安装更新版本的 Ghostscript可由您的帐户写入)。【参考方案3】:添加页脚最合乎逻辑的地方是groff
源。执行此操作的确切方法当然取决于您使用的宏包。对于-ms
,你可以这样做:
.ds RF "Page \\n(PN
将页码添加为右页脚。对于-mm
,更像是:
.PF "'''Page \\\\nP'"
单引号分隔页脚的'left part'center part'right part'。
【讨论】:
以上是关于如何在 linux 中的 postscript 或 pdf 文件的每一页底部添加页脚?的主要内容,如果未能解决你的问题,请参考以下文章
如何使 ghostscript 将 postscript 文件中的单个特定页面输出为 png?
想要嵌入字体但无法从 Font Suitcase 或 PostScript Type 1 文件转换 [关闭]