如何修复损坏/"不符合标准"的PDF

Mau*_*sen 2 pdf perl

我正在用Perl构建一个Web应用程序.用户向我发送了一个XML文件,其中包含对许多PDF文档的引用.我使用XSLT将XML转换为XHTML,然后使用PrinceXML从XHTML创建PDF文档.此PDF保留包含将包含的附件​​的页眉和页脚的空白页面.

获得PDF后,我使用PDF :: API2 Perl模块逐个打开XML中引用的PDF文档,根据需要缩放和旋转页面,然后将它们包含在我创建的PDF文档中.

我的问题是用户提交的许多PDF都以某种方式被破坏了.即,它们不符合Adobe的PDF规范,PDF :: API2不知道如何操作它们.PDF :: API2文档建议使用pdftk来修复损坏的PDF,但这通常需要很长时间,并且在许多情况下不成功.

修复此类损坏的PDF的最佳方法是什么?

Kur*_*fle 5

您在此提倡的内容有时被称为"重新煎炸 PDF":转换为PostScript并返回PDF.

然而,虽然这可能解决了一些其他方法可能无法解决的问题,但您也应该了解这条路径中经常出现的问题和缺点:

  • PostScript的图形功能比PDF更受限制.PDF增加了对真实透明度,更多色彩空间,ICC颜色配置文件和更多字体类型的支持 - 这些功能在PostScript中不可用.(实际上,需要将这些功能添加到原始的PostScript图形模型中,这是Adobe开始开发PDF文件格式的激励之一!)

  • 因此,从PDF到PostScript必然会有松散的质量,在转换回PDF时你不会得到回报.

但是,您可以尝试另一种方法,避免重新油炸绕道:

请使用最新的Ghostscript版本.

Ghostscript有很多选项可用于控制PDF修复过程的各个方面.在不知道具体问题的情况下,我不能在这里具体说明.

但是在过去的10年里,我没有遇到很多Ghostscript无法修复的PDF问题,而通过Acroread重新煎炸可以做到(虽然有一些).OTOH,我有更多的例子,其中Acroread的重新煎炸没有成功,而Ghostscript的PDF - > PDF确实......