Zur Verarbeitung der Papierberge im Büro nutzen wir die moderne Bürotechnik. Wir müssen Dokumente abheften und entheften, kopieren, neu zusammenstellen, abstempeln, untersuchen oder klassifizieren. Bei der täglichen Arbeit mit elektronischen Dokumenten kann ein ganz spezielles Multifunktionsgerät verwendet werden: Pdftk das PDF-Toolkit.
Jeder LaTeX-Anwender muss oft eigene und fremde PDF-Dokumente weiterverarbeiten. Zu den zahlreichen verfügbaren Programmen zur PDF-Bearbeitung gehören beispielsweise GhostScript, die iText-Bibliothek und Xpdf.
Seit Ende 2003 gibt es zudem Pdftk, ein komfortables Kommandozeilenprogramm zur (Stapel-)Verarbeitung von PDF-Dateien. Wer an vielen PDF-Dateien gleiche oder ähnliche Operationen ausführen muss, sollte Pdftk als Werkzeug in die engere Wahl ziehen. Aber auch als Nutzer graphischer Oberflächen kann man sich dieses Programm dienstbar machen. In KDE gibt es dazu spezielle Konqueror-Menüs, unter Windows 2000 oder XP kann man Batch-Dateien mit Pdftk-Befehlen zum Kontextmenü hinzufügen.
Installation und Einsatz
Sie können das PDF-Toolkit in der aktuellsten Version von einer der Webseiten des Autors Sid Steward [7] herunterladen. Er bietet das unter der GPL stehende Programm unter anderem für Linux, Mac OS X (Panther), FreeBSD, Solaris und Windows an. Die plattformspezifische Installation erweist sich auf den getesteten Plattformen (Debian, SuSE Linux, Windows 2000, Windows XP) als unkompliziert.
Nach der Installation rufen Sie Pdftk aus einer Shell (oder der Windows-Eingabeaufforderung) auf. Der Befehl pdftk --help listet alle Kommandos und Optionen des Programms samt kurzer Hilfetexte auf. In der Tabelle “Pdftk-Operationen” finden Sie die wichtigsten Operationen sowie einige Erläuterungen dazu. Der generelle Aufruf des Programms zur Bearbeitung von PDF-Dateien lautet:
pdftk Eingabedatei(en) Operation [Option] output Ausgabedatei [Passworte] [Benutzerrechte]
Pdftk-Operationen
| Operation | Erläuterung | ||
|---|---|---|---|
| attach_files | Fügt Dateien als Anlage an ein PDF-Dokument an. Die PDF-Datei kann auf diese Weise zu einer Archivdatei erweitert werden. | ||
| background | Versieht jede Seite eines PDF-Dokuments mit einem Wasserzeichen. Auf leere Flächen kann auch eine Art Stempel gesetzt werden. | ||
| burst | Zerlegt ein PDF-Dokument in einzelne Seiten. | ||
| cat | Fügt mehrere Dateien oder mehrere Seiten aus verschiedenen PDF-Dokumenten zu einer neuen PDF-Datei zusammen. | ||
| dump_data | Gibt Informationen zu einer PDF-Datei auf die Standardausgabe aus. | ||
| dump_data_fields | Gibt Informationen zu den Formularfeldern einer PDF-Datei auf die Standardausgabe aus. | ||
| fill_form | Füllt PDF-Formulare aus oder verbindet die Formulardaten mit dem Dokument. | ||
| unpack_files | Entpackt die angefügten Anlagen eines PDF-Dokuments in ein Verzeichnis. | ||
| update_info | Aktualisiert die Meta-Informationen (z.B. Autor, Titel, Thema) in einer PDF-Datei. |
Die Eingabedateien müssen stets im PDF-Format vorliegen. Für spezielle Operationen benötigt das Tool zusätzlich Textdateien in bestimmten Formaten. pdftk gibt eine oder mehrere PDF-Dateien und in bestimmten Fällen auch Textdateien aus.
Im folgenden haben wir einige Beispiele zusammengestellt, die einige interessante Anwendungen von pfdtk zeigen. Sie leuchten jedoch bei weitem nicht alle Möglichkeiten des Programms aus. Alle Beispieldateien zu diesem Artikel stehen Ihnen unter [2] für eigene Versuche mit pdftk zur Verfügung.
Sie können PDF-Dateien wie eine E-Mail durch Anhänge (attachments) ergänzen. Das Abspeichern der Anhänge beim Empfänger erfolgt zum Beispiel mit dem Adobe Reader (ab Version 6). Pdftk ermöglicht sowohl das Anhängen von Dateien an ein PDF-Dokument als auch das Abspeichern der Anhänge. Bis zum kürzlichen Erscheinen des Adobe Reader 7 stellte das für Linux-Anwender die einzige Möglichkeit dar, Attachments abzuspeichern.
Solche Anhänge kann man zum Beispiel nutzen, um einem PDF-Dokument Quelltexte oder einen Auszug aus der Literaturdatenbank hinzuzufügen. Man könnte auch Messdaten anhängen, um auf diese Weise die Aussagen des Dokuments zu ergänzen. Im folgenden Beispiel soll eine PDF-Datei mit ihrem Quelltext gemeinsam weitergegeben werden. Um die Quelldatei mit Pdftk in das PDF einzubinden, fügen Sie dies mit
pdftk Formular.pdf attach_files Formular.tex output Neu.pdf
an das PDF-Dokument an. Alternativ können Sie die Datei mit Hilfe von pdfLaTEX und attachfile an die fertige PDF-Datei anhängen. Der Empfänger entpackt den Quelltext und andere Anhänge seinerseits mit Pdftk in ein Verzeichnis:
pdftk Beispiel_anhang.pdf unpack_files output Source
In diesem Beispiel speichert Pdftk die Anhänge in das Verzeichnis Source ab. Ein solches Verzeichnis anzugeben, macht immer dann Sinn, wenn mehrere Dateien angehängt sein könnten.
Wasserzeichen und Hintergrundfarbe
Ähnlich wie mit dem LaTeX-Paket eso-pic kann man auch mit Pdftk Wasserzeichen in ein Dokument einbringen. Dazu dient die Operation background. Sie erlaubt zudem, das PDF nachträglich mit einem farbigen Hintergrund zu versehen.
Die als Wasserzeichen genutzte Grafik muss als PDF-Datei vorliegen. Sie können Sie beispielsweise in einem Vektorgrafikprogramm erstellen oder auch mit PostScript programmieren. Weist das Wasserzeichen nicht dieselbe Größe wie das Dokument aufweist, skaliert Pdftk es. Möchten Sie ein Dokument mit dem Stempel “ENTWURF” versehen, erstellen Sie zunächst ein PDF im entsprechenden Seitenformat und rufen dann Pdftk wie folgt auf:
pdftk Beispiel.pdf background Entwurf.pdf output Entwurf1.pdf
Auf unbeschriebenen Teilen des Dokuments wirkt das Wasserzeichen wie ein Stempel. Ein elektronisches Blatt Papier mit einer passenden Hintergrundfarbe kann man zum Beispiel in einer kleinen EPS-Datei erstellen. Die entsprechenden PostScript-Befehle für ein A4-Blatt lauten:
%!PS-Adobe-2.0 %%BoundingBox: 0 0 595 842 0.95 0.95 0.90 setrgbcolor 0 0 moveto 595 0 rlineto 0 842 rlineto -595 0 rlineto closepath fill showpage
Änderungen der Hintergrundfarbe können Sie im EPS-Code sehr leicht vornehmen. Nun wandeln Sie die EPS-Datei mit epstopdf in eine PDF-Datei um und fügen Sie über Pdftk als Hintergrund ein:
pdftk Beispiel.pdf background Bg.pdf output Bsp_farbig.pdf
Zerlegen und Zusammensetzen von PDF-Dateien
Mit der Operation burst zerlegen Sie eine PDF-Datei in einzelne Seiten. Dazu geben Sie einen Stammnamen für die einzelnen Seiten sowie ein Nummerierungsformat an:
pdftk Beispiel.pdf burst output Seite%03d.pdf pdftk Beispiel.pdf burst output ./Seiten/Seite%03d.pdf
Die Namen der einzelnen Dateien enthalten in beiden Beispielen eine dreistellige Seitenzahl. Im zweiten Beispiel schreibt Pdftk die PDF-Dateien in ein existierendes Unterverzeichnis.
Mit der Operation cat fasst Pdftk mehrere PDF-Dateien zu einem neuen Dokument zusammen. Sie können die Dateinamen der einzelnen Quelldateien auch mit Jokerzeichen angeben.
pdftk Beispiel.pdf Formular.pdf Anhang.pdf cat output Beispiel_gesamt.pdf pdftk D=Deckblatt.pdf B=Beispiel.pdf cat D B1-4 output Beispiel_deckblatt.pdf
Wie das zweite Beispiel L fettdemonstriert, arrangieren Sie mit der Operation cat bei Bedarf Dokumente auch neu, indem Sie Teile einer PDF-Datei mit Teilen eines anderen PDFs zu einem neuen Dokument verknüpfen.
Abfragen und Aktualisieren der Meta-Informationen
Die meisten PDF-Dateien enthalten Meta-Informationen, etwa zum Autor, dem Thema der Datei oder der zum Erstellen verwendete Software. Mit Pdftk können Sie sich diese Angaben auf die Standardausgabe ausgeben oder in eine Datei speichern lassen:
pdftk Beispiel.pdf dump_data output Info.txt
Nach diesem Aufruf enthält die Datei info.txt alle Meta-Informationen des PDF-Dokuments. Diese setzen sich jeweils aus einem Schlüsselfeld und dem zugehörigen Wert zusammen (siehe Listing 1). Vor der Weitergabe oder Archivierung von PDF-Dokumenten ist es oft sinnvoll, die Meta-Daten zu aktualisieren. Pdftk ermöglicht dies, ohne dazu das Dokument neu erstellen oder übersetzen zu müssen.
Zum Aktualisieren der Meta-Informationen erstellen Sie eine Textdatei mit Meta-Daten, die etwa folgenden Aufbau haben (die Darstellung ist stark gekürzt):
InfoKey: Creator InfoValue: TeX InfoKey: Firma InfoValue: Mustermann und Söhne
Listing 1
Typische PDF-Metadaten
InfoKey: Title InfoValue: Arbeit mit Pdftk InfoKey: Subject InfoValue: Pdftk-Beispiele aus der Praxis InfoKey: Keywords InfoValue: pdftk, iText, OpenSource-Anwendungen InfoKey: Author InfoValue: Stefan Lagotzki InfoKey: Ort InfoValue: Dresden
Sie müssen in diese Datei nicht alle Informationen aufnehmen, die man mit einer PDF-Datei speichern kann. Bereits belegte FeldL fetter bleiben beim Update unberührt, wenn sie in der Textdatei nicht enthalten sind. Sie können auch zusätzliche Schlüsselfelder (im Beispiel Firma) definieren und mit Werten belegen. Das Aktualisieren der Meta-Informationen erfolgt mit dem Aufruf:
pdftk Beispiel.pdf update_info Info.txt output Bsp_meta.pdf
Ausgabedatei und Eingabedatei dürfen nicht den selben Namen tragen. Sie müssen also manuell oder über ein kleines Shell-Skript die Ausgabedatei anschließend entsprechend umbenennen.
Ausfüllen eines PDF-Formulars
PDF-Dateien können Formulare mit benannten Formularfeldern enthalten. Eine Einführung in das Thema PDF-Formulare findeL fettn Sie in [3]. Für PDF-Formulardaten hat die Firma Adobe das proprietäre, aber offene FDF-Format definiert. Das folgenden Beispiel stellt eine kleine FDF-Datei dar:
%FDF-1.2 1 0 obj <\<><\<> /FDF <\<><\<> /Fields [ <\<><\<> /V (Dresden)/T (ort) <\>><\>> <\<><\<> /V (Stefan Lagotzki)/T (autor)<\>><\>> ]/F (formular.pdf) <\>><\>> <\>><\>> endobj trailer <\<><\<> /Root 1 0 R <\>><\>> %%EOF
In diesem Beispiel bezeichnet T den Titel und V den Wert eines Formularfelds. Nun fügen Sie die PDF-Datei mit der FDF-Datei zusammen. Dabei können Sie entscheiden, ob die Formulardaten noch editierbar sein oder endgültig mit dem Dokument verbunden werden sollen:
pdftk Formular.pdf fill_form Bsp.fdf output Edit.pdf pdftk Formular.pdf fill_form Bsp.fdf output End.pdf flatten
Im ersten Fall lässt sich das Ergebnis noch editieren. Im zweiten Fall sorgt die Option flatten dafür, dass die Inhalte der Formularfelder endgültig mit der PDF-Datei verbunden werden.
Diese Fähigkeiten ermöglichen, Pdftk zur Erstellung ausgefüllter PDF-Formulare auf einem Inter- oder Intranetserver einzusetzen. Das Ausfüllen der Formularfelder erledigt der Nutzer in seinem Browser. Im Hintergrund erstellt dann ein PHP- oder Perl-Skript die FDF-Datei; zuletzt verbindet Pdftk beide Teile miteinander. Die fertige PDF-Datei kann per E-Mail zugestellt werden.
Passworte und Benutzerrechte in PDFs
PDF-Dateien lassen sich durch ein Benutzerpasswort und ein Passwort des Rechteinhabers schützen. Mit Pdftk legen Sie diese beiden Passworte und auch die Benutzerrechte einer PDF-Datei fest. Das folgende Beispiel setzt beide Passworte:
pdftk Datei.pdf output Datei_neu.pdf owner_pw Lie5quai user_pw phupaefu
Die Passworte in diesem Beispiel wurden mit dem Programm pwgen generiert. Für Nutzer- und Eigentümer-Passwort müssen Sie unterschiedliche Zeichenketten wählen.
Der Eigentümer einer PDF-Datei kann bestimmte Berechtigungen vergeben. In Tabelle 2 finden Sie eine Liste aller Rechtevorgaben, die Sie mit Pdftk setzen können. Das folgenden Beispiel erzeugt zunächst eine PDF-Datei erzeugt, die man lediglich drucken kann. Die zweite Zeile generiert ein PDF-Dokument, das man drucken und aus dem man Inhalte kopieren kann.
pdftk Beispiel.pdf output Datei_neu.pdf owner_pw Lie5quai user_pw phupaefu allow printing pdftk Beispiel.pdf output Datei_neu.pdf owner_pw Lie5quai user_pw phupaefu allow printing CopyContents
Tabelle 2: PDF-Berechtigungen
| Option | Bedeutung |
|---|---|
| Printing | Das Dokument darf in der bestmöglichen Qualität gedruckt werden. |
| DegradedPrinting | Das Dokument darf nur in eingeschränkter Qualität gedruckt werden. |
| ModifyContents | Der Inhalt des Dokuments darf geändert werden. |
| Assembly | Das PDF-Dokument darf mit anderen PDF-Dokumenten zusammengefügt werden. |
| CopyContents | Aus dem Dokument dürfen Textpassagen und Bilder kopiert werden. |
| ModifyAnnotations | Kommentare und Anmerkungen dürfen geändert werden. |
| FillIn | Formulare in der PDF-Datei dürfen ausgefüllt werden. |
| AllFeatures | Der Nutzer erhält alle genannten Rechte. |
PDF-Dateien lassen sich unterschiedlich stark verschlüsseln. Dazu geben Sie als letzte Option entweder encrypt_40bit oder encrypt_128bit an. Für geschützte PDF-Dateien müssen Sie zudem auch in Pdftk ein Passwort angegeben. Übergeben Sie mehrere Dateien, können Sie die Dateinamen dazu jeweils an eine Variable binden und dann für jede Datei ein Passwort angeben. Im folgenden Beispiel ist nur die Datei A passwortgeschützt:
pdftk A=Datei_neu.pdf B=Beispiel_farbig.pdf input_pw A=Lie5quai cat output Beispiel_pw.pdf user_pw Abraxas
Da Sie im vorigen Beispiel für Datei_neu.pdf das Zusammenfügen der PDF-Datei nicht gestattet haben, müssen Sie hier das Eigentümer-Passwort angeben.
Zusammenfassung
Mit Pdftk steht ein vielseitiges Multifunktionswerkzeug zur Bearbeitung von PDF-Dateien zur Verfügung. Falls Sie tiefer in die Materie einsteigen wollen, finden Sie unter [6] weitere Anwendungsfälle beschrieben [6].
Pdftk ist in C++ programmiert und basiert auf der iText-Bibliothek [5], die ihrerseits in Java erstellt wurde. Das fertige Programm wurde mit Werkzeugen aus der frei verfügbaren GNU Compiler Collection [1] compiliert und gelinkt. Es ist daher sehr gut auf unterschiedliche Betriebssysteme portierbar und es kann erweitert werden. Auf der Pdftk-Webseite finden Sie Links zu einigen Portierungen.
Das Programm wird aktiv weiterentwickelt. Der Programmautor Sid Steward beantwortet unter anderem in der Newsgroup comp.text.pdf und in seinem PDF-Forum [7] Fragen zu Pdftk und zur PDF-Programmierung.
Infos
[1] GCC-Projekt: GNU Compiler Collection ; Version 3.4.3; Nov. 2004; http://gcc.gnu.org/.
[2] Stefan Lagotzki: pdftk-Beispiele ; Version 1.0; Dez. 2004; http://www. lagotzki.de/pdftk/.
[3] Thomas Merz, Olaf Drümmer: Die PostScript- und PDF-Bibel; dpunkt-Verlag; 2002.
[4] Scott Pakin: The attachfile package ; Version 1.1; Jan. 2005; ftp: //ftp.dante.de/tex-archive/macros/latex/contrib/attachfile/.
[5] Bruno Lowagie, Paulo Soares: iText-Library ; Version 1.1; Nov. 2004; http://itext.sourceforge.net/.
[6] Sid Steward: PDF Hacks ; O’Reilly; 2004.
[7] Sid Steward: pdftk ; Version 1.12; Nov. 2004; http://www.accesspdf. com/pdftk/.


