首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何修复损坏的/不符合标准的PDF

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

Stack Overflow用户
提问于 2012-09-07 03:40:02
回答 2查看 505关注 0票数 2

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

有了PDF之后,我使用PDF::API2Perl模块逐个打开XML中引用的PDF文档,根据需要缩放和旋转页面,然后将它们包含在我创建的PDF文档中。

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

修复这些损坏的PDF的最好方法是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-07 04:32:28

你在这里提倡的东西有时被称为“重新油炸PDF”:转换为PostScript,然后再转换回PDF。

然而,虽然这可能会修复一些使用其他方法可能不容易修复的问题,但您也应该意识到这条道路上经常存在的问题和缺点:

  • PostScript的图形功能比PDF更有限。PDF增加了对真实透明度、更多色彩空间、ICC色彩配置文件和更多字体类型的支持--这些都是PostScript所没有的功能。(事实上,需要在原始的PostScript图形模型中添加这些功能是促使Adobe开始开发PDF文件格式的原因之一!)
  • 因此,从PDF转换到PostScript必然会导致质量下降,当您转换回PDF时,这种质量将无法恢复。

然而,你可以尝试另一种选择,它可以避免重复煎炸的弯路:

在Ghostscript:的帮助下直接

  • Convert PDF -> PDF

gs \ -o output.pdf \ -dPDFSETTINGS=/prepress \ -sDEVICE=pdfwrite \ input.pdf

请使用可用于此操作的最新Ghostscript版本。

Ghostscript有很多选项,您可以使用这些选项来控制PDF修复过程的各个方面。在不了解您的具体问题的情况下,我不能在这里更具体。

但在过去的10年里,我并没有遇到很多Ghostscript无法修复的PDF问题,而通过Acroread重新油炸可以解决(尽管有一些问题)。哦,我有更多的例子,Acroread的重新煎炸没有成功,而Ghostscript的PDF -> PDF却成功了……

票数 5
EN

Stack Overflow用户

发布于 2012-09-07 03:56:08

我回答这个问题是为了分享我在构建这个工具时找到的答案。

正如问题中提到的,我首先尝试使用Linux命令行工具pdftk修复损坏的PDF。这在某些情况下有效,但大多数损坏的PDF仍然无法修复,并且此工具通常需要很长时间。

然后,我突然想到了将PDF转换为PostScript,然后再转换回PDF的想法。我使用pdf2ps和ps2pdf进行转换。这两个工具都是ghostscript的包装器。这种方法获得了更高的命中率,但仍然有相当多的损坏的PDF无法转换为PostScript文件。

然后,我试着用Adobe的PDF阅读器acroread将PDF转换成PostScript格式,而不是pdf2ps格式。事实证明,这是一个非常好的解决方案,可以修复几乎所有的PDF。我仍然使用ps2pdf将文件转换回PDF。

我使用的acroread命令是:

代码语言:javascript
复制
acroread -toPostScript -choosePaperByPDFPageSize -pairs input.pdf output.ps

更新(2015年2月25日):我遵循了Kurt Pfeifle的建议,并将其纳入我的流程中。这比“重做”慢(见Kurt的帖子),但有更高的成功率。有趣的是,在极少数情况下,它不工作,而‘重做’工作,所以这成为我的后备。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12307204

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档