An 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/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
Beim 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/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.