我正在尝试使用 Ghostscript 将一段文本添加到 2 页的 pdf 中。 查看类似的问题(https://stackoverflow.com/a/9783516/1581629和 https://stackoverflow.com/a/12596669/1581629 https://stackoverflow.com/a/18774237/1581629)我试图使用/EndPage,我希望在堆栈上获得一个“页面计数器”并使用它来选择要修改的页面。
但是,当/EndPage(Postscript语言参考第441页)堆栈中的“原因”为0时,“计数器”也始终为0。
MWE 可能是(使用 git repo 中的 gs 9.23):
gs -o out.pdf -sDEVICE=pdfwrite a.ps in.pdf
其中 a.ps 是:
<<
/EndPage
{
(-----------------START\n) print
stack
true
(------------------END\n) print
}
>> setpagedevice
并且 in.pdf 是用 pdflatex 制作的(texlive 2017):
\documentclass{article}
\begin{document}
aaa
\newpage
bbb
\end{document}
任何人都可以指出我在这里缺少什么吗?
Ghostscript PDF 解释器在 PDF 文件每页的开头执行 setpagedevice。
这样做是因为 PDF 文件中的每个页面都可以有不同的 MediaBox,因此它提取 MediaBox 并使用包含 MediaBox 的 PageSize 条目构造一个字典,以便设置(可能)新的媒体大小。
每次执行 setpagedevice 都会重置页面计数,因此每个页面实际上都是第一页。
如果您需要页数,则可以创建一个私有字典,将计数器初始化为 0,然后打开字典在 EndPage 过程中测试当前计数值(并可选择增加它)。