pdftk不会解压缩数据流

时间:2013-02-25 00:03:02

标签: pdf pdftk

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

答案 0 :(得分:9)

如果您未加载pdftk,则可以使用qpdf。例如,您可以使用:

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

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

来自qpdf手册:

  

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

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

答案 1 :(得分:2)

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

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