/EndPage 计数永远不会增加

/EndPage count never increases

我正在尝试使用 ghostscript 将一段文本添加到 2 页的 pdf 中。 查看类似的问题( 和 ) 我正在尝试使用 /EndPage,我希望在堆栈上得到一个 "page counter" 并用它来选择要修改的页面。

但是,当/EndPage(Postscript语言参考的pg.441)的堆栈中的"reason"为0时,"counter"也始终为0。

MWE 可能是(使用 git 存储库中的 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 过程中打开字典测试当前计数值(并可选地增加它)。