Wie man erkennt, ob eine PDF-Datei komprimiert ist oder nicht und wie man sie (dekomprimiert)

18

Ich habe gerade erfahren, dass PDF-Dateien komprimiert werden können, um ihre Festplattengröße zu reduzieren.

  1. Ich habe mich gefragt, ob eine PDF-Datei bereits komprimiert wurde.
  2. Mit welchen Anwendungen / Befehlen kann eine PDF-Datei komprimiert oder dekomprimiert werden?

Meine Umgebung ist Linux Ubuntu 10.10.


Einige Versuche liefern keine zufriedenstellenden Ergebnisse:

  1. Hier sind die Ergebnisse des Versuchs pdftk:

    $ pdftk 3.pdf output 5.pdf uncompress 
    $ pdftk 3.pdf output 3comp.pdf compress 
    $ ls -l 3.pdf 3comp.pdf 5.pdf
    -rwxrwx--- 1 root plugdev  8652269 2011-07-30 12:27 3comp.pdf
    -rwxrwx--- 1 root plugdev  8652319 2011-07-29 22:15 3.pdf
    -rwxrwx--- 1 root plugdev 16829828 2011-07-30 12:27 5.pdf
    

    Die Eigenschaften der Dateien zeigen, dass nicht alle optimiert sind.

  2. Ergebnisse der Konvertierung nach ps und dann zurück nach pdf:

    $ pdf2ps 3.pdf 3.ps
    $ ps2pdf 3.ps 3c.pdf
    $ ls -l 3.pdf 3.ps 3c.pdf
    -rwxrwx--- 1 root plugdev   8808946 2011-07-30 13:14 3c.pdf
    -rwxrwx--- 1 root plugdev   8652319 2011-07-29 22:15 3.pdf
    -rwxrwx--- 1 root plugdev 122375966 2011-07-30 13:14 3.ps
    
Tim
quelle
Ich kann es momentan nicht testen, da ich kein komprimiertes PDF zur Hand habe, aber versuche es file. Es sollte zeigen, ob die Datei komprimiert ist oder nicht.
Polemon
1
@polemon: Danke! Das tut es nicht. Die Ausgabe von $file 3.pdfist3.pdf: PDF document, version 1.4
Tim
Beachten Sie, dass einzelne Streams in der PDF-Datei komprimiert werden können. Die Frage "Ist die gesamte PDF-Datei komprimiert?" Ist also die falsche Frage (obwohl in vielen Fällen alle oder die meisten Streams entweder komprimiert oder unkomprimiert sind).
Dirkt

Antworten:

30

Zusamenfassend:

Um zu wissen, ob es bereits komprimiert ist:

strings your.pdf | grep /Filter

Verwenden Sie QPDF , um eine PDF-Datei zu ( dekomprimieren)

qpdf --stream-data=compress your.pdf compressed.pdf
qpdf --stream-data=uncompress compressed.pdf uncompressed.pdf  

Erläuterung:

Das Schlüsselwort "Filter" in einer PDF-Datei ist ein Indikator für die verwendete Komprimierungsmethode. Einige von ihnen sind:

CCITT G3 / G4 - wird für monochrome Bilder verwendet
JPEG - ein verlustbehafteter Algorithmus, der für Bilder verwendet wird
JPEG2000 - eine modernere Alternative zu JPEG, das auch zum Komprimieren von Bildern verwendet wird
Flate - wird zum Komprimieren von Text sowie von Bildern verwendet
JBIG2 - eine Alternative zu CCITT-Komprimierung für monochrome Bilder
LZW - wird sowohl zum Komprimieren von Text als auch von Bildern verwendet, wird jedoch durch Flate
RLE ersetzt - wird für monochrome Bilder verwendet
ZIP - wird für Graustufen- oder Farbbilder verwendet

(von hier kopiert ).

Angesichts der komplexen PDF-Dateistruktur wird jedoch ein Teil (oder "Stream") der PDF-Datei meistens bereits auf irgendeine Weise komprimiert (und beim Greifen / Filtern angezeigt), während dies bei einem anderen Teil nicht der Fall ist Es gibt keine JA / NEIN-Antwort auf die Frage, ob das PDF komprimiert ist.
ein Weg , dies zu überwinden wäre, die hinzuzufügen -cOption zu grep, die die Anzahl der Vorkommen gibt, so dass man sehen konnte , relativ , wie gut es zusammengedrückt wird. Wenn zum Beispiel weniger als 10 zurückgegeben werden, ist es ziemlich unkomprimiert.strings "large.pdf" | grep -c /Filter

Eine weitere Eigenschaft in Bezug auf die Größe von PDFs ist, ob sie für den schnellen Zugriff optimiert wurden, wobei "optimierte" PDFs größer sind, um aus Wikipedia zu zitieren :

Es gibt zwei Layouts für die PDF-Dateien: nicht linear (nicht "optimiert") und linear ("optimiert"). Nicht lineare PDF-Dateien belegen weniger Speicherplatz als ihre linearen Gegenstücke, obwohl der Zugriff auf sie langsamer ist, da Teile der Daten, die zum Zusammenstellen von Seiten des Dokuments erforderlich sind, über die gesamte PDF-Datei verteilt sind. Lineare PDF-Dateien (auch als "optimierte" oder "weboptimierte" PDF-Dateien bezeichnet) sind so konstruiert, dass sie in einem Webbrowser-Plug-in gelesen werden können, ohne auf den Download der gesamten Datei zu warten, da sie in einer Datei auf die Festplatte geschrieben werden lineare (wie in der Seitenreihenfolge) Mode. PDF-Dateien können mit Adobe Acrobat oder QPDF optimiert werden.

Mit können Sie prüfen, ob das PDF optimiert ist pdfinfo your.pdf.

Philomath
quelle
Vielen Dank! (1) Die Ergebnisse der Verwendung von qpdf ähneln denen von pdftk: Mit compress wurde die Größe tatsächlich etwas größer (seltsam), und mit dem Dekomprimieren wurde die Größe viel größer, fast verdoppelt. (2) Versuchen pdftk und gpdf dasselbe mit den Komprimierungs- und Dekomprimierungsoptionen zu erreichen?
Tim
@ Tim: (Entschuldigung, ich war nicht hier). Für (1) ist die PDF-Datei, wie ich bereits erklärt habe, bereits teilweise komprimiert (höchstwahrscheinlich). Aus diesem Grund wird durch das Komprimieren nicht zu viel gespart (und durch das Dekomprimieren wird sie viel größer, da alle komprimierten Streams dekomprimiert werden ). (2) Höchstwahrscheinlich qpdfund in etwa pdftkdasselbe in Bezug auf die Komprimierung tun, aber qpdfauch optimieren können (plus viele weitere Dinge).
Philomath
10

pdftk ist ein Tool, mit dem Sie einige Operationen an PDF-Dateien ausführen können, z. B. Komprimierung / Dekomprimierung:

$ pdftk test.pdf output compressed_test.pdf compress
uloBasEI
quelle
Vielen Dank! Ich habe mich gefragt, ob eine PDF-Datei bereits komprimiert wurde.
Tim
1
@Tim: Zeigt an pdfinfo file.pdf, ob ein PDF optimiert ist . Ich bin mir jedoch nicht sicher, ob das komprimiert bedeutet oder nicht.
Nico
1
@uloBasEI: Ich habe Ihren Befehl mit pdftk zur Komprimierung ausprobiert, aber die Größe hat sich fast nicht geändert. Wenn ich dekomprimiere, verdoppelt sich die Dateigröße. Die Eigenschaften der Originaldatei, der komprimierten Datei und der nicht komprimierten Dateien zeigen, dass sie nicht optimiert sind.
Tim
@nico: Danke! Siehe mein Kommentar oben und mein Update. Es scheint, dass Komprimierung und Optimierung sich nicht gegenseitig implizieren?
Tim
1

Ich habe die Komprimierungsmethode in der PDF-Datei gefunden. Öffnen Sie das PDF mit dem Texteditor. Führen Sie eine CCITT-Suche oder -Suche durch, wenn sie nicht gefunden wurde. Geben Sie JPEG, Flate, JBIG2, LZW, RLE und ZIP ein.
Klingt schlimmer als es ist! Sehr einfach, die Komprimierungsmethode des Datenstroms zu finden.

bizhubkey1
quelle
Das ist eher zweifelhaft. Ich habe mit Ihrer Methode eine nicht komprimierte PDF-Datei (durch qpdf dekomprimiert) mit grep wie in grep -E "(CCITT | JPEG | Flate | LZW | RLE | ZIP)" dekomprimiert.pdf überprüft und es wird die Meldung Binärdatei unkomprimiert.pdf zurückgegeben Streichhölzer . Es sieht so aus, als würde festgestellt, dass die unkomprimierte.pdf-Datei sowohl LZW- als auch RLE-Muster enthält.
user91822
-1

Überprüfen Sie einfach seine Eigenschaften; Es wird angezeigt, ob die Datei komprimiert ist oder nicht.

rosni
quelle
Ich denke die Frage Heidi ist, mit welchem ​​Programm die Eigenschaften überprüft werden sollen, insbesondere mit skriptfähigen Kommandozeilenprogrammen.
Caleb
> Überprüfen Sie einfach seine Eigenschaften - welches [Open Source] -Programm könnte man dafür verwenden?
Maxim