PDF und Tux

Linux-Tage-Weihnachtskalender: 21. Türchen

Björn Krellner, 21.12.2008

pdftk – Werkzeug zur Manipulation von PDF-Dokumenten

iText/PDF

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?

Eine sehr nützliche Funktion ist das Aneinanderhängen von zwei oder mehr PDFs in eine, beispielsweise dok1.pdf und dok2.pdf zu alles.pdf:
pdftk dok1.pdf dok2.pdf cat output alles.pdf
Die 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.
Eingaben von Formularen, die in PDF-Dokumenten enthalten sind, können im FDF-Format gespeichert werden. Folgender Befehl füllt das Formular in form.pdf mit den Daten aus eing.fdf und gibt in form_editierbar.pdf aus – das Formular ist also weiterhin vorhanden und die Eingaben können verändert werden:
pdftk form.pdf fill_form eing.fdf output form_editierbar.pdf
Anders bei Verwendung des Befehls flatten:
pdftk form.pdf fill_form eing.fdf output form_fixiert.pdf flatten
(Die Formulareingaben werden damit im Dokument fixiert.)
Ein PDF-Dokument kann weitere Dateien enthalten. Das Einfügen und das Speichern solcher Anhänge wird von pdftk unterstützt:
pdftk weihnachten.pdf attach_files weihnachten.tex Makefile to_page 4 output weihnachten-pdftk.pdf
Mit 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 PROMPT
Diesmal wird aber nicht in das Verzeichnis PROMPT ausgegeben, sondern nach einem Verzeichnisnamen gefragt (das darf dann auch die relative Pfadangabe PROMPT sein ;-)).
Eine tolle Möglichkeit ist auch das Hinzufügen von Hintergrundbildern (Wasserzeichen). Beispielsweise kann man so auch Brieftexte auf vorbedruckten Blättern (mit Briefkopf, Name usw.) ausdrucken, das gleiche Dokument als PDF speichern und dort dann den Briefkopf (muss als PDF vorhanden sein) noch hinzufügen. Syntax dafür:
pdftk text.pdf background briefkopf.pdf output brief_komplett.pdf
Die 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.
Vorschau: pdftk background
Die Abbildung zeigt, wie die erste Seite der Weihnachts-PDF mit einem hinzugefügten CLT-Hintergrundbild aussieht.
Mit pdftk können auch PDF-Dateien verlustfrei verkleinert werden, was z. B. für von OpenOffice.org erzeugte PDFs eine deutliche Dateigrößenreduzierung bedeutet!
pdftk dok.pdf output dok_komprimiert.pdf compress
Dies sind nur fünf Beispiele für das, was man mit pdftk anstellen kann. Weitere Funktionen wie das Hinzufügen oder Entfernen von Passwortschutz, das Ändern von Metainformationen usw. sind in der Programmdokumentation nachlesbar. Hier die Links zu pdftk und zur iText-Bibliothek:

Wie sieht es mit einer grafischen Oberfläche aus?

Unter Linux gibt es das Programm GUIPDFTK, was sich so präsentiert:
Vorschau: GUIPDFTK
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?

Weitere nützliche PDF-Werkzeuge:
  • 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.

zuletzt bearbeitet am 20.12.2008 von Björn Krellner