2017-10-11 112 views
0

我试图用ghostscript将一段文本添加到2页pdf。 看着类似的问题(https://stackoverflow.com/a/9783516/1581629https://stackoverflow.com/a/12596669/1581629 https://stackoverflow.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} 

任何人都可以指出我在这里错过了什么吗?

回答

2

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

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

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

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