pdftk ist ein frei verfügbares Werkzeug zur Bearbeitung von PDF-Dateien. Auf dieser Seite finden Sie die deutsche Übersetzung des pdftk-Hilfetextes und viele praktische Anwendungsbeispiele. Ich habe zu diesem Thema einen Artikel für die Zeitschrift Linux User geschrieben.
Die Seite wird in regelmäßigen Abständen aktualisiert. Wenn Sie Fragen oder Hinweise haben, senden Sie bitte eine E-Mail an stefan <at> lagotzki <dot> de.
Sid Steward, den Autor des Programms pdftk und des empfehlenswerten Buchs PDF Hacks (O'Reilly-Verlag), erreichen Sie über die pdftk-Webseite.
Hintergrundbild und Hintergrundfarbe
Stempeln von PDF-Dateien [Update Februar 2009]
Zerlegen und Zusammensetzen von PDF-Dateien [Update Juli 2006]
Abfragen und Aktualisieren der Meta-Informationen einer PDF-Datei
FAQ [Update Juli 2006]
Übersetzung des pdftk-Hilfetextes
Oft soll eine PDF-Datei gemeinsam mit ihrem Quelltext oder anderen Dateien weitergegeben werden. Der Absender kann diese Dateien mit pdftk in die vorhandene PDF-Datei einbinden und der Empfänger kann sie seinerseits mit pdftk (oder mit dem Adobe Reader ab Version 6) in ein Verzeichnis entpacken. Im folgenden Beispiel fügt der Absender den Quelltext und eine Graphik mit
an die PDF-Datei an. Beim Entpacken der Anhänge muss ein Verzeichnis angegeben werden, weil eine PDF-Datei mehrere Anhänge haben kann. Der Empfänger kann diese Anhänge mit folgendem Befehl in ein bestehendes Verzeichnis entpacken:
Mit dem aktuellen Adobe Reader (Version 7) können Sie auch einzelne Dateien aus der PDF-Datei extrahieren. Die Datei beispiel_anhang.pdf enthält zu Testzwecken eine LaTeX-Datei und eine EPS-Datei.
Anhänge können auch zu Seiten zugeordnet werden. Allerdings muss man diese Operation für mehrere solche Zuordnungen wiederholen. Im folgenden Beispiel wird eine EPS-Datei zur Seite 1 des bearbeiteten PDF-Dokuments zugeordnet:
Auf der Seite 1 erscheint dann im Adobe Reader ein kleines Symbol. Wenn man auf dieses Symbol klickt, kann man den Anhang abspeichern.
Mit pdftk können Sie ein PDF-Dokument mit einem Hintergrundbild (Wasserzeichen) oder einer Hintergrundfarbe versehen. Dazu dient die Operation background. Wenn Sie ein Hintergrundbild verwenden möchten, sollte es bereits in der Papiergröße Ihres PDF-Dokuments vorliegen oder zumindest die selben Proportionen besitzen. Das Hintergrundbild wird durch Skalieren an das PDF-Dokument angepasst.
Im folgenden Beispiel werden alle Seiten der PDF-Datei mit einem Hintergrundbild versehen:
Die Hintergrundfarbe kann man zum Beispiel mit einer kleinen EPS-Datei und den entprechenden PostScript-Befehlen setzen. Die EPS-Datei wird in eine PDF-Datei umgewandelt und mit pdftk als Hintergrund eingefügt. Im folgenden Listing ist die EPS-Datei dargestellt:
%!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
Diese EPS-Datei kann mit GhostScript oder Adobe Acrobat in eine PDF-Datei umgewandelt werden. Im folgenden Beispiel wird die umgewandelte PDF-Datei als Hintergrund verwendet:
Die Dateien beispiel_farbig.pdf und beispiel_neu.pdf können Sie aus den EPS- und PDF-Beispielen in den Archiven selbst herstellen. Die Farbe können Sie in der EPS-Datei anpassen. Sie wird in der üblichen PostScript-Notation im RGB- oder CMYK-Farbsystem angegeben.
Die Hintergrundfarbe kann auch mit den PostScript-Befehlen setcmykcolor oder setgray gesetzt werden. Informationen zu den PostScript-Befehlen finden Sie in der Sprachreferenz.
Mit pdftk können Sie ein PDF-Dokument auch mit einem Stempel versehen (ab Version 1.41). Dazu dient die Operation stamp. Eine PDF-Datei zum Stempeln sollte bereits in der Papiergröße Ihres PDF-Dokuments vorliegen oder zumindest die selben Proportionen besitzen. Die PDF-Datei wird wie eine Folie über die Seiten der vorliegenden PDF-Datei gelegt und durch Skalieren an die Größe angepasst.
Im folgenden Beispiel werden alle Seiten der PDF-Datei mit einem Stempel versehen:
Mit den beiden Operationen burst und cat kann pdftk PDF-Dateien zerlegen und zusammensetzen. Die folgenden beiden Anwendungsbeispiele zeigen das Zerlegen einer PDF-Datei in einzelne Seiten:
Im ersten Beispiel werden die Seiten in das aktuelle Verzeichnis "entpackt". Die Dateien heißen dann pg_0001.pdf bis pg_n.pdf (damit kann der Nutzer also keinen Namen für die PDF-Dateien angeben). Im zweiten Beispiel werden die Einzelseiten in das bereits existierende Verzeichnis seiten geschrieben und mit dem Präfix seite versehen.
Sie können sich das Zerlegen einer PDF-Datei vereinfachen, indem Sie die Möglichkeiten Ihres Betriebssystems oder Ihrer Benutzeroberfläche besser ausnutzen. Unter Windows können Sie so vorgehen:
Für KDE-Nutzer gibt es Aktionen, die Sie zu Ihrem Kontextmenü hinzufügen können.
Das folgende Beispiel zeigt, wie man mit pdftk eine neue PDF-Datei aus mehreren Einzeldateien (oder auch aus ausgewählten Seiten der Einzeldateien) zusammensetzt:
In den meisten PDF-Dateien sind Meta-Informationen (zum Beispiel über den Autor, das Thema der Datei oder die verwendete Software) gespeichert. Mit pdftk können Sie sich diese Angaben auf die Standardausgabe ausgeben oder in eine Datei speichern lassen:
Die Datei info.txt enthält nun alle Metadaten des Dokuments. Sie ist aus Schlüsselfeldern und zugehörigen Werten aufgebaut:
Vor der Weitergabe oder während der Archivierung von PDF-Dokumenten ist es oft sinnvoll, diese Meta-Informationen zu aktualisieren. Mit pdftk ist das Aktualisieren dieser Daten auch ohne das erneute Erstellen oder Übersetzen des Dokuments möglich. Zum Aktualisieren der Meta-Informationen können Textdateien mit Metadaten verwendet werden, die aus einem solchen "dump" abgeleitet sind und etwa folgenden Aufbau haben:
Sie müssen in diese Datei nicht alle Informationen aufnehmen, die man mit einer PDF-Datei speichern kann. Bereits belegte Felder bleiben beim Update unberührt, wenn sie in der Textdatei nicht enthalten sind. Sie können auch zusätzliche Schlüsselfelder (im Beispiel "Ort") definieren und mit Werten belegen. Das Aktualisieren der Meta-Informationen erfolgt mit:
Ausgabedatei und Eingabedatei dürfen nicht den selben Namen tragen. Mit einem kleinen Shellscript oder einer Batchdatei kann man die Ausgabedatei entsprechend umbenennen.
PDF-Dateien können Formulare mit benannten Formularfeldern enthalten. Die PDF-Formulardaten werden oft mit proprietären Programmen der Firma Adobe in die PDF-Dateien eingefügt und gespeichert. Das dazu verwendete FDF-Format wurde aber durch Adobe offengelegt, so dass man sich auch eigene Anwendungen zum Erstellen von FDF-Dateien schreiben kann. Es folgen zwei pdftk-Anwendungsbeispiele:
Im ersten Beispiel sind die Formulardaten noch editierbar. Man kann ein Formular auf diese Weise vorläufig ausfüllen und der Nutzer kann Korrekturen oder Ergänzungen vornehmen. Im zweiten Beispiel sind die Formulardaten nicht mehr editierbar, sondern fest mit der PDF-Datei verbunden. Wenn man pdftk auf diese Weise richtig nutzen will, benötigt man einen Webserver mit entsprechenden Skripten (zum Beispiel in Perl oder PHP).
Die Dateien des Minimalbeispiels finden Sie in den Archiven.
In dieser Rubrik werden Fragen behandelt, die mir per E-Mail zugegangen sind oder die mir aus den Suchbegriffen interessant erscheinen. Bitte haben Sie Verständnis, wenn momentan nicht alle Fragen sofort beantwortet werden können :-)
Nein. pdftk gehört zu den Programmen, die die gesetzten Berechtigungen (Einschränkungen) in einer PDF-Datei respektieren.
Offen gesagt: ich habe noch nie den Bedarf gesehen, eine PDF-Datei zu lesen, für die ich das gesetzte User-Password nicht kenne. Es gibt inzwischen (seit Mai 2006) bei Sourceforge auch ein Projekt zum 'Cracken' von PDF-Dateien. In der Projektbeschreibung heißt es:
First release of pdfcrack - a command line Password Recovery tool for PDF-files. [...] The tool supports autosaving states for bruteforce when interrupted and optimized attack of owner-passwords when user-password is known.
Das ist aber völlig unnötig. Denn wenn man das User-Passwort kennt, kann man die Einschränkungen der PDF-Datei ohnehin ändern.
Ja. Im Rahmen der Möglichkeiten, die das PDF-Format bietet.
Einige Fragen bezogen sich auf die Möglichkeit, ein Hintergrundbild einzufügen. Gern wird daraus der Schluss gezogen, dass pdftk auch Seitenzahlen einfügen kann. Das ist leider nicht möglich. Man kann aber zwei andere Werkzeuge benutzen: pdfLaTeX und mbtpdfasm.
Hier wird eine Lösung mit pdfLaTeX gezeigt. Der Fragesteller wollte die Seitenzahl zentriert und 10mm tiefer als üblich angeordnet haben. Mit dem verwendeten Paket kann man die Seitenzahl beliebig anordnen.
\listfiles \documentclass[a4paper]{article} \usepackage{fancyhdr} \usepackage{pdfpages} \renewcommand{\headrulewidth}{0mm} \fancyfoot[CO]{\raisebox{-10mm}{\large\textsf{\thepage}}} \fancyfoot[RO,LO]{} \fancypagestyle{plain}{% \pagestyle{fancy}% }% \begin{document} \pagestyle{fancy} \includepdf[pages=-, nup=1x1, pagecommand={\mbox{}} ]{a.pdf} \end{document} %% HTH, Stefan
pdftk <input PDF files | - | PROMPT> [input_pw <input PDF owner passwords | PROMPT>] [<operation> <operation arguments>] [output <output filename | - | PROMPT>] [encrypt_40bit | encrypt_128bit] [allow <permissions>] [owner_pw <owner password | PROMPT>] [user_pw <user password | PROMPT>] [flatten] [compress | uncompress] [verbose] [dont_ask | do_ask] Als <Operation> kann eines der Schlüsselwörter [cat | attach_files | unpack_files | burst | fill_form | background | dump_data | dump_data_fields | update_info] angegeben werden. Der komplette Hilfetext wird mit pdftk --help ausgegeben.
Wenn man PDF als elektronisches Papier betrachtet, dann dient pdftk als elektronischer Enthefter, als Locher und Bindegerät, zum Verschlüsseln, Entschlüsseln und Durchleuchten. Pdftk ist ein einfach handhabbares Werkzeug für alltägliche Arbeiten an PDF-Dokumenten. Verwenden Sie es, um * PDF-Dokumente zusammenzufügen * PDF-Seiten zu einem neuen Dokument zusammenzustellen * den Inhalt geschützter PDF-Dateien zu entschlüsseln (Passwort erforderlich!) * PDF-Dateien zu verschlüsseln * PDF-Formulare mit FDF-Daten auszufüllen * PDF-Dateien mit einem Hintergrundbild zu versehen * PDF-Metadaten und Bookmarks zu lesen * PDF-Metadaten zu aktualisieren * Dateien an ein PDF anzuhängen * PDF-Anhänge zu entpacken * ein PDF Document in Einzelseiten zu zerlegen * PDF-Streams zu dekomprimieren und zu komprimieren * defekte PDF-Streams zu reparieren (wenn möglich)
Es folgt eine Zusammenfassung der Optionen:
--help, -h
Ausgabe des Hilfetextes.
<input PDF files | - | PROMPT>
Hier übergeben Sie eine Liste der PDF-Dateien, die
bearbeitet werden sollen. Wenn Sie diese Dateien mit
der Operation cat ohne Verwendung eines Handles zusammenfügen
möchten, dann geben Sie die Dateien einfach in der
gewünschten Reihenfolge an.
Verwenden Sie '-', um von der Standardeingabe zu lesen oder um die
Ausgabe eines anderen Programms in pdftk umzuleiten.
Eingabedateien können an ein Handle gebunden werden.
Als Handle kann ein einzelner Großbuchstabe verwendet werden:
<input PDF handle>=<input PDF filename>
Das Handle kann in vielen Fällen weggelassen werden.
Es wird verwendet, um für einzelne PDF-Dateien Passworte
und Seitenbereiche anzugeben.
Beispiel: A=input1.pdf B=input2.pdf
[input_pw <input PDF owner passwords | PROMPT>] Eigentümerpassworte für Eingabedateien können bei Bedarf unter Verwendung der Handles angegeben werden: <input PDF handle>=<input PDF file owner password> Wenn keine Handles verwendet werden, dann werden die Passworte in der Reihenfolge der Eingabedateien zugeordnet. Die meisten pdftk-Operationen erfordern die Angabe des Eigentümerpassworts. Wenn kein Eigentümerpasswort vorhanden ist, muss stattdessen das Nutzerpasswort angegeben werden. Für PDF-Dateien ohne Passworte sollten auch keine Passworte angegeben werden. Wenn pdftk im do_ask-Modus aufgerufen wird, werden Sie zur Eingabe fehlender Passworte aufgefordert.
[<operation> <operation arguments>]
Wenn Sie keine Operation angeben, wird pdftk im
'Filter'-Modus eingesetzt. Dabei wird eine PDF-Datei
übergeben und pdftk wendet auf die Ausgabedatei lediglich
die Ausgabe-Optionen (Verschlüsselung, Passworte und
Komprimierung) an.
Folgende Operationen sind in pdftk verfügbar:
cat, attach_files, unpack_files, burst,
fill_form, background, dump_data, dump_data_fields,
update_info.
Für einige Operationen sind spezielle Befehlsargumente notwendig.
Im folgenden werden alle Operationen und Argumente beschrieben.
cat [<Seitenbereich(e)>] Verknüpft Eingabedateien oder Einzelseiten aus den Eingabedateien zu einer neuen PDF-Datei. Die Reihenfolge der Seiten in der Ausgabedatei wird durch die Reihenfolge der Eingabedateien bestimmt. <input PDF handle>[<erste Seite>[-<letzte Seite>[<Bezeichner>]]] Für eine Eingabedatei kann man die Seitenbereiche ohne handle angeben. Wenn Seitenbereiche aus mehreren Eingabedateien angegeben werden sollen, muss man (wie oben angegeben) ein handle verwenden. Als Bezeichner kann 'even' für geradzahlige oder 'odd' für ungeradzahlige Seitenzahlen angegeben werden. Wenn cat ohne Befehlsargumente aufgerufen wird, dann werden alle Eingabedateien in der angegebenen Reihenfolge miteinander verbunden. Anmerkungen: * <letzte Seite> kann größer als <erste Seite> sein * Mit dem Schlüsselwort end bezieht man sich auf die letzte Seite des Dokuments. * Eine einzelne Seite wird ausgewählt, indem man die Angabe <letzte Seite> weglässt. * Ein handle steht für das gesamte PDF-Dokument: B1-end ist äquivalent zu B. Beispiele für die Angabe von Seitenbereichen: A1-21 Bend-1odd A72 A1-21 Beven A72
burst
Zerlegt eine einzelne PDF-Datei in ihre Einzelseiten
und erstellt eine Textdatei mit einigen Angaben zur
Eingabedatei (doc_data.txt).
Sie enthält die selben Angaben, die auch mit der
Operation dump_data ausgegeben werden.
Ohne Angabe eines Stammnamens für die Ausgabedateien
werden die Einzeldateien im Format pg_%04d.pdf benannt,
also: pg_0001.pdf, pg_0002.pdf usw. Um die Ausgabedateien
gezielt zu benennen, kann ein Formatstring angegeben werden.
Wenn Sie die Seiten zum Beispiel als seite_01.pdf,
seite_02.pdf [...] benennen wollen, geben Sie als
Formatstring seite_%02d.pdf an.
Die Ausgabedateien können durch ein Eigentümer- und
Nutzerpasswort geschützt werden.
Beispiele:
pdftk in.pdf burst owner_pw foopass
attach_files <dateinamen | PROMPT> [to_page <Seitenzahl | PROMPT>] Fügt eine oder mehrere beliebige Dateien als Anlagen an eine PDF-Datei an. Wenn keine Seitenzahl angegeben wird, werden die Anhänge an das Dokument angefügt. Wenn die Option to_page verwendet wird, dann wird die Anlage mit der angegebenen Seite verbunden. Auch hier kann man sich mit dem Schlüsselwort end auf die letzte Seite beziehen. Beispiel: pdftk in.pdf attach_files table1.html table2.html to_page 6 output out.pdf unpack_files Entpackt die Anhänge und speichert sie in das aktuelle Verzeichnis oder in ein angegebenes Verzeichnis. Beispiel: pdftk report.pdf unpack_files output ~/atts/ oder interaktiv: pdftk report.pdf unpack_files output PROMPT
fill_form <FDF data filename | - | PROMPT>
Füllt die Formularfelder einer einzelnen Eingabedatei
mit den Formulardaten einer FDF-Datei oder von stdin.
Geben Sie den Namen der FDF-Datei nach fill_form an oder
verwenden Sie - als Option, um die Daten von stdin zu
übernehmen:
pdftk form.pdf fill_form data.fdf output form.filled.pdf
Nach dem Ausfüllen des Formulars bleibt das Formularfeld
weiterhin editierbar, wenn nicht die Option 'flatten' angegeben
wird. Mit Hilfe dieser Option werden die Inhalte der Formularfelder
endgültig mit der PDF-Datei verbunden. Sie können 'flatten' auch
als Operation zur Nachbearbeitung bestehender PDF-Dateien verwenden:
pdftk form.pdf fill_form data.fdf output out.pdf flatten
oder:
pdftk form.filled.pdf output out.pdf flatten
Wenn die FDF-Datei zusätzlich RTF-Daten enthält,
dann werden diese RTF-Daten genauso wie die Texteingaben
behandelt. pdftk setzt ein flag, damit das Erscheinungs-
bild der Formularfelder im Acrobat Reader entsprechend der
RTF-Formatierung angepasst wird. Wenn der Nutzer die PDF-
Datei öffnet, werden die RTF-Felder formatiert.
Wenn der PDF-Viewer des Nutzers das RTF-Format nicht
unterstützt, werden stattdessen die Texteingaben angezeigt.
Das gilt auch, wenn die Option flatten auf das Dokument
angewendet wurde, ohne dass das Dokument vorher mit Adobe
Acrobat Standard oder Professional gespeichert wurde.
background <background PDF filename | - | PROMPT>
Ergänzt alle Seiten einer einzelnen PDF-Datei mit einem
Wasserzeichen. Der Dateiname des Wasserzeichens wird wie
im folgenden Beispiel angegeben:
pdftk in.pdf background back.pdf output out.pdf
pdftk verwendet nur die erste Seite der Datei, die als
Wasserzeichen angegeben wird und setzt dieses Wasserzeichen
hinter jede Seite der Eingabedatei. Das Wasserzeichen
wird bei Bedarf skaliert und rotiert, damit es zu den
Seiten der Eingabedatei passt. Sie können - angeben,
um eine PDF-Datei, die als Wasserzeichen dienen soll, über
stdin umzuleiten. Wegen der Rückwärtskompatibilität zu
pdftk 1.0 kann background auch als Ausgabeoption genutzt
werden. Diese veraltete Verfahrensweise funktioniert aber
nur, wenn keine andere Operation angegeben wird.
dump_data
Liest eine einzelne PDF-Datei und schreibt einige
statistische Angaben, die Metadaten und die Bookmarks
der PDF-Datei auf die Standardausgabe oder in eine
Ausgabedatei. Mit dieser Operation wird keine neue
PDF-Datei erstellt.
dump_data_fields
Liest eine einzelne PDF-Datei und schreibt Angaben über die
Formularfelder in eine Ausgabedatei oder auf die Standardausgabe.
Mit dieser Operation wird keine neue PDF-Datei erstellt.
update_info <info data filename | - | PROMPT>
Aktualisiert die Metadaten, die im info-dictionary einer PDF-
Datei gespeichert sind, mit den Angaben aus einer Textdatei.
Diese Eingabedatei nutzt die selbe Syntax, die auch für die
Ausgabe der Operation dump_data verwendet wird. Diese Operation
ändert keine Daten in einem vorhandenen XMP-stream.
Beispiel:
pdftk in.pdf update_info in.info output out.pdf
Aktuelle Binärpakete auf accesspdf.com
Quelltexte und Hinweise zum Compilieren auf accesspdf.com
Diese Seite dient als Ergänzung meiner Artikel in der Zeitschrift Linux User und in der Zeitschrift der Deutschen Anwendervereinigung für TeX (DANTE e.V.). Sie können sich hier die aktualisierten Beispiele zum pdftk-Artikel in der Linux-User 08/2005 und der DTK herunterladen.
Alle Beispiele wurden unter Debian GNU/Linux und SuSE Linux sowie unter Win2k mit pdftk in der Version 1.12 getestet. Sollten Sie auf diesen oder anderen Plattformen Probleme mit pdftk und den Beispielen feststellen, senden Sie bitte eine E-Mail an stefan <at> lagotzki <dot> de. Der Autor dieser Seite arbeitet auf den Gebieten LaTeX (Satz, Programmierung), Computergraphik, Datenbanken und CAD.