pdftk无法解压数据流。

10
我一直在尝试使用pdftk来检查由Nitro Reader创建的压缩pdf流中的信息,但pdftk不能解压这些流。它不会产生任何错误,但似乎除了重新排列pdf对象外,并没有执行任何操作。在这里是一个这些pdf文件的最小示例。
    pdftk test.pdf output test-d.pdf uncompress

当我尝试在其他pdf上使用pdftk时,它似乎能够正常工作。如果我手动提取数据流并在Python中使用zlib解压缩它们,它们可以正确地解压缩。此外,如果我在Adobe Reader中打开pdf并重新保存,则pdftk可以在生成的pdf上正常工作。
我已经尽力手动检查了Nitro pdf,并且它似乎是有效的pdf。我非常困惑发生了什么。
作为问题的背景,我有数百个这些pdf,并且正在尝试搜索特定关键字,如果我可以自动化解压缩,那么我应该能够做到这一点。 pdftk版本1.45
Windows 7 Home Premium SP1
Nitro Reader 2版本2.5.0.36
谢谢, 詹姆斯
2个回答

14
如果你不依赖于 pdftk,你可以使用 qpdf。例如,你可以使用以下命令:
$ qpdf --stream-data=uncompress input.pdf output.pdf

值得一提的是,如果有二进制数据块,它们可能仍会以二进制形式出现。尽管如此,流的其余部分将不会被压缩(使用 pdftk 或者 qpdf)。qpdf 允许您解压所有或仅解压流。

来自 qpdf 手册:

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

pdftk 也可能出现同样的情况。


有没有使用gs(GhostScript)的方法来实现这个? - Geremia

3

我从开发者那里得到了这个问题的答案。原来是pdftk处理/DecodeParms [null]行的方式存在bug。

如果解码参数为null,写入者可以省略/DecodeParms行,但符合标准的阅读器应该两种方式都能理解。我尝试使用新版本的pdftk,问题似乎已经解决了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接