【问题标题】:pdftk will not decompress data streamspdftk 不会解压数据流
【发布时间】:2013-02-25 00:03:02
【问题描述】:

我一直在尝试使用 pdftk 来检查 Nitro Reader 创建的压缩 pdf 流中的信息,但 pdftk 不会压缩流。它不会产生任何错误,但除了重新排序 pdf 对象之外,它似乎没有做任何事情。 Here 是这些 pdf 文件之一的最小示例。

    pdftk test.pdf output test-d.pdf uncompress

当我在其他 pdf 上尝试 pdftk 时,它似乎工作正常。如果我手动提取数据流并在 Python 中使用 zlib 解压缩它们,它们会正确解压缩。此外,如果我在 Adob​​e Reader 中打开 pdf 并重新保存,pdftk 可以在生成的 pdf 上正常工作。

我已尽我所能手动检查了 Nitro pdf,它似乎是一个有效的 pdf。我对这里发生的事情感到非常困惑。

作为问题的背景,我有数百个这样的 pdf,我正在尝试搜索某些关键字,如果我可以自动解压缩,我应该能够做到。

pdftk 版本 1.45
Windows 7 家庭高级版 SP1
Nitro Reader 2 版本 2.5.0.36

谢谢, 詹姆斯

【问题讨论】:

    标签: pdf pdftk


    【解决方案1】:

    如果你没有附加到pdftk,你可以使用qpdf。例如,您可以使用:

    $ qpdf --stream-data=uncompress input.pdf output.pdf
    

    不管怎样,如果有 blob,它们仍然可能显示为二进制。虽然,流的其余部分将被解压缩(使用pdftkqpdf)。 qpdf 允许您解压缩所有或仅解压缩流。

    来自qpdf手册:

    当指定 --stream-data=uncompress 时,qpdf 将尝试 删除它支持的任何无损过滤器。这包括 /FlateDecode、/LZWDecode、/ASCII85Decode 和 /ASCIIHexDecode。这 对于检查各种流的内容非常有用。

    pdftk 也可能发生同样的情况。

    【讨论】:

    • 有没有办法用gs (GhostScript) 做到这一点?
    【解决方案2】:

    我收到了开发者对这个问题的回答。原来是pdftk 处理/DecodeParms [null] 行的方式中的一个错误。

    如果解码参数为空,作者可以省略/DecodeParms 行,但兼容的读者应该理解它。我试用了pdftk的新版本,问题似乎解决了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多