2014-10-11 14 views
2

我試圖使用Ghostscript將PDF作爲「最後一頁」添加到多個其他PDF中。我遇到的問題是Ghostscript遍歷整個PDF並做了一堆字體替換。將頁面批量添加到多個PDF中而不會混淆字體

我使用以下批處理腳本:

FOR %%G IN (*.pdf) DO IF NOT %%G==lastpage.pdf gswin64c -sDEVICE=pdfwrite -sOutputFile="output\%%G" -dNOPAUSE -dBATCH "%%G" lastpage.pdf 

典型的錯誤:

Page 12 
Substituting font Courier for GGCJBF+Courier. 

我有時也會得到其他錯誤,像這樣:

jbig2dec FATAL ERROR decoding image: prevent DOS while decoding height classes (segment 0x00) 
failed to create parsed JBIG2GLOBALS object. 
**** Error reading a content stream. The page may be incomplete. 
**** File did not complete the page properly and may be damaged. 

所有我需要gs做的是追加我的lastpage.pdf到現有的PDF 沒有遍歷我正在追加的所有PDF,尤其是字體替換,因爲我不會使用其他人在其PDF中使用的大部分字體。

是否有可能在gs中簡單追加而不遍歷PDF的每一頁?是否有另一種工具可以在不存在此問題的情況下批量添加PDF?

+1

請嘗試[PDFToolkit](https://www.pdflabs.com/tools/pdftk-server/)。 '服務器'版本是做這種操作的命令行。 – 2014-10-11 07:57:09

回答

2

您需要知道,Ghostscript不會簡單地操作傳入的PDF文件,因此您不會'追加'頁面。它所做的是將傳入文件解釋爲標記操作,將其傳遞給設備,並且該設備會對它們採取進一步的操作。渲染設備寫入位圖,pdfwrite將標記操作重新組合爲一個全新的文件。

這就是爲什麼它'貫穿整個文件',它的工作方式。這樣做有其優點(例如可能會改變文件內容)和缺點。

現在,如果您正在爲嵌入字體獲取字體替換,則嵌入字體會出現問題(或者您可能使用的是舊版Ghostscript的錯誤)。你可以嘗試更新版本的Ghostscript,但是你永遠不會處理整個輸入文件。

爲什麼不試試pdftk。

+0

謝謝!不知道gs是這樣工作的,所以謝謝解釋。 PDFtk似乎做的工作。 – 2014-10-11 22:14:59

+0

我最近遇到的一個類似問題:我已經配置了ghostscript-9.15以避免圖像的有損編碼(-dColorImageFilter =/FlatEncode -dAutoFilterColorImages = false等),但生成的PDF中的圖像顯然是用有損編碼器編碼的。另外,我收到了諸如「jbig2dec FATAL ERROR解碼圖像:解碼高度級別時禁止DOS」等錯誤消息,這意味着使用了有損編碼器。有沒有辦法讓ghostscript永不重新編碼圖像? – auxsvr 2015-11-06 09:41:36

+0

這些消息(來自你發佈的內容)來自*解碼器*,這表明你的原始圖像是JBIG2圖像,並且之前是單色的。所以ColorImage控件不會影響它(它也表明圖像以某種方式被破壞)。我的第一個建議是使用當前代碼(編寫本文時爲9.18),如果問題仍然存在,請打開一個錯誤報告,附上一個示例,並明確描述「明顯使用有損編碼器編碼」的圖像 – KenS 2015-11-06 22:11:15

相關問題