/EndPage数量从不增加
问题描述:
我试图用ghostscript将一段文本添加到2页pdf。 看着类似的问题(https://*.com/a/9783516/1581629和 https://*.com/a/12596669/1581629 https://*.com/a/18774237/1581629)我试图使用/ EndPage,我期待在堆栈上获得一个“页面计数器”并使用它来选择要修改的页面。/EndPage数量从不增加
然而,当“原因”在/尾页(PostScript语言参考的pg.441)的堆叠为0时,“计数器”也始终为0。
甲MWE可以是(使用GS 9.23从git仓库):
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过程中打开该字典测试当前计数值(并且可选地增加它)。