2013-02-25 12 views
8

Próbowałem pracować z pdftk w celu sprawdzenia informacji ze skompresowanych strumieni PDF utworzonych przez Nitro Reader, ale pdftk nie opróżni strumieni. Nie powoduje błędów, ale wydaje się, że nie robi nic poza zmianą kolejności obiektów pdf. Here to minimalny przykład jednego z tych plików pdf.pdftk nie będzie dekompresować strumieni danych

Kiedy próbuję pdftk na innych plikach pdf, wygląda na to, że działa dobrze. Jeśli ręcznie wyodrębniam strumienie danych i rozpakuję je za pomocą zlib w Pythonie, to będą one poprawnie kompresowane. Ponadto, jeśli otworzę plik pdf w programie Adobe Reader i ponownie go zapisam, pdftk będzie działał poprawnie na wynikowym pliku pdf.

Ręcznie przebadałem plik Nitro pdf zgodnie z moimi możliwościami i wydaje się, że jest to poprawny plik pdf. Jestem bardzo zdezorientowany, co się tutaj dzieje.

Jako tło problemu, mam setki tych plików pdf i próbuję wyszukać określone słowa kluczowe, które powinienem był móc zrobić, jeśli mogę zautomatyzować dekompresję.

wersję pdftk 1,45
Windows 7 Home Premium SP1
Nitro Reader 2 wersję 2.5.0.36

Dzięki James

Odpowiedz

2

Otrzymałem odpowiedź na to pytanie od programisty. Okazało się, że jest to błąd w sposobie obsługi linii pdftk.

Jeśli parametry dekodowania są zerowe, program piszący może po prostu pominąć linię /DecodeParms, ale czytelnik zgodny z przepisami powinien ją rozumieć w dowolny sposób. Wypróbowałem nową wersję pdftk i problem wydaje się być rozwiązany.

6

Jeśli nie są dołączone do pdftk, można użyć qpdf. Na przykład, możesz użyć:

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

Co to jest warte, jeśli są bloby, nadal mogą wyglądać jak binarnie. Chociaż reszta strumienia będzie nieskompresowana (albo z pdftk lub qpdf). qpdf umożliwia dekompresję wszystkich lub tylko strumieni.

Od qpdf instrukcji:

Kiedy --stream-data = uncompress jest określony, qpdf będzie próbował usunąć bez stratnej filtry, że obsługuje. Obejmuje to /FlateDecode,/LZWDecode,/ASCII85Decode i/ASCIIHexDecode. Ten może być bardzo przydatny do sprawdzania zawartości różnych strumieni.

To samo może się zdarzyć z pdftk.