【问题标题】:Repairing pdfs with damaged xref table使用损坏的外部参照表修复 pdf
【发布时间】:2017-03-31 20:42:53
【问题描述】:

是否有任何解决方案(最好在 Python 中)可以修复带有损坏的外部参照表的 pdf?

我有一个 pdf,我尝试在 Ghostscript 中转换为 png 并收到以下错误:

**** 错误:读取外部参照表时出错。 **** 文件已损坏。这可能是由于 **** 转换或传输文件时出现问题。

但是,我可以在 Mac 上的 Preview 中打开 pdf,当我使用 Preview 导出 pdf 时,我可以转换导出的 pdf。

有什么方法可以修复 pdf 而无需手动打开并导出它们?

【问题讨论】:

  • 根据损坏的类型,pdfrw 可能能够修复它。 (我是pdfrw作者。)
  • 感谢您的建议。我刚刚尝试使用 pdfrw 读取 pdf,但得到一个“PdfParseError:预期的“外部参照”关键字或外部参照流对象”。我正在尝试修复此 pdf:here
  • 谢谢!我将不得不分析为什么 pdfrw 不起作用。同时,我发现 pdftk 会修复它,例如pdftk srcfile output dstfile.

标签: python pdf ghostscript


【解决方案1】:

如果文件在 Ghostscript 中按预期呈现,那么您可以通过 GS 将其运行到 pdfwrite 设备并创建一个不会损坏的新 PDF 文件。

预览版(就像 Acrobat 一样)几乎可以肯定地在后台默默地修复问题。 Ghostscript 也会这样做,但与其他应用程序不同,我们认为您需要知道该文件有问题。首先让您知道它已损坏,其次如果文件在 Ghostscript(或者实际上是其他应用程序)中呈现不正确,您就会知道原因。

请注意,外部参照损坏有两个主要原因;首先,应用程序的开发人员没有仔细阅读规范,外部参照中的文件偏移量是正确的,但格式不正确(这种情况并不少见,GS 修复将是无害的),其次文件真正已经在运输过程中损坏,或因编辑而损坏。

在后一种情况下,可能还有其他问题,Ghostscript 也会尝试警告您这些问题。如果您没有收到任何其他警告或错误,则可能只是格式错误的外部参照表。

【讨论】:

  • 感谢您的回复。不幸的是,Ghostscript 无法处理/修复 pdf。但是,预览可以。我正在通过一个已知会返回损坏的 pdf 的 API 提取 pdf。所以我只是在寻找一种以自动化方式修复这些 pdf 的方法,因为我正在处理大量它们。
  • 我很想看到这样的 PDF 文件,我们会在可能的情况下尝试修复 PDF。你能制造一个你可以公开的吗?
  • Here 你去吧。
  • 有趣。我不认为它是错误的外部参照(尽管这是错误的),它似乎是一个损坏的图像。我会进一步戳它,谢谢分享。
  • 有趣。该文件有一个图像,它将其长度声明为间接对象(它以这种方式处理所有页面以及所有图像)。间接对象​​声明长度为 0 ......所以 Ghostscript 合理地抱怨图像没有足够的数据。顺便说一句,Acrobat 提供在退出时保存文件,这几乎证明它已损坏,即使它读取它也可以。如果这是由较新版本的 libtiff 生成的,您可能应该向 libtiff 开发人员提出错误报告。 (或者如果有更新的版本,则升级,看起来有)
猜你喜欢
  • 2021-11-20
  • 2016-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-04
  • 1970-01-01
  • 2010-09-25
  • 1970-01-01
相关资源
最近更新 更多