ubuntuusers.de

ubuntuusers.deWikipdftk

pdftk

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

Wiki/Icons/terminal.png pdftk {en} (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 {en}.

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.

Installation

pdftk in den offiziellen Paketquellen enthalten. Es muss folgendes Paket installiert [1] werden:

  • pdftk (universe)

Wiki/Vorlagen/Installbutton/button.png mit apturl

Paketliste zum Kopieren:

sudo apt-get install pdftk 

sudo aptitude install pdftk 

Bedienung

Aufruf

pdftk wird im Terminal [2] mit folgendem Befehl aufgerufen:

pdftk EINGABEDATEI OPERATION OPTION output AUSGABEDATEI PASSWORT RECHTEOPTION 

Operationen

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.

Rechteoptionen

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)

Beispiele

Seiten aus einem PDF-Dokument entfernen

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.

Seiten in einem PDF-Dokument vertauschen

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 

PDF-Dokumente zusammenfügen

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 

Hinweis:

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.

PDF-Dokumente zerlegen

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.

PDF-Dokumente drehen

Um 90 Grad drehen

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 

Um 180 Grad drehen

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 

Um 270 Grad drehen

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 

Ausgewählte Seiten eines Dokuments drehen

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.

Metadaten anzeigen und editieren

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 

Metadaten aus multiplen PDFs entfernen

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 {dl} 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.

Verschlüsselung von PDF-Dokumenten

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.

Nutzerrechte ändern

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 

Formulare ausfüllen

Mit Hilfe einer Datei im FDF-Format {de} 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 

Wasserzeichen einfügen

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 

Diese Revision wurde am 14. Januar 2014 15:35 von sigbert erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Büro, Shell, PDF