10

我一直在尝试使用 pdftk 来检查 Nitro Reader 创建的压缩 pdf 流中的信息,但 pdftk 不会压缩流。它不会产生任何错误,但除了重新排序 pdf 对象之外,它似乎没有做任何事情。 是其中一个 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 Home Premium SP1
Nitro Reader 2 版本 2.5.0.36

谢谢,詹姆斯

4

2 回答 2

13

如果你不依附pdftk,你可以使用qpdf。例如,您可以使用:

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

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

qpdf手册:

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

同样的情况也可能发生在pdftk.

于 2013-03-22T22:59:56.883 回答
3

我从开发人员那里收到了这个问题的答案。事实证明这是pdftk处理/DecodeParms [null]线路的方式中的一个错误。

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

于 2013-08-26T06:40:34.283 回答