我一直在尝试使用pdftk来检查Nitro Reader创建的压缩pdf流中的信息,但是pdftk不会对流进行放气.它不会产生任何错误,但除了重新排序pdf对象之外似乎没有做任何事情. 以下是其中一个pdf的最小示例.
pdftk test.pdf output test-d.pdf uncompress
Run Code Online (Sandbox Code Playgroud)
当我在其他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
谢谢,詹姆斯
gpo*_*poo 10
如果您没有附加pdftk,可以使用qpdf.例如,您可以使用:
$ qpdf --stream-data=uncompress input.pdf output.pdf
Run Code Online (Sandbox Code Playgroud)
对于它的价值,如果有blob,它们仍然可能显示为二进制.虽然,流的其余部分将是未压缩的(使用pdftk或qpdf). qpdf允许您解压缩全部或仅解压缩流.
来自qpdf手册:
当指定--stream-data = uncompress时,qpdf将尝试删除它支持的任何非有损过滤器.这包括/ FlateDecode,/ LZWDecode,/ ASCII85Decode和/ ASCIIHexDecode.这对于检查各种流的内容非常有用.
同样可能发生pdftk.
我收到了开发商对这个问题的答复。事实证明这是pdftk处理/DecodeParms [null]线路的方式中的一个错误。
如果解码参数为空,则编写者可以省略该行/DecodeParms,但兼容的读者应该以任何方式理解它。我尝试了新版本pdftk,问题似乎已经解决。