【问题标题】:Is it possible to uncompress PDF by using Adobe Acrobat or Acrobat Distiller?是否可以使用 Adob​​e Acrobat 或 Acrobat Distiller 解压缩 PDF?
【发布时间】:2013-09-19 17:31:06
【问题描述】:

在 Web 上找到的大多数 PDF 文件都有压缩且不可读的数据流。是否可以使用 Acrobat 或 Acrobat Distiller 解压缩 PDF 文件的内部内容,让我们可以通过文本编辑器读取源代码?

附:这个问题的灵感来自this 答案,该答案解释了如何使用 GhostScript 完成。

【问题讨论】:

  • 您想在编辑器中阅读什么内容?运营商用来画什么?还是文字?
  • @mkl 我想阅读用于绘制矢量图的运算符。
  • 虽然我不知道如何使用 Acrobat 来做到这一点(虽然我手头只有 9.5 版),但在使用 iText 的小型 Java 或 .Net 程序中做到这一点相当容易或 iTextSharp 通过阅读 PDF 并重新保存而不压缩,参见。 HelloWorldCompression.java / HelloWorldCompression.cs 中的 decompressPdf 方法。

标签: pdf acrobat


【解决方案1】:

qpdfpdftk 已经被提及。显示命令:

$ qpdf --qdf --object-streams=disable orig.pdf uncompressed-orig.pdf
$ pdftk orig.pdf output uncompressed-orig.pdf uncompress

mutool 但尚未提及:

$ mutool clean -d -a orig.pdf uncompressed-orig.pdf

mutool 是一个命令行工具,与轻量级 MuPDF PDF + 文档查看器一起提供。

我认为您无法使用 Acrobat 或 Distiller 解压缩 PDF 对象的流(除非您有其他可用的付费软件插件)。

【讨论】:

  • 您确定qpdf 选项--object-streams=disable 是一个不错的选择吗?根据documentation,这个选项的意思是“不要写任何对象流”。流不会因此被删除吗?
  • @AlexeyPopkov:是的,我很确定这是一个不错的选择。我每天都在使用它。 IF 对象流被启用,许多较小的对象将被嵌入到另一个对象的流中,这使得分析更加复杂,即使未压缩也是如此。如果你不相信我,你自己试试。 (您需要一个至少有 1 个 /Type /ObjStm 对象的输入文件)。禁用对象流将解包所有这些流对象,并再次将它们正确地放入自己的间接对象中。
  • 你的意思是对于qpdf看似显而易见的选择--stream-data=uncompress会改变文件的结构并使其复杂化?
  • @AlexeyPopkov:--qdf 模式已经隐含地暗示了--stream-data=uncompress。是的,使用 QPDF 确实会以某种方式改变文件的结构。但它试图以保留内容的方式这样做。 QPDF 的自我描述甚至说明了这一点,称它是一个“对 PDF 文件进行结构性、内容保留转换的 CLI 工具”。 (在这种情况下,内容以一种不需要的和意想不到的方式更改是另一回事。我已经提交了一些关于这些的错误报告/增强请求:例如 OCG(“层”)变得扁平,增量更新历史记录丢失。)
  • 从 QPDF 文档看来,--qdf 模式创建了一个非常特殊的 PDF 文件版本,它是可编辑 PDF 开发人员所不希望的,并且因此,--qdf 模式可能会以某种方式损坏原始文件。我很欣赏这项努力,但我仍然不确定--qdf 模式是否对 PDF 代码的 可读性 有任何好处(在这个线程中,我对 可编辑性 不感兴趣)。
【解决方案2】:

使用cpdf:

cpdf -decompress in.pdf -o out.pdf

然后可以在文本编辑器中读取每个页面的图形运算符。不过,您需要一份标准副本作为参考。

披露:我是 cpdf 的作者。

【讨论】:

    【解决方案3】:

    使用qpdfpdftk 很容易。

    使用 Adob​​e Acrobat,您可以在分析 PDF 后获得内部结构(使用一些配置文件进行预检(例如检测 PDF 语法错误),然后是选项 -> 内部 PDF 结构) - 但无法获得可编辑的内容 使用文本编辑器

    【讨论】:

    • 我需要使用文本编辑器将 PDF 转换为 可读 的内容。 Acrobat 可以吗?
    • @AlexeyPopkov:您可以导出到例如XML。但是可编辑:不可以。
    • 导出到 XML 的结果类似于导出到 TXT:仅包含文本元素。我需要阅读用于在 PDF 中绘制矢量图的运算符。
    • +1 感谢 Options->Internal PDF structure 在 Preflight 中。最好将其内容复制到文本编辑器以进行进一步调查。顺便说一句,无需分析即可查看Internal PDF structure:它从一开始就可以工作(至少在 Acrobat 11 中)。
    • @AlexeyPopkov:“我需要阅读用于在 PDF 中绘制矢量图的运算符”。在这种情况下,查找未压缩的 /Contents 对象及其流。在展开的流中,还要查找/name Do 操作——这些操作可能指向名为/name 的外部参照对象,其中包含矢量元素(以及指向光栅图像对象)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-20
    • 1970-01-01
    • 2018-12-06
    • 2019-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多