2014-10-11 52 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