Neulich war ich mal wieder in der Situation, dass ich (oder besser meine bessere Hälfte) PDF-Dokumente einreichen musste, die eine maximale Dateigröße nicht überschreiten durften. Keine Ahnung wer sich das ausgedacht hat, aber eine Bewerbung inkl. aller gescannter Zeugnisse unter 3MB halten zu müssen ist schon arg knapp. Nun gut, mit Ghostscript kann man das relativ einfach bewerkstelligen, doch das dazu benötigte Kommando ist sehr sperrig. Doch mit einem zusätzlichen Skript für Nautilus kann man PDFs bequem aus dem Dateimanager heraus in ihrer Größe reduzieren.
Bevor ich zum Skript komme, gehe ich kurz auf das zugrundeliegende Ghostscript-Kommando ein. Prinzipiell könnt Ihr Ghostscript sagen, dass es ein PDF öffnen und es danach wieder mit neuen Einstellungen speichern soll. Wichtig dafür ist u.A. die Option “PDFSETTINGS”, mit ihr wird bestimmt in welcher vordefinierten Qualität die Ausgabe erfolgen soll…
$ gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/ebook -dNOPAUSE -dQUIET -dBATCH -sOutputFile=output.pdf input.pdf
…Ghostscript kennt für PDFSETTINGS die folgenden Einstellungen. Weitere Informationen zu gs und seinen Kommandos bekommt ihr bspw. über die Ghostcript PDF Reference & Tips von Milan Kupcevic.
- /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 imgs
- /default: almost identical to /screen
Nun ist das Kommando alles andere als handlich und einfach zu merken. Man könnte es zwar hinter einem Alias verbergen, doch warum aufwändig wenn es doch auch einfacher geht? Der Dateimanager Nautilus der GNOME-Desktopumgebung kann selbst erstellte Skripte ausführen und da setzt Compress PDF an.
Das kleine Skript setzt auf dem oben genannten Befehl auf und verpackt das Ganze in eine einfache Zenity-GUI. So könnt Ihr eine PDF-Datei in Nautilus auswählen, das Skript starten und dann die Datei nach euren Wünschen komprimieren. Für die “Installation” von Zenity, Ghostscript und Compress PDF müsst Ihr folgendes ausführen (bedenkt bitte dass sich die URL zur Compress-PDF-1.4.tar.gz ändern kann. Prüft daher bitte ob eventuell eine neue Version des Skriptes vorhanden ist).
$ sudo apt-get install zenity ghostscript libnotify-bin $ cd ~/.gnome2/nautilus-scripts $ wget http://launchpad.net/compress-pdf/1.x/1.4/+download/Compress-PDF-1.4.tar.gz $ tar -xzf Compress-PDF*.tar.gz && rm Compress-PDF*.tar.gz
Danach findet Ihr Compress PDF im Kontext-Menü von Nautilus. Beachtet bitte, dass das Ergebnis nicht immer besser ist. Mit guten Parametern erstellte PDF-Dateien lassen sich oft gar nicht mehr sonderlich verkleinern. Und bringt die Verkleinerung auch einen Verlust an Qualität mit sich. Überprüft daher die resultierende Datei ob die Qualität für eure Zwecke noch ausreichend ist.
Dennoch lassen sich oft gewaltige Einsparungen erzielen. Eine Reduzierung der Dateigröße um die Hälfte ist fast normal, manche der von mir verkleinerten PDFs wurden sogar um den Faktor vier kleiner.
Ich habe das Skript auch auf die schnelle ins Deutsche übersetzt und an den Betreuer des Projekts Ricardo Ferreira geschickt. Bis er das eingebaut und neu veröffentlicht hat, könnt ihr die deutschsprachige Version über linuxundich.de herunterladen. Sobald die neue Version draussen ist, lösche ich diesen Abschnitte aus dem Beitrag raus.


16. Februar 2011 um 16:13 Uhr
Nebenbei: Ich würde das Bewerbungsformular ignorieren und nach einer Email-Adresse suchen. Schon deshalb, weil viele Unternehmen ihr eigenen, ganz unterschiedlichen Süppchen kochen und diese dem Bewerber aufzwingen wollen.
Natürlich steht eine Email-Adresse nicht immer zur Verfügung.
16. Februar 2011 um 17:43 Uhr
SUPER Info… und endlich mal ein Skript, wo die Quali auch gut bleibt !
Die PDF-Grösse beim “In Datei drucken” fand ich schon immer “unter aller Sau”. Da wird mal eben aus nem 4,5 MB Jpeg eine 16 MB grosse PDF… würgh.
Habe gerade auch mal 4 900×600/72dpi grosse Bilder, die zusammen ca. 1 MB gross sind per “In Datei drucken” in eine PDF gelegt. PDF dann 4,3 MB gross.
Das Skript hat diese PDF mit Einstellung “Bildschirm” auf
Und die Quali der Pics ist auch noch gut. Man sieht zwar schon kleine Artefakte um das Logo… aber trotzdem noch OK.
234 KB verkleinert. DAS ist gut
In der Einstellung “Für Druck”, ist die Datei 486 KB gross.
Und das in einer sehr guten Quali !
Danke dir auf jeden Fall für den Tip !!
Wenn Du in nem zukünftigen Blog noch herausfindest,
wie man eine der Einstellungen (Bildschirm/eBook/Druck/Farbtreu) als Default beim “In Datei drucken” hinterlegen könnte… DAS wäre dann der RIESENKNALLER
Denn bisher war das nicht zu gebrauchen bei den erzeugten Grössen.
Gruss… Blogleser
16. Februar 2011 um 18:44 Uhr
Danke für den Tipp – klappt SUPER!!
Kannst Du vielleicht bekanntgeben, wenn das offizielle deutsche Script rauskommt?
Danke!
16. Februar 2011 um 20:52 Uhr
Klar mache ich das, allerdings habe ich bislang noch kein Feedback bekommen.
16. Februar 2011 um 19:49 Uhr
Hi! Nettes Skript. Aber weiß auch jemand, wie man ein ganzes Verzeichnis voller PDFs mit einmal komprimieren kann? Das würde selbst mit dem Skript recht lange dauern. Vielen Dank!
PS: Mit find … -exec … und den Kommandozeileneingaben von oben wollte es nicht gehen.
16. Februar 2011 um 20:50 Uhr
Quick and Dirty klappt es wie folgt…
#!/bin/bash function pdfcompress { FILENEW="compressed."$(basename $1) gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/ebook -dNOPAUSE -dQUIET -dBATCH -sOutputFile=$FILENEW $1 } export -f pdfcompress find -maxdepth 1 -iname '*.pdf' -exec bash -c "pdfcompress {}" \;16. Februar 2011 um 20:59 Uhr
Hi!
Danke erst einmal. Wie genau muss ich jetzt damit umgehen?
16. Februar 2011 um 21:06 Uhr
Da gibts viele Wege. Einer wäre bspw.
* Pack Inhalt des genannten Skriptes in die Datei ~/bin/batchpdfcompress
* Mach das Skript ausführbar:
* Geh im Terminal via cd /pfad/zu/pdfs zu deinem PDFs die du komprimieren willst
* Gib
ein
Falls du keinen Ordner ~/bin hast, dann würde ich ihn anlegen und danach das Terminalfenster neu starten. Erst dann landet der eigene ~/bin Ordner im $PATH und das dort enthaltene Skript kann von überall aus aufgerufen werden.
16. Februar 2011 um 21:08 Uhr
Ok, vielen Dank!
16. Februar 2011 um 22:48 Uhr
Sag mal, ich kann seit ca einer Woche deinen Feed nicht mehr in Liferea empfangen. Ich erhalte folgende Fehlermeldung :
Es traten Fehler beim Parsen des Feeds auf!
Details
Konnte Feedtyp nicht bestimmen! Bitte überprüfen Sie, ob die Adresse wirklich auf eine Dokument in einem der unterstützten Formate zeigt!
XML Parser Ausgabe:
Die Adresse die Liferea abonnieren soll zeigt auf eine Webseite und die automatische Feed-Erkennung hat keine Feeds gefunden. Möglicherweise unterstützt die Webseite die automatische Feed-Erkennung nicht.Quelle zeigt auf ein HTML-Dokument.
Hast du eine Ahnung woran das liegt? Dein Blog ist mein einziges Abonnement, wo das auftritt. Den Beitrag von letztem Donnerstag habe ich noch empfangen.
16. Februar 2011 um 23:57 Uhr
Hm, ich habe diese Flattr-Plugin in Verdacht. Es schmeisst aktuell einen Flattr-Button in den Feed, den ich nicht per Option deaktivieren kann, obwohl ich das eigentlich nicht möchte. Diese Änderung kam vor einer Woche über eine Aktualisierung des Plugins rein.
//PS: Yep, es ist dieser Flattr-Button… http://validator.w3.org/feed/check.cgi?url=http%3A%2F%2Flinuxundich.de%2Fde%2Ffeed%2F Grummel, muss mich mal durch den Code des Plugins quälen. Ganz abschalten will ich Flattr eigentlich nicht.
17. Februar 2011 um 00:16 Uhr
Hm, hab es gerade in Liferea aus Maverick selber probiert. Der Feed http://linuxundich.de/de/feed/ wird ohne Probleme eingelesen. Welche Version von Liferea ist denn bei dir installiert?
16. Februar 2011 um 23:34 Uhr
Gute Idee! Danke!
Leider funktioniert es bei mir nicht. Ich habe kein Kontext-Menu “Script”.
Hast Du irgendeine Idee?
Im voraus schon mal vielen DANK!
16. Februar 2011 um 23:40 Uhr
Zeig mal die Ausgabe des Befehls…
…her.
17. Februar 2011 um 16:02 Uhr
Danke, genau das wars. Das war nämlich leer.
Ich habe das Script nach /usr/share/nautilus-scripts gepackt, damit meine Frau auch was davon hat.
Nachdem ich die nach ~/.gnome2/nautilus-scripts/ verlinkt habe, wurde alles gut.
Ist allerdings IMHO irgendwie ein seltsames Verhalten unter Linux, dass die Skripte benutzerspezifisch angelegt werden müssen, obwohl die systemweit vorhanden ist.
17. Februar 2011 um 16:06 Uhr
Schau mal http://wiki.ubuntuusers.de/nautilus/skripte#ber-die-Paketverwaltung an, es gibt extra Tools um diese Links zu erstellen.
17. Februar 2011 um 12:14 Uhr
Hey Christoph, wärst du so nett, den Link zu dem Wallpaper aus dem Screenshot zu veröffentlichen? Danke
17. Februar 2011 um 12:18 Uhr
Kann ich heute abend machen, falls ich es vergesse, dann erinnere mich einfach nochmal dran
18. Februar 2011 um 18:27 Uhr
*erinner*
18. Februar 2011 um 22:23 Uhr
Ah ja
Das sollte es sein… http://dl.dropbox.com/u/107860/137784-2560-1600-clean.jpg
19. Februar 2011 um 13:20 Uhr
Super, besten Dank!
17. Februar 2011 um 13:43 Uhr
Hi Christoph,
danke für den Hinweis mit dem Script. Allerdings erzielt das Script bei mir eigenartige Ergebnisse. Ich habe das ganze mit einer 1.3Mb großen PDF Datei probiert.
Hier sind meine Ergebnisse:
Screen: 71,5MB
Low Quality: 71,6MB
High Quality: 743,3KB
High Quality (Color): 769,6 Kb
Also ich hatte irgendwie andere Ergebnisse erwartet. Also die beiden High Quality Ergebnisse sind ja ok, aber die anderen beiden sind nicht ganz einleuchtend.
17. Februar 2011 um 18:47 Uhr
Hallo,jetzt funktioniert das mit Liferea komischerweise. Eine Woche lang kam immer der Fehler, aber gerade eben ging es anstandslos.
11. März 2011 um 12:09 Uhr
Ich verschicke auch Bewerbungen und finde Bedienung und Ergebnisse sehr gut. Vielen Dank!
Jetzt würde ich das gerne meinem Vater empfehlen, der solchen Dingen ohne Skript noch hilfloser gegenübersteht, als ich. Leider nutzt der Mac. Ist das für einen absoluten Laien möglich, das Script auf nem Mac ohne Linux zum Laufen zu bringen oder ist das zu speziell auf Nautilus und Linux zugeschnitten?
30. März 2011 um 16:10 Uhr
Danke
You save my day.
21. Juni 2011 um 16:37 Uhr
is ja fabelhaft – sehr elegant – vielen Dank!
14. Juli 2011 um 18:32 Uhr
Sehr gutes Tutorial, sowas habe ich heute stundenlang gesucht! DANKE
1. Juni 2012 um 14:50 Uhr
Super Script – vielen Dank!
21. Juli 2012 um 11:07 Uhr
Hi,
Vielen Dank für dieses nette Skript. Ich habe aber noch eine Anregung. Wenn man Vektorgrafiken mit imagemagick convertiert gehen alle Vektorelemente verloren und werden ‘gerastert’. Ein möglicher Ansatz ist Ghostscript zu verwenden.
Im Speziellen funktioniert es wie hier:
http://www.alfredklomp.com/programming/shrinkpdf/
Auszug:
#!/bin/sh
gs -q -dNOPAUSE -dBATCH -dSAFER \
-sDEVICE=pdfwrite \
-dCompatibilityLevel=1.3 \
-dPDFSETTINGS=/screen \
-dEmbedAllFonts=true \
-dSubsetFonts=true \
-dColorImageDownsampleType=/Bicubic \
-dColorImageResolution=72 \
-dGrayImageDownsampleType=/Bicubic \
-dGrayImageResolution=72 \
-dMonoImageDownsampleType=/Bicubic \
-dMonoImageResolution=72 \
-sOutputFile=out.pdf \
$1
Auf http://wiki.inkscape.org/wiki/index.php/Current_PDF_Support#Uncompressed_PDF_Output findet man dazu noch einge weitere hints.
Natürlich ist nun zusätzlich Ghostscript notwendig, welches aber auf den meisten Systemen ohne weiters zu installieren ist oder bereits vorhanden ist.
Mir ist es auf die schnelle nicht möglich beides in das doch schon umfangreiche Skript einzupflegen. Aber es wäre nett wenn das jemand übernehmen könnte, der/die mit dem Skript besser vertraut ist und somit das wahrscheinlich in 10 min. erledigen kann.
Thx
1. Oktober 2012 um 10:43 Uhr
Sehr nützlich und funktioniert bestens. Danke!
8. März 2013 um 19:56 Uhr
Vieeeeelen Dank!!! Mal eben auf die Schnelle dringend was gesucht, fast gleich (wie schon so oft
) hier gelandet … wieder sehr übersichtlicher und prima zu lesender Artikel, Besonders toll dein Service, nicht nur einfach zu sagen “Das gibt es – holt’s euch” sondern gleich die korrekten Runterlad- und Einbaubefehle mitzuliefern …
flott noch ein Lesezeichen auf deine Seite gesetzt, so dass ich mit der Arbeit erst mal schnell voran komme und dann später nochmal in Ruhe deinen ganzen Beitrag in Ruhe zu lesen und wieder auf angenehme Art etwas dazu zu lernen:D
Einzige Anmerkung: Ich habe zwar nur eine leichte Sehschwäche, aber #009BC2 ist im normalen Text für mich schon recht anstregend zu lesen, weil die Kontrast so schwach sind .
Ansonsten aber wirklich prima – Danke!!
(Meine fragliche Datei hat das Script übrigens von 9,2MB auf 438,7kB für den Screen-Modus runtergeschraubt und an der Qualität gibt es nix zu meckern *froi)
11. März 2013 um 22:46 Uhr
Hi Matilda, gerne geschehen. Ich schraube bei Gelegenheit mal ein bisschen am Kontrast der Schrift. Ist vielleicht wirklich ein bisschen zu grau. Grüße, Christoph.