Emacs und Helferlein, Folge 3: PDFs entsaften

Das Obst

Wir benutzen ein wahnsinnig fortschrittliches Textsatzsystem und einen total
abgefahrenen Editor. Da ist es doch echt peinlich, dass dieses Beispiel --

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage{libertine, blindtext}
 
\begin{document}
 
\blinddocument
 
\end{document}

– mit pdftex kompiliert (texlive 2010), zu einem PDF
mit zwar nur drei Seiten, aber einer Dateigröße von 215 KiB
führt. Verwendet man nicht nur eine Schrift (hier also Linux
Libertine), sondern mehrere Schriften, kann man mit fünf Seiten
mühelos die 500 KiB überschreiten.

Auch im Zeitalter von Festplatten mit Terabyte-Kapazitäten spielt das
in Unternehmen auf Dauer eine Rolle. Außerdem sind diese Dateigrößen
ein Schönheitsfehler, oder?

Der Entsafter

Im Jahr 2009 hat Péter Szabó ein Python-Script namens »pdfsizeopt.py«
veröffentlicht und seither ständig verbessert. Seit dem 6. Juni 2011
(Version r162) kann das Script auch mit der von pdftex unter texlive
2010 generierten PDF-Version 1.5 umgehen, vorher musste man seine
LateX-Dateien mit \pdfminorversion4 einleiten.

Was, werte Leser, bleibt von unserer 215 KiB schweren Datei übrig,
nachdem man sie mittels

pdfsizeopt.py foo.pdf

eingekocht hat? Weniger als 200 KiB? 100 ? 50 ? Also, auf meinem
Linux-Rechner sind es knapp 17 KiB. Damit kann man sich blicken
lassen.

Hinweise zum Gebrauch

Wie man pdfsizeopt.py installiert, wird für Linux auf einer Seite des
Projekts genau dargelegt. Es funktioniert aber auch unter Windows nach
einer kurzen Anleitung hier, wenngleich ich es nicht geschafft habe,
Multivalent einzubinden, wie Szabó das empfiehlt.

Das Script wird mit folgendem Befehl aufgerufen:

pdfsizeopt.py [flag] input.pdf [output.pdf]

Wird kein Name für das Ausgabe-PDF angegeben, fügt pdfsizeopt
einfach ein »psom.« vor dem Nachnamen ».pdf« der Datei ein.

Wenn man unter Windows, wie ich, auf Schwierigkeiten mit Multivalent
stößt, kann man sich behelfen, indem man dessen Abarbeitung durch
pdfsizeopt unterbindet:

pdfsizeopt.py --use-multivalent=false input.pdf [output.pdf]

Natürlich will man nicht nach jedem Durchlauf von pdftex das
erstellte PDF verkleinern, denn insbesondere wenn Bilder im PDF
enthalten sind, kann ein Durchlauf von pdfsizeopt mehrere Minuten
dauern.

Am einfachsten ist die Nutzung von pdfsizeopt, wenn man es der
TeX-command-Liste von Emacs hinzufügt. Die folgenden Zeilen in der
Datei ».emacs« veranlassen das:

(eval-after-load "tex"
'(add-to-list 'TeX-command-list
'("pdfsizeopt" "pdfsizeopt.py %s.pdf %s.pdf" TeX-run-command t t :help "Run pdfsizeopt.py") t))

Man kann unter Emacs nun mit dem zentralen Befehl C-c C-c auch einen
Lauf von pdfsizeopt in Auftrag geben und mit C-c C-l verfolgen, was
pdfsizeopt dabei für Meldungen absetzt.

Das zweite »%s.pdf« in der dritten Zeile des Codes oben sorgt übrigens
dafür, dass pdfsizeopt das ursprüngliche PDF durch das komprimierte
Ergebnis ersetzt. Lässt man es weg, findet man, wie gesagt, eine Datei
namens input.psom.pdf neben input.pdf vor.

Was soll ich sagen? Ab einem bestimmten Niveau ist Technik von Magie
nicht mehr zu unterscheiden.

Autor: AW

Org version 7.5 with Emacs version 23

Inhalt abgleichen