Ich habe versucht, mit pdftk zu arbeiten, um Informationen aus komprimierten pdf-Streams zu untersuchen, die von Nitro Reader erstellt wurden, aber pdftk wird die Streams nicht deflationieren. Es erzeugt keine Fehler, aber es scheint nichts zu tun, außer die PDF-Objekte neu zu ordnen. Hier ist ein minimales Beispiel für eine dieser PDFs.
%Vor%Wenn ich pdftk auf anderen PDFs versuche, scheint es gut zu funktionieren. Wenn ich die Datenströme manuell extrahiere und sie mit zlib in Python dekomprimiere, dekomprimieren sie richtig. Wenn ich die PDF-Datei in Adobe Reader öffne und erneut speichere, funktioniert pdftk auch gut auf der resultierenden PDF-Datei.
Ich habe das Nitro-PDF nach bestem Wissen manuell überprüft und es scheint ein gültiges PDF zu sein. Ich bin sehr verwirrt darüber, was hier vorgeht.
Als Hintergrund für das Problem habe ich Hunderte dieser pdfs, und ich versuche, nach bestimmten Schlüsselwörtern zu suchen, die ich tun könnte, wenn ich die Dekompression automatisieren kann.
pdftk Version 1.45
Windows 7 Home Premium SP1
Nitro Reader 2 Version 2.5.0.36
Danke, James
Ich habe vom Entwickler eine Antwort auf diese Frage erhalten. Es stellte sich heraus, dass es ein Fehler in der Art war, wie pdftk
eine /DecodeParms [null]
-Zeile behandelte.
Wenn die Dekodierungsparameter Null sind, könnte ein Schreiber einfach die /DecodeParms
-Zeile weglassen, aber ein konformer Leser sollte es auf jede Weise verstehen. Ich habe die neue Version von pdftk
ausprobiert und das Problem scheint gelöst zu sein.
Wenn Sie nicht an pdftk
angehängt sind, können Sie qpdf verwenden. Zum Beispiel könnten Sie verwenden:
Für was es sich lohnt, wenn es Blobs gibt, können sie immer noch als binär erscheinen. Der Rest des Streams wird jedoch nicht komprimiert (entweder mit pdftk
oder qpdf
). Mit qpdf
können Sie alle oder nur die Streams dekomprimieren.
Von qpdf
manuell:
Wenn --stream-data = dekomprimiert angegeben wird, versucht qpdf Entfernen Sie alle nicht verlustbehafteten Filter, die es unterstützt. Das beinhaltet / FlateDecode, / LZWDecode, / ASCII85Decode und / ASCIIHexDecode. Dies kann sehr nützlich sein, um den Inhalt verschiedener Streams zu überprüfen.
Dasselbe könnte mit pdftk
passieren.