Linux-Tage-Weihnachtskalender: 21. Türchen
pdftk – Werkzeug zur Manipulation von PDF-Dokumenten

Die Verwendung von PDF-Dateien (Portable Document Format) ist seit vielen Jahren sehr weit verbreitet. Das Ziel des von Adobe Systems ab 1993 entwickelten Austauschformats war die plattforumübergreifende originalgetreue Ansicht. Seit dem 1. Juli 2008 ist das Format offener Standard (ISO 32000-1, die aktuelle Spezifikation 1.7 umfasst dabei 747 Seiten). Bereits vorher wurden Teile davon standardisiert: PDF/X (Weitergabeformat für Druckvorstufe) und PDF/A (für Langzeitarchivierung). Adobe's Referenz für die Version 1.7 umfasst mittlerweile sogar 1310 Seiten.
Viele Programme unter Linux bieten inzwischen neben der bekannten Druckfunktion auch einen PDF-Export an (via Ghostscript ist meist auch über die Druckfunktion ein Erzeugen von PDF möglich). Eine anschließende Veränderung der erzeugten PDF-Dateien ist jedoch nicht so einfach. Aber auch dafür gibt es tolle Programme, pdftk (PDF toolkit) – ein Kommandozeilenprogramm, was die freie PDF-Bibliothek iText nutzt – soll hier kurz als eine Art Schweizer Messer zur Manipulation von PDF-Dateien vorgestellt werden.
Was kann man damit machen?
pdftk dok1.pdf dok2.pdf cat output alles.pdfDie Syntax wird hier schon klar. Als erste Parameter die Eingabedateien, danach ein Befehl (cat mit dem Attribut output und der Ausgabedatei). Doch nicht nur das Aneinanderhängen ist möglich – auch von Dateien mit unterschiedlichen Seitengrößen –, sondern auch das Auswählen bestimmter Seiten, beispielsweise:
pdftk A=titel.pdf B=dok2.pdf C=bsp.pdf cat A B2-10 C2 B11-13 C1 output dok.pdf(Den drei Eingabedateien werden die Handles A bis C gegeben, die dann für das Kommando cat zur Seitenangabe genutzt werden: Nach dem kompletten Inhalt von titel.pdf werden 9 Seiten von dok2.pdf gewählt, danach die zweite Seite von bsp.pdf, dann weitere 3 Seiten von dok2.pdf und zuletzt die erste Seite von bsp.pdf.
pdftk form.pdf fill_form eing.fdf output form_editierbar.pdfAnders bei Verwendung des Befehls flatten:
pdftk form.pdf fill_form eing.fdf output form_fixiert.pdf flatten(Die Formulareingaben werden damit im Dokument fixiert.)
pdftk weihnachten.pdf attach_files weihnachten.tex Makefile to_page 4 output weihnachten-pdftk.pdfMit obigem Befehl werden die LATEX-Quelldatei und das make-Skript an Seite 4 dieses Dokuments angehangen: Zum Entpacken dient der Befehl unpack_files mit Angabe des Zielverzeichnisses:
pdftk weihnachten-pdftk.pdf unpack_files output PROMPTDiesmal wird aber nicht in das Verzeichnis PROMPT ausgegeben, sondern nach einem Verzeichnisnamen gefragt (das darf dann auch die relative Pfadangabe PROMPT sein ;-)).
pdftk text.pdf background briefkopf.pdf output brief_komplett.pdfDie angegebene Hintergrunddatei wird dabei entweder auf die Höhe oder auf die Breite der Seite gestreckt (und in der anderen Dimension zentriert), je nach vorliegendem Seitenverhältnis.

Die Abbildung zeigt, wie die erste Seite der Weihnachts-PDF mit einem hinzugefügten CLT-Hintergrundbild aussieht.
pdftk dok.pdf output dok_komprimiert.pdf compress
Wie sieht es mit einer grafischen Oberfläche aus?

Wie auf dem Screenshot zu sehen, können oben die erste Eingabedatei und die Ausgabedatei angegeben werden. Darunter können Einstellungen zur Verschlüsselung und eingeschränkten Rechten vorgenommen werden. Als "Single Options" bezeichnet sind danach die Funktionen zum Aneinanderhängen, (De-)Komprimieren usw. zu finden.
Was gibt es denn noch?
- KPDFTool – GUI, die Ghostscript und ImageMagick für die Verarbeitung von PDFs benutzt.
- pdffonts (zeigt an, welche Schriften genutzt werden), pdfimages (extrahiert Bitmap-Bilder), pdfinfo (zeigt Meta-Informationen) und pdftotext (extrahiert Textinhalte) sind Tools, die die poppler-Bibliothek nutzen.
- pdfcrop kann die Seiten eines PDF-Dokuments beschneiden.
- pdfbook ordnet die Seiten im Dokument für Broschürendruck um – auch 4 Seiten pro Blatt (bei doppelseitigem Druck) möglich.
Björn Krellner ist seit 2004 bei den Chemnitzer Linux-Tagen dabei und momentan unter anderem für die Funktionalität der Webseite verantwortlich.