2017-10-11 111 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過程中打開該字典測試當前計數值(並且可選地增加它)。