it-swarm.com.de

Optimieren Sie PDF Dateien (mit Ghostscript oder anderen)

Ist Ghostscript die beste Option, wenn Sie eine PDF Datei optimieren und die Dateigröße reduzieren möchten?

Ich muss eine Menge PDF Dateien speichern und deshalb muss ich die Dateigröße so weit wie möglich optimieren und reduzieren

Hat jemand irgendwelche Erfahrungen mit Ghostscript und/oder anderen?

befehlszeile

exec('gs -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -dCompatibilityLevel=1.4
-dPDFSETTINGS=/screen -sOutputFile='.$file_new.' '.$file);
48
clarkk

Wenn Sie nach einer kostenlosen (wie in 'libre') Software suchen, ist Ghostscript mit Sicherheit Ihre beste Wahl. Es ist jedoch nicht immer einfach zu bedienen - einige seiner (sehr leistungsfähigen) Verarbeitungsoptionen sind nicht leicht zu finden.

Schauen Sie sich diese Antwort an, in der erklärt wird, wie Sie eine detailliertere Kontrolle über das Downsampling der Bildauflösung durchführen, als dies mit dem generischen -dPDFSETTINGS=/screen Möglich ist.

Grundsätzlich erfahren Sie, wie Sie Ghostscript veranlassen, alle Bilder auf eine Auflösung von 72 dpi herunterzusampeln (dieser Wert wird von -dPDFSETTINGS=/screen Verwendet - möglicherweise möchten Sie sogar noch niedriger gehen):

-dDownsampleColorImages=true \
-dDownsampleGrayImages=true \
-dDownsampleMonoImages=true \
-dColorImageResolution=72 \
-dGrayImageResolution=72 \
-dMonoImageResolution=72 \

Wenn Sie versuchen möchten, ob Ghostscript die verwendeten Schriften auch "ausbetten" kann (manchmal funktioniert es, manchmal nicht - abhängig von der Komplexität der eingebetteten Schrift - und auch Bei der verwendeten Schriftart ) können Sie versuchen, Folgendes zu Ihrem gs-Befehl hinzuzufügen:

gs \
  -o output.pdf \
   [...other options...] \
  -dEmbedAllFonts=false \
  -dSubsetFonts=true \
  -dConvertCMYKImagesToRGB=true \
  -dCompressFonts=true \
  -c ".setpdfwrite <</AlwaysEmbed [ ]>> setdistillerparams" \
  -c ".setpdfwrite <</NeverEmbed [/Courier /Courier-Bold /Courier-Oblique /Courier-BoldOblique /Helvetica /Helvetica-Bold /Helvetica-Oblique /Helvetica-BoldOblique /Times-Roman /Times-Bold /Times-Italic /Times-BoldItalic /Symbol /ZapfDingbats /Arial]>> setdistillerparams" \
  -f input.pdf

Hinweis: Beachten Sie, dass durch das Heruntertasten der Bildauflösung die Qualität (irreversibel) beeinträchtigt wird und das Einbetten von Schriftarten das Anzeigen und Drucken der PDF-Dateien erschwert oder unmöglich macht, es sei denn, es handelt sich um dieselben Schriftarten auf der Maschine installiert ....


Aktualisieren

Eine Option, die ich in meiner ursprünglichen Antwort übersehen hatte, ist das Hinzufügen

-dDetectDuplicateImages=true

zur Kommandozeile. Dieser Parameter veranlasst Ghostscript, Bilder, die mehrfach in PDF eingebettet sind, zu erkennen. Dies kann vorkommen, wenn Sie ein Bild als Logo oder Seitenhintergrund verwenden und die PDF-Generierungssoftware ist nicht für diese Situation optimiert. Dies war früher bei älteren Versionen von OpenOffice/LibreOffice der Fall (ich habe die neueste Version von LibreOffice, Version 4.3.5.2, getestet und es funktioniert nicht mehr so ​​dumm).

Es passiert auch, wenn Sie PDF Dateien mit Hilfe von pdftk verketten. Um Ihnen den Effekt zu zeigen und wie Sie ihn entdecken können, schauen wir uns ein Beispiel an PDF Datei:

pdfinfo p1.pdf

 Producer:       libtiff / tiff2pdf - 20120922
 CreationDate:   Tue Jan  6 19:36:34 2015
 ModDate:        Tue Jan  6 19:36:34 2015
 Tagged:         no
 UserProperties: no
 Suspects:       no
 Form:           none
 JavaScript:     no
 Pages:          1
 Encrypted:      no
 Page size:      595 x 842 pts (A4)
 Page rot:       0
 File size:      20983 bytes
 Optimized:      no
 PDF version:    1.1

In neueren Versionen von Popplers Dienstprogramm pdfimages wurde die Unterstützung für den Parameter -list Hinzugefügt, mit dem alle Bilder aufgelistet werden können, die in einer PDF Datei enthalten sind:

pdfimages -list p1.pdf

 page num  type width height color comp bpc  enc interp objectID x-ppi y-ppi size ratio
 --------------------------------------------------------------------------------------
    1   0 image    423   600   rgb    3   8 jpeg     no     7  0    52    52 19.2K 2.6%

Dieses Beispiel PDF ist ein einseitiges Dokument, das ein Bild enthält, das mit JPEG-Komprimierung komprimiert wurde, eine Breite von 423 Pixel und eine Höhe von 600 Pixel hat und mit einer Auflösung von 52 wiedergegeben wird PPI auf der Seite.

Wenn wir 3 Kopien dieser Datei mit Hilfe von pdftk wie folgt verketten:

pdftk p1.pdf p1.pdf p1.pdf cat output p3.pdf

dann zeigt das Ergebnis diese Bildeigenschaften über pdfimages -list:

pdfimages -list p3.pdf

 page num  type width height color comp bpc  enc interp objectID x-ppi y-ppi size ratio
 --------------------------------------------------------------------------------------
    1   0 image   423    600   rgb    3   8 jpeg     no     4  0    52    52 19.2K 2.6%
    2   1 image   423    600   rgb    3   8 jpeg     no     8  0    52    52 19.2K 2.6%
    3   2 image   423    600   rgb    3   8 jpeg     no    12  0    52    52 19.2K 2.6%

Dies zeigt, dass es 3 identische PDF Objekte mit den IDs 4, 8 und 12) gibt, die jetzt in p3.pdf Eingebettet sind. p3.pdf Besteht aus 3 Seiten :

pdfinfo p3.pdf | grep Pages:

 Pages:          3

Optimieren Sie PDF durch Ersetzen doppelter Bilder durch Verweise

Jetzt können wir die oben erwähnte Optimierung mit Hilfe von Ghostscript anwenden

 gs -o p3-optim.pdf -sDEVICE=pdfwrite -dDetectDuplicateImages=true p3.pdf

Überprüfung:

 pdfimages -list p3-optim.pdf

 page num  type width height color comp bpc  enc interp objectID x-ppi y-ppi size ratio
 --------------------------------------------------------------------------------------
    1   0 image   423    600   rgb    3   8 jpeg     no    10  0    52    52 19.2K 2.6%
    2   1 image   423    600   rgb    3   8 jpeg     no    10  0    52    52 19.2K 2.6%
    3   2 image   423    600   rgb    3   8 jpeg     no    10  0    52    52 19.2K 2.6%

Es wird immer noch ein Bild pro Seite aufgelistet - aber die PDF Objekt-ID ist jetzt immer dieselbe: 10.

 ls -ltrh p1.pdf p3.pdf p3-optim.pdf

   [email protected] 1 kp  staff    20K Jan  6 19:36 p1.pdf
   -rw-r--r--  1 kp  staff    60K Jan  6 19:37 p3.pdf
   -rw-r--r--  1 kp  staff    16K Jan  6 19:40 p3-optim.pdf

Wie Sie sehen, hat die mit pdftk vorgenommene "blöde" Konkatentation die ursprüngliche Dateigröße auf das Dreifache der ursprünglichen Größe erhöht. Die Optimierung durch Ghostscript hat es erheblich reduziert.

In den neuesten Versionen von Ghostscript wird möglicherweise sogar standardmäßig -dDetectDuplicateImages Angewendet. (AFAIR, Version 9.02, die es zum ersten Mal einführte, hat es standardmäßig nicht verwendet.)

74
Kurt Pfeifle

Sie können gute Ergebnisse erzielen, indem Sie von PDF zu Postscript konvertieren und dann zurück zu PDF mit

pdf2ps file.pdf file.ps
ps2pdf -dPDFSETTINGS=/ebook file.ps file-optimized.pdf

Der Wert des Arguments -dPDFSETTINGS definiert die Qualität der Bilder im resultierenden PDF. Optionen sind von niedriger bis hoher Qualität: /screen, /default, /ebook, /printer, /prepress, siehe http://milan.kupcevic.net/ghostscript-ps-pdf/ als Referenz.

Die Postscript-Datei kann sehr groß werden, aber die Ergebnisse sind es wert. Ich bin von einer 60 MB großen PDF zu einer 140 MB großen Postscript-Datei übergegangen, habe aber eine für 1.1 MB optimierte PDF erhalten.

27

Ich benutze Ghostscript mit folgenden Optionen aus hier .

gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/screen \
 -dNOPAUSE -dQUIET -dBATCH -sOutputFile=output.pdf input.pdf
7
Primoz Rome

Möglicherweise stellen Sie fest, dass pdftocairo (from Poppler ) kleinere PDF-Dateien erstellen kann. Achten Sie jedoch darauf, dass dadurch einige Funktionen (z. B. Hyperlinks) entfernt werden.

5
Anon

Sie werden an Qualität verlieren, aber wenn es kein Problem ist, kann sich ImageMagicks convert als hilfreich erweisen:

convert original.pdf reduced.pdf

Beachten Sie, dass dies nicht immer funktioniert: Ich habe mit diesem Befehl einmal eine 126-MB-Datei in eine 14-MB-Datei konvertiert, aber ein anderes Mal die Größe einer 350-KB-Datei verdoppelt.

Auf jeden Fall lohnt es sich, es auszuprobieren…

Wie in den Kommentaren erwähnt, macht es natürlich keinen Sinn, diesen Befehl auf ein vektorbasiertes PDF anzuwenden. Er ist nur für gerasterte Bilder nützlich.

Siehe auch dieser Beitrag für verwandte Optionen.

Ghostscript enthält zwei nützliche Hilfsprogramme: pdfopt und ps2pdf14. Beide können verwendet werden, um PDF Datei (en) zu optimieren, aber in einigen Fällen kann die "optimierte" Datei größer als das Original sein.

3
Onlyjob

Das hat bei mir funktioniert

Konvertiere dein PDF in PS (dies erzeugt eine große Datei)

pdf2ps large.pdf very_large.ps

Konvertieren Sie die neue PS zurück in eine PDF

ps2pdf very_large.ps small.pdf

Quelle: https://pandemoniumillusion.wordpress.com/2008/05/07/compress-a-pdf-with-pdftk/

2