Ubuntu 14.04 Trusty Tahr
Ubuntu 12.04 Precise Pangolin
pdftk (kurz für PDF toolkit) ist ein plattformübergreifendes Werkzeug für die Kommandozeile bzw. Konsole, mit dem man PDF-Dateien manipulieren kann. pdftk ist eine Portierung der Open-Source-Bibliothek iText. Das Programm wurde von Sid Steward entwickelt und steht unter der GPLv2-Lizenz .
Die Funktionalität von pdftk umfasst:
das Zusammenfügen und Teilen von PDF-Dokumenten
das Drehen von PDF-Dokumenten
das Einbinden von Wasserzeichen in PDF-Dokumente
das Abfragen und Aktualisieren der Metadaten einer PDF-Datei
das Ausfüllen von PDF-Formularen
die Ver- und Entschlüsselung von PDF-Dokumenten
die Komprimierung und Dekomprimierung von PDF-Dokumenten
das Anfügen von Dateien als Anlage an PDF-Dokumente
Mit PDF Chain gibt es eine grafische Oberfläche für das Programm, die ebenfalls in den offiziellen Paketquellen enthalten ist.
pdftk in den offiziellen Paketquellen enthalten. Es muss folgendes Paket installiert [1] werden:
pdftk (universe)
mit apturl
Paketliste zum Kopieren:
sudo apt-get install pdftk
sudo aptitude install pdftk
pdftk wird im Terminal [2] mit folgendem Befehl aufgerufen:
pdftk EINGABEDATEI OPERATION OPTION output AUSGABEDATEI PASSWORT RECHTEOPTION
pdftk
kennt folgende Operationsoptionen:
Operationen von pdftk | |
Option | Beschreibung |
attach_files | Anhängen von Dateien an ein PDF-Dokument |
background | Einfügen eines Wasserzeichens |
burst | Zerlegung eines PDF-Dokuments in Einzelseiten |
cat | Zusammenfügung von Einzeldokumenten zu einem neuen Gesamt-Dokument |
dump_data | Ausgabe von Informationen zum PDF-Dokument auf der Standardausgabe |
dump_data_fields | Ausgabe von Informationen zu Formularfeldern eines PDF-Dokument auf der Standardausgabe |
fill_form | Ausfüllen von PDF-Formularen (oder Verbindung von Formulardaten mit Dokument) |
update_info | Aktualisierung der Metadaten (wie Titel, Autor, Datum der Erstellung) einer PDF-Datei |
Weitere Optionen sind der Manpage zu entnehmen.
pdftk kann folgende Rechte eines PDF-Dokuments verändern:
Berechtigungen eines PDF-Dokuments | |
Option | Beschreibung |
AllFeatures | Nutzer hat alle (hier im Artikel nachfolgend genannten) Rechte zur Änderung |
Assembly | Zusammenfügen mit anderen Dokumenten erlaubt |
CopyContents | Kopieren von Textpassagen und Bildern aus dem Dokument erlaubt (Option ScreenReaders ist hiermit auch abgedeckt) |
DegradedPrinting | Drucken nur in eingeschränkter Qualität erlaubt |
FillIn | Formular-Ausfüllung erlaubt |
ModifyAnnotations | Änderung der Anmerkungen erlaubt |
ModifyContents | Änderung der Dokumenteninhalte erlaubt |
Printing | Drucken in bestmöglicher Qualität erlaubt |
ScreenReaders | Textzugriff für Screenreader (d.h. Sprachausgabeprogramme) |
Mit folgendem Befehl werden die erste Seite eines Dokuments datei.pdf sowie alle Seiten ab der 11. Seite mit Ausnahme der 15. Seite entfernt und die verbleibenden Seiten (Seiten 2 bis 10 sowie 15 der Ursprungsdatei) in der Datei Dokument.pdf gespeichert:
pdftk datei.pdf cat 2-10 15 output Dokument.pdf
Praktisch gibt man also an, welche Seiten im Dokument verbleiben sollen.
Mit folgendem Befehl wird die Position der Seiten 7 bis 8 eines Dokuments datei.pdf mit derjenigen der Seiten 15 bis 16 getauscht und das neue Dokument als Datei Dokument.pdf gespeichert:
pdftk datei.pdf cat 1-6 15-16 9-14 7-8 17-end output Dokument.pdf
Mit dem folgenden Befehl werden die Dateien datei1.pdf, datei2.pdf und datei3.pdf zum neuen Dokument datei123.pdf zusammengefügt:
pdftk datei1.pdf datei2.pdf datei3.pdf cat output datei123.pdf
Mit dem folgenden Befehl werden alle PDF-Dateien im aktuellen Verzeichnis nacheinander zur Datei zusammen.pdf zusammengefügt:
pdftk *.pdf cat output zusammen.pdf
Bitte hier darauf achten, dass die Reihenfolge den jeweiligen Dateinamen bzw. deren Sortierung entspricht.
Mit dem folgenden Befehl werden die Seiten 1 bis 7 des Dokuments datei1.pdf und die Seiten 1 bis 5 des Dokuments datei2.pdf sowie anschließend noch die 8. Seite von datei1.pdf zur Datei zusammen.pdf zusammengefügt:
pdftk A=datei1.pdf B=datei2.pdf cat A1-7 B1-5 A8 output zusammen.pdf
Sogenannte „Handles“, hier A und B, erlauben es, mehrere Arbeitsschritte in einem Befehl zu verknüpfen. Im obigen Beispiel ist das eine Extraktion (der Seiten) und die anschließende Verknüpfung der extrahierten Seiten.
Zur Zerlegung eines Dokuments in seine Einzelseiten dient die Option burst
:
pdftk langesdokument.pdf burst
Hierbei ist zu beachten, dass sich aus einer Anwendung des Befehls auf Dokumente mit vielen Seiten viele Einzelseiten mit Dateinamen pg_X.pdf
(X
=Seitennummer) ergeben. Es empfiehlt sich daher, mit der Option output
ein Zielverzeichnis für die extrahierten Seiten festzulegen:
pdftk langesdokument.pdf burst output ~/Dokumente/Zielverzeichnis/Seite_%03d.pdf
Der Dateiname Seite_%03d.pdf
bedeutet konkret: Der Name jeder Einzelseite beginnt mit „Seite_“, gefolgt von der Seitenzahl in Dezimaldarstellung (d
) und 3 Stellen (3
); fehlende Ziffern werden mit Nullen (0) aufgefüllt.
Mit dem folgenden Befehl wird das Dokument datei.pdf um 90 Grad gedreht und als dokument90.pdf gespeichert:
pdftk datei.pdf cat 1-endE output dokument90.pdf
Hinter dem cat
wird angegeben, welche Seiten gedreht werden sollen. Im Beispiel sind das die Seiten 1-end
, also alle. Das E
zeigt die Drehrichtung an: es steht für E
wie „east“ (Osten), also 90 Grad im Uhrzeigersinn (dementsprechend steht S
für „south“, also 180 Grad, und W
für „west“, also 270 Grad). Seit Version 1.45 von pdftk muss die Drehrichtung ausgeschrieben werden. Ab Ubuntu 13.10 lautet der Befehl also
pdftk datei.pdf cat 1-endeast output dokument90.pdf
Mit dem folgenden Befehl wird das Dokument datei.pdf um 180 Grad gedreht und als dokument180.pdf gespeichert:
pdftk datei.pdf cat 1-endS output dokument180.pdf
bzw. ab Ubuntu 13.10
pdftk datei.pdf cat 1-endsouth output dokument180.pdf
Mit dem folgenden Befehl wird das Dokument datei.pdf um 270 Grad gedreht und als dokument270.pdf gespeichert:
pdftk datei.pdf cat 1-endW output dokument270.pdf
bzw. ab Ubuntu 13.10
pdftk datei.pdf cat 1-endwest output dokument270.pdf
Mit dem folgenden Befehl werden nur die Seiten 7 bis 10 des Dokuments datei.pdf um 180 Grad gedreht und als dokument180_7-10.pdf gespeichert:
pdftk datei.pdf cat 1-6 7-10S 11-end output dokument180_7-10.pdf.pdf
bzw. ab Ubuntu 13.10
pdftk datei.pdf cat 1-6 7-10south 11-end output dokument180_7-10.pdf.pdf
Die Seiten 1 bis 6 und 11 bis Ende werden nicht gedreht, müssen aber – ohne Drehoption – angegeben werden, da sie sonst nicht in das Enddokument aufgenommen werden.
Mit Hilfe der Option dump_data
werden die Metadaten eines Dokuments angezeigt. Dazu zählen beispielsweise Informationen zur Anwendung, mit das PDF-Dokument erstellt wurde, Angaben zur verwendeten PDF-Version, Rechte (siehe unten) etc.
Im folgenden Beispiel werden die Metadaten des Dokuments latexbeamer.pdf in die Datei info.txt geschrieben:
pdftk latexbeamer.pdf dump_data output info.txt
Das ergibt folgenden Inhalt der Datei info.txt:
cat info.txt
InfoKey: Creator InfoValue: LaTeX with beamer class version 3.06 InfoKey: Title InfoValue: LaTeX slides with beamer - So much better than PowerPoint InfoKey: Producer InfoValue: pdfeTeX-1.304 InfoKey: Author InfoValue: Sylvia Blaho InfoKey: PTEX.Fullbanner InfoValue: This is pdfeTeX, Version 3.141592-1.30.4-2.2 (Web2C 7.5.5) kpathsea version 3.5.5 InfoKey: CreationDate InfoValue: D:20061103083529+01'00' (…)
Die so erzeugte Datei info.txt kann nun in einem Editor [3] manuell verändert werden. Anschließend können die Änderungen durch folgenden Befehl in das Dokument latexbeamer_neu.pdf übertragen werden:
pdftk latexbeamer.pdf update_info info.txt output latexbeamer_neu.pdf
Selbst erzeugte PDFs enthalten oft unbeabsichtigt private Daten wie den vollen Namen des Benutzers in den Metadaten. Dies sollte man bedenken, bevor man solche PDFs veröffentlicht. Mit einem Shellscript kann man mit Hilfe der Funktionen dump_data
und update_info
sehr einfach Metadaten aus mehreren PDFs gleichzeitig entfernen. Ein Beispielskript hierfür ist:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | #!/bin/bash # pdf-metadaten-leeren.sh © michael_squire (ubuntuusers.de) 2013-01-18 # Lizenz: Creative Commons Namensnennung 3.0 Unported # Hilfetext: siehe letzte 12 Zeilen dieses Skripts # Hilfetext ausgeben (letzte 12 Zeilen dieses Skripts) falls Skript irrtümlicherweise mit Parametern gestartet wurde: if [ $1 ]; then sed -e :a -e '$q;N;13,$D;ba' $0; exit 127; fi if [ -f ./*.pdf ] ; then mkdir ./temp # Temporäres Verzeichnis erzeugen if [ ! -d ./PDFs-ohne-Metadaten ] ; then mkdir ./PDFs-ohne-Metadaten; fi # Zielverzeichnis erzeugen, falls nicht schon vorhanden cp ./*.pdf ./PDFs-ohne-Metadaten # alle PDFs des aktuellen Verzeichnis ins Zielverzeichnis kopieren echo ... Kopiere PDFs in den Ordner `pwd`"/PDFs-ohne-Metadaten/" ... else echo pdf-metadaten-leeren.sh: Keine PDFs im aktuellen Verzeichnis `pwd` gefunden rm -r ./temp 2>/dev/null # Temporäre Daten löschen exit 1 fi # Zur Verarbeitung der Dateinamen werden vorübergehend die Leerzeichen in den Dateinamen durch Unterstriche ersetzt: for DATEI in ./PDFs-ohne-Metadaten/*.pdf; do rename "s/ /_/g" "$DATEI" 2>/dev/null; done for i in $( find ./PDFs-ohne-Metadaten -type f -name "*.pdf" ); # Dateiname wird in Variable i geschrieben do DATEINAME=`basename $i` DATEINAME_MIT_LEERZEICHEN=`echo $DATEINAME | sed -e "s/_/ /g"` cp --remove-destination ./PDFs-ohne-Metadaten/$DATEINAME ./temp/temp.pdf # Datei zur Verarbeitung ins temporäre Verzeichnis kopieren # Temporäre Datei mit leeren Metadaten für das aktuell verarbeitete PDF erzeugen (die echo-Konstruktion bewirkt mehrere Zeilen ähnlich einem "here document"): ( echo InfoKey: Author; echo InfoValue:; echo InfoKey: Company; echo InfoValue:; echo InfoKey: CreationDate; echo InfoValue:; echo InfoKey: Creator; echo InfoValue:; echo InfoKey: ModDate; echo InfoValue:; echo InfoKey: Producer; echo InfoValue:; echo InfoKey: SourceModified; echo InfoValue:; echo InfoKey: Title; echo InfoValue: $DATEINAME_MIT_LEERZEICHEN ) > ./temp/blank-metadata.txt pdftk ./temp/temp.pdf update_info ./temp/blank-metadata.txt output $i 2>/dev/null # Geänderte Metadaten ins kopierte PDF und in Datei schreiben echo ... Leere Metadaten für Kopie von $DATEINAME_MIT_LEERZEICHEN ... # Feedback an die Kommandozeile done # Leerzeichen in Dateinamen wiederherstellen: for DATEI in ./PDFs-ohne-Metadaten/*.pdf; do rename "s/_/ /g" "$DATEI" 2>/dev/null; done unset i DATEINAME DATEINAME_MIT_LEERZEICHEN DATEI # Variablen löschen rm -r ./temp # Temporäre Daten löschen exit 0 # Hilfetext: pdf-metadaten-leeren.sh: Bitte ohne Parameter starten Anleitung: Dieses Skript ins Verzeichnis der PDFs kopieren und dort ausführen. Verwendung: ./pdf-metadaten-leeren.sh Dieses Skript kopiert alle PDFs des aktuellen Ordners in einen Unterordner ./PDFs-ohne-Metadaten/ und entfernt mit pdftk die Metadaten dieser Kopien. Der Titel ("Title") in den Metadaten wird jeweils durch den Dateinamen ersetzt. Die Originaldateien werden nicht verändert. |
Man kopiert obigen Code in einen Texteditor und speichert die Datei unter dem Namen pdf-metadaten-leeren.sh. Alternativ lädt man sich das Skript pdf-metadaten-leeren.sh aus dem Anhang dieses Artikels herunter. Dann macht man das Skript ausführbar und kopiert man das nun fertige Skript in den Ordner, der die PDFs enthält, deren Metadaten man entfernen möchte. Im Terminal öffnet man diesen Ordner und startet das Skript mit
./pdf-metadaten-leeren.sh
Das Skript legt einen neuen Unterordner PDFs-ohne-Metadaten an, in welchem es gleichnamige Kopien aller PDFs mit leeren Metadaten anlegt, nur "Title" in den Metadaten wird durch den Dateinamen ersetzt. Die Originaldateien werden nicht verändert. Anmerkung: Dieses Skript kann nur Dateinamen ohne Leerzeichen verarbeiten, die Dateien müssen die Endung .pdf haben.
Eine Datei dokument.pdf wird mit dem folgenden Befehl verschlüsselt. Es werden im Beispiel sowohl ein Passwort für den Rechteinhaber als auch ein Benutzerpasswort vergeben:
pdftk dokument.pdf output verschluesselt.pdf owner_pw PASSWORTINHABER user_pw PASSWORTNUTZER
Mit den am Schluss des Befehls angehängten Optionen encrypt_40bit
oder encrypt_128bit
lässt sich zusätzlich die Verschlüsselungsstärke bestimmen.
Für PDF-Dateien können bestimmte Rechteoptionen gesetzt werden. Im folgenden Beispiel ist dem Nutzer das Verändern der Anmerkungen sowie das Drucken der Datei erlaubt, Letzteres allerdings nur in eingeschränkter Qualität:
pdftk datei_alt.pdf output datei_neu.pdf owner_pw PASSWORTINHABER user_pw PASSWORTNUTZER allow DegradedPrinting ModifyAnnotations
Mit Hilfe einer Datei im FDF-Format lassen sich Formulare in PDF-Dokumenten ausfüllen.
Mit Hilfe des folgenden Befehls wird aus dem Dokument Formular.pdf eine FDF-Datei formulardaten.fdf erzeugt:
pdftk Formular.pdf generate_fdf output formulardaten.fdf
Diese Datei kann nun in einem Editor [3] manuell editiert werden; T
bezeichnet dabei den Titel, V
den Wert eines Formularfeldes. Liegt eine modifizierte FSF-Datei vor (im Beispiel: formulardaten.fdf), kann sie mit folgendem Befehl mit dem Dokument Formular.pdf verbunden werden, so dass sich die ausgefüllte Datei Dokument.pdf ergibt:
pdftk Formular.pdf fill_form formulardaten.fdf output Dokument.pdf
Mit der Option flatten
wird ein Formular erzeugt, das nicht mehr editierbar ist:
pdftk Formular.pdf fill_form formulardaten.fdf output Dokument.pdf flatten
Um ein Wasserzeichen einzufügen, muss die Datei, die als Wasserzeichen dienen soll, im PDF-Format vorliegen (idealerweise im gleichen Format wie das Zieldokument). Wenn die Wasserzeichen-Datei nicht im gleichen Format vorliegt, skaliert sie pdftk. Mit dem folgenden Befehl wird die Datei wasserzeichen.pdf als Wasserzeichen in die Datei beispiel.pdf eingefügt und die so produzierte Datei als dokument.pdf ausgeben:
pdftk beispiel.pdf background wasserzeichen.pdf output dokument.pdf
Mit der Option multistamp
wird ein Dokument stamp.pdf mehrfach auf ein Dokument input.pdf gestempelt. Die beiden Dateien müssen dabei nicht die gleiche Seitenzahl haben: wenn stamp.pdf länger ist als input.pdf, so werden "überzählige" Seiten von stamp.pdf ignoriert; sollte stamp.pdf kürzer sein als input.pdf, so wird die letzte Seite von stamp.pdf so oft wiederholt, bis das Ende von input.pdf erreicht ist.
Mit dem folgenden Befehl wird das Dokument brieftext.pdf mit dem 2-seitigen Briefpapier briefpapier.pdf - bestehend aus Briefbogen und abweichender Folgeseite - "gestempelt" und als brief.pdf ausgegeben. Das Ergebnis ist ein Brief dessen erste Seite auf dem Briefbogen gedruckt ist und die Seiten 2 ff. -falls vorhanden- auf der Folgeseite.
pdftk brieftext.pdf multistamp briefpapier.pdf output brief.pdf
Pdftk Examples – Beispiele
Deutsche Übersetzung der pdftk-Hilfe – Übersicht der Funktionen und Anleitungen
How To Manipulate PDFs with PDF Chain (Linux) – Blogbeitrag 04/2011
Kurztipp: Bastelstunde mit Pdftk – Artikel freiesMagazin 03/2009
PDFs ausgereizt – Artikel LinuxUser, 08/2005
PDF Übersichtsartikel
Diese Revision wurde am 23. Februar 2017 01:38 von briederle erstellt.