tools:pdf-shrink

PDF Bearbeitung

Bild: PDF Shrink GraphikAn und ab kann es vorkommen, dass PDF-Unterlagen, speziell wenn sich darin eingescannte Dokumente und Unterlagen befinden, in Ihrer Größe stark anwachsen. Möchte man diese Unterlagen per eMail verschicken oder z.B. in einem Bewerbungsportal hochladen, kann das mitunter recht schnell auf Empfänger- oder Senderseite Unmut verursachen.

In nachfolgendem Beispiel wollen wir uns daher mit einer Lösung beschäftigen, entsprechende Unterlagen und Dokumente in Ihrer Größe unter der Inkaufnahme gewisser (optischer) Qualitätseinbußen. Aktuell halten wir in einem entsprechenden Beispiel fünf Dateien mit einer Gesamtgröße von 55 MB vor.

 $ ll -h
insgesamt 55M
-rw-rw-r--. 1 django django 1,7M  4. Mai 17:28 Bescheinigungen.pdf
-rw-rw-r--. 1 django django  14M  5. Mai 10:13 Bewerbung_LINUX_System-_und_Webadministrator.pdf
-rw-rw-r--. 1 django django 1,7M  4. Mai 17:23 Urkunden.pdf
-rw-rw-r--. 1 django django  26M  4. Mai 17:48 Zertifikate.pdf
-rw-rw-r--. 1 django django  13M  4. Mai 17:19 Zeugnisse.pdf

Diese Daten können wir natürlich nicht am Stück per eMail verschicken, da diese eindeutig zu groß für den Mailversand sind.

Zum Verringern der Datenmenge greifen wir auf die Scriptoptionen von ghostscript, die z.B. auf Milan Kupcevic's Seite zu Ghostcript PDF Reference & Tips dokumentiert sind, zurück. Der Aufruf auf der Linux-Konsole ist beim Verringern durchaus umfangreich, wenn wir einen Blick auf nachfolgendes Beispiel werfen.

 $ gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dNOPAUSE -dQUIET -dBATCH -dPDFSETTINGS=/ebook \
      -sOutputFile=zeugnisse.pdf Zeugnisse.pdf

Auf Dauer kann man sich natürlich einen derartig umfangreichen Befehlsaufruf nicht merken. Daher legen wir uns einfach ein kleines Shell-Script an, welchem wir dann die notwendigen Optionen beim Aufruf mitgeben. Dieses Script legen wir im bin-Verzeichnis des betreffenden Benutzers an; bei Bedarf erzeugen wir das betreffende Verzeichnis wie folgt-

 # mkdir -p ~/bin/

Dort legen wir folgendes Script ab:

 # vim ~/bin/pdf-shrink
~/bin/pdf-shrink
#!/bin/bash
 
if [ -z "$1" ] && [ -z "$2" ] && [ -z "$3" ]
 then
   echo ""
   echo "usage: pdf-shrink input.pdf output.pdf quality"
   echo "                                       quality : screen   = screen-view-only quality, 72 dpi images"
   echo "                                                 ebook    = low quality, 150 dpi images"
   echo "                                                 printer  = high quality, 300 dpi images"
   echo "                                                 prepress = high quality, color preserving, 300 dpi images"
   echo "" 
 else /usr/bin/gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dNOPAUSE -dQUIET -dBATCH -dPDFSETTINGS=/$3 -sOutputFile=$2 $1
fi

Anschließend statten wir das Shell-Script zur einfachen Ausführung mit den x-Rechten aus.

 # chmod +x ~/bin/pdf-shrink

Rufen wir das Script ohne Angabe zusätzlicher Parameter auf, erhalten wir eine kurze Beschreibung mit den in Frage kommenden Optionen.

 $ pdf-shrink
usage: pdf-shrink input.pdf output.pdf quality
                                       quality : screen   = screen-view-only quality, 72 dpi images
                                                 ebook    = low quality, 150 dpi images
                                                 printer  = high quality, 300 dpi images
                                                 prepress = high quality, color preserving, 300 dpi images

Wollen wir also in unserem Beispiel hier die 26 MByte große PDF-Datei Zertifikate.pdf Vergleinern rufen wir unser Shell-Script mit folgenden Parametern auf:

 $ pdf-shrink Zertifikate.pdf Zertifikate_shrinked.pdf ebook

Nach kurzer Zeit haben wir nun ein PDF-Dokument welches nur noch 18% der ursprünglichen Größe aufweist.

 $ ll -h Zertifikate*
-rw-rw-r--. 1 django django  26M  4. Mai 17:48 Zertifikate.pdf
-rw-rw-r--. 1 django django 4,7M 25. Mai 15:50 Zertifikate_shrinked.pdf

In unserem gezeigten Beispiel verringert sich somit die Speichermenge von 55 MB auf 12 MB, so dass wir die gesamten Unterlagen nunmehr locker via eMail verschicken können.

 $ ll -h
insgesamt 12M
-rw-rw-r--. 1 django django 428K 25. Mai 15:57 Bescheinigungen_shrinked.pdf
-rw-rw-r--. 1 django django 3,2M 25. Mai 15:57 Bewerbung_LINUX_System-_und_Webadministrator_shrinked.pdf
-rw-rw-r--. 1 django django 384K 25. Mai 15:57 Urkunden_shrinked.pdf
-rw-rw-r--. 1 django django 4,7M 25. Mai 15:50 Zertifikate_shrinked.pdf
-rw-rw-r--. 1 django django 2,7M 25. Mai 15:58 Zeugnisse_shrinked.pdf

Bild: PDF Merge GraphikBeim zweiten Beispiel wollen wir aus einzelnen PDF-Dokumenten ein neues Dokument erzeugen.

Auch hier greifen wir erneut auf ghostscript zurück. Mit nachfolgendem Aufruf erzeigen wir aus drei einzelnen PDF-Dokumenten eine neue Datei merged_file.pdf.

 $ gs -dNOPAUSE -sDEVICE=pdfwrite -sOUTPUTFILE=merged_file.pdf -dBATCH file_1.pdf file_2.pdf file_3.pdf

Auch hier werden wir uns nur bedingt die betreffenden Optionen für den Aufruf von ghostscript auf Dauer merken. Was liegt also näher us auch hier ein passenden Shell-Script anzulegen.

 # vim ~/bin/pdf-merge
~/bin/pdf-merge
#!/bin/bash
 
if [ -z "$1" ]
 then
   echo ""
   echo "usage: pdf-merge input_n1.pdf input_n2.pdf ... input_nx.pdf"
   echo "" 
 else /usr/bin/gs -dNOPAUSE -sDEVICE=pdfwrite -sOUTPUTFILE=merged.pdf -dBATCH $@
fi

Anschließend statten wir das Shell-Script zur einfachen Ausführung mit den x-Rechten aus.

 # chmod +x ~/bin/pdf-merge

Rufen wir das Script ohne Angabe zusätzlicher Parameter auf, erhalten wir eine kurze Beschreibung mit den in Frage kommenden Optionen.

 $ pdf-merge
usage: pdf-merge input_n1.pdf input_n2.pdf ... input_nx.pdf

Im nachfolgenden Beispiel wollen wir nun aus fünf einzelnen PDF-Dokumenten ein neues Dokument, welches die fünf Dokumente enthält, erzeugen. Hier rufen wir unser Shell-Script mit folgenden Parametern auf:

 $ pdf-merge Bewerbung_.pdf Zeugnisse_.pdf Zertifikate_.pdf Urkunden_.pdf Bescheinigungen_.pdf
GPL Ghostscript 9.52 (2020-03-19)
Copyright (C) 2020 Artifex Software, Inc.  All rights reserved.
This software is supplied under the GNU AGPLv3 and comes with NO WARRANTY:
see the file COPYING for details.
Processing pages 1 through 27.
Page 1
Page 2
Page 3
Page 4
Page 5
Page 6
Page 7
Page 8
Page 9
Page 10
Page 11
Page 12
Page 13
Page 14
Page 15
Page 16
Page 17
Page 18
Page 19
Page 20
Page 21
Page 22
Page 23
Page 24
Page 25
Page 26
Page 27
Processing pages 1 through 17.
Page 1
Page 2
Page 3
Page 4
Page 5
Page 6
Page 7
Page 8
Page 9
Page 10
Page 11
Page 12
Page 13
Page 14
Page 15
Page 16
Page 17
Processing pages 1 through 31.
Page 1
Page 2
Page 3
Page 4
Page 5
Page 6
Page 7
Page 8
Page 9
Page 10
Page 11
Page 12
Page 13
Page 14
Page 15
Page 16
Page 17
Page 18
Page 19
Page 20
Page 21
Page 22
Page 23
Page 24
Page 25
Page 26
Page 27
Page 28
Page 29
Page 30
Page 31
Processing pages 1 through 4.
Page 1
Page 2
Page 3
Page 4
Processing pages 1 through 4.
Page 1
Page 2
Page 3
Page 4

Unser Dokument merged.pdf hat nun in Summe 83 Seiten und besteht aus den entsprechenden Dateien. Die Reihenfolge der Seiten entspricht dabei den Dokumenten, wie wir diese beim Aufruf unseres Shell-Scriptes angegeben hatten.

Diese Website verwendet Cookies. Durch die Nutzung der Website stimmen Sie dem Speichern von Cookies auf Ihrem Computer zu. Außerdem bestätigen Sie, dass Sie unsere Datenschutzbestimmungen gelesen und verstanden haben. Wenn Sie nicht einverstanden sind, verlassen Sie die Website.Weitere Information
  • tools/pdf-shrink.txt
  • Zuletzt geändert: 25.05.2020 15:45.
  • von django