Setzkasten

Viele Nutzer betrachten PDF-Dateien als in sich geschlossene Objekte, die sich nicht nachträglich verändern lassen. Mit den geeigneten Werkzeugen lassen sie sich jedoch leicht zerlegen, zusammensetzen oder modifizieren.

In Pocket speichern vorlesen Druckansicht 5 Kommentare lesen
Lesezeit: 5 Min.

Häufig erstellt man PDF-Dateien zur Archivierung, Weiterverarbeitung oder zum Austausch mit Büro- und DTP-, Scan- und OCR-Programmen. Allerdings ist keines von ihnen in der Lage, PDF-Dateien nachträglich zu bearbeiten, und nur mit wenigen kann man die gewünschten Dokumenteigenschaften festlegen. Hier springen freie Kommandozeilen-Tools ein, die sich für alltägliche Aufgaben – vor allem solche, die man automatisieren möchte – im Umgang mit PDF-Dokumenten eignen.

Wie Postscript beschreibt PDF die Seiten vektorbasiert und erlaubt eine freie Skalierung der Darstellung. Es arbeitet aber mit einem erweiterten Grafikmodell und besitzt zusätzliche Funktionen, vor allem interaktive Elemente wie Lesezeichen, Kommentare und mit JavaScript programmierbare Formularfelder. PDF speichert alle Informationen – etwa Schriftinformationen, Seitenbeschreibung und -reihenfolge, Farbdefinitionen, Lesezeichen, Bitmaps, Formulare oder Sprungmarken – als nummerierte Objekte.

Mit 40- oder 128-Bit-Verschlüsselung und Vergabe eines Benutzerpassworts kann der Autor den Zugang zu einem Dokument auf einen bestimmten Personenkreis beschränken. Mit einem separaten Besitzerpasswort kann er zudem den Umgang mit seinem Dokument gezielt einschränken, etwa das Kopieren, Drucken, Ändern oder das Hinzufügen von Notizen verbieten.

Die Größe von PDF-Dokumenten hängt von der Art der enthaltenen Daten, der Einbettung von Schriften und Bitmaps sowie der Effizienz des Erstellungsprogramms ab. Letzterer hilft das im Ghostscript-Paket (siehe iX-Link) enthaltene pdfopt auf die Sprünge. Der PDF-Optimierer sortiert die Elemente der Datei (linearisiertes PDF) und fügt Zeiger hinzu, mit deren Hilfe sich einzelne Seiten eines Dokuments vor allem im Netz schneller darstellen lassen.

Weitere hilfreiche Werkzeuge bieten das xpdf-Projekt und die darauf aufsetzenden poppler-utils. Zu ihnen zählen außer den Konvertern pdftops, pdftohtml und pdftotext der Font-Analyzer pdffonts sowie die Bild- und Metadaten-Extrahierer pdfimages und pdfinfo. Letzterer eignet sich vor allem zum Filtern von Dokumenten mit bestimmten Eigenschaften. Listing 1 etwa zeigt, wie sich optimierte und nicht optimierte PDF-Dateien trennen und Letztere nachträglich optimieren lassen.

Mehr Infos

Listing 1: Optimieren von PDF-Dateien

mkdir opt unopt
for i in *.pdf; do
pdfinfo "$i" | \
if [ no = "$(grep Optimized | cut -d" " -f7)" ]; then
j=unopt/$(basename "$i" .pdf)_unopt.pdf
mv "$i" "$j" && pdfopt "$j" "opt/$i"
else mv "$i" opt
fi
done

Tiefere Eingriffe in das PDF-Dokument erlaubt das Open-Source-Toolkit pdftk des PDF-Hacks-Projekts AccessPDF. Es kann Dokumente zerlegen und wieder zusammenfügen, ent- oder verschlüsseln, drehen, mit Wasserzeichen oder Stempeln versehen und – wenn möglich – reparieren, das Ausfüllen von Formularen automatisieren, Metadaten lesen und aktualisieren, Anhänge hinzufügen oder entpacken sowie PDF-Streams komprimieren und dekomprimieren.

Will man etwa mehrere gescannte Seiten alphabetisch oder numerisch sortiert zusammenfĂĽgen, genĂĽgt der Befehl pdftk *.pdf output big.pdf. Liegen die Scans zum Beispiel als TIFF-Dateien vor, muss man sie allerdings zuerst konvertieren, etwa mit ImageMagick:

for i in *.tiff; do 
convert "$i" -resample 150x150 "tmp$i"
convert "tmp$i" "tpdf$(basename "$i" .tiff).pdf"
done
pdftk tpdf*.pdf output gesamt.pdf
rm tmp* tpdf*

Zum Zerlegen von Dokumenten in einzelne Seiten dient die Operation burst. Sie akzeptiert als Namen fĂĽr die Einzelseiten-PDFs einen Format-String: pdftk artikel.pdf burst output artikel_seite_%02d.pdf. Ohne die Angabe generiert pdftk Einzelseiten-PDFs mit fortlaufenden Nummern nach dem Schema pg_<nnnn>.pdf.

Die Operation cat fügt neben ganzen Dokumenten auch Seitenbereiche zusammen. Außer Seitennummern erkennt das Programm die Bezeichner even, odd und end. Will man etwa die Seiten 18 bis 34 und 65 wegschneiden, führt pdftk long.pdf cat 1-17 35-64 66-end output short.pdf zum gewünschten Ergebnis, während pdftk long.pdf cat end-1even output short.pdf alle Seiten mit geraden Nummern rückwärts zusammensetzt.

Arbeitet man mit Seitenbereichen mehrerer Dokumente, bieten sich Handles an: einzelne GroĂźbuchstaben, die jeweils ein Dokument bezeichnen. pdftk A=eins.pdf B=zwei.pdf cat A1-4 Bodd A76-81 output neues.pdf fĂĽgt die ungeraden Seiten des zweiten Dokuments zwischen zwei Seitengruppen des ersten ein. Das Kommando pdftk altes.pdf dump_data > info.txt schreibt die vorhandenen Metadaten in die Textdatei info.txt. Ă„nderungen lassen sich mit pdftk altes.pdf update_info info.txt output neues.pdf wieder in die PDF-Datei einfĂĽgen.

Wer PDF-Formulare automatisch ausfĂĽllen will, muss die Daten in Adobes Forms Data Format (FDF) bereitstellen. Das geht am einfachsten, indem man mit pdftk formular.pdf generate_fdf output vorlage.fdf eine Vorlage erstellt und editiert. Mit pdftk formular.pdf fill_form meine_daten.fdf output ausgefuellt.pdf lassen sich die Daten anschlieĂźend ins Formular ĂĽbertragen.

Komfortabel für das Erstellen interaktiver Skripte ist die Bereitschaft von pdftk, für viele Argumente das Schlüsselwort PROMPT zu akzeptieren. Es weist das Programm an, den Nutzer nach den benötigten Dateinamen und Passwörtern zu fragen.

iX-Link (mr)