/ EndPage计数永远不会增加

时间:2017-10-11 14:10:15

标签: pdf ghostscript postscript pdfstamper

我试图用一个带有ghostscript的2页pdf添加一段文字。 查看类似的问题(https://stackoverflow.com/a/9783516/1581629https://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}

有人能指出我在这里失踪的东西吗?

1 个答案:

答案 0 :(得分:2)

Ghostscript PDF解释器在PDF文件的每个页面的开头执行setpagedevice。

这样做是因为PDF文件中的每个页面都可以具有不同的MediaBox,因此它会提取MediaBox并使用包含MediaBox的PageSize条目构造字典,以便设置(可能)新的媒体大小。

每次执行setpagedevice都会重置页数,因此每个页面实际上都是第一页。

如果您需要页面计数,那么您可以创建一个私有字典,将计数器初始化为0,然后在EndPage过程中打开字典测试当前计数值(并可选择增加它)。