Zwischen Technologie-Whitepapers, Manuskripten und RPG-Büchern habe ich jeden Tag mit vielen PDFs zu tun. Das PDF-Format ist beliebt, weil es verarbeiteten PostScript-Code enthält. PostScript ist die Muttersprache moderner Druckereien, daher geben Verlage häufig eine digitale Version eines Buchs als PDF heraus, weil sie sowieso Zeit und Mühe investiert haben, um eine Datei für den Druck zu erstellen. Ein PDF ist jedoch nicht als bearbeitbares Format gedacht, und obwohl eine gewisse Rückverarbeitung möglich ist, soll es die letzte Station für digitale Daten sein, bevor sie an den Drucker gesendet werden. Trotzdem müssen Sie manchmal Anpassungen an einer PDF-Datei vornehmen, und eines meiner Lieblingswerkzeuge für diese Aufgabe ist der Befehl pdftk-java.
Weitere Linux-Ressourcen
- Spickzettel für Linux-Befehle
- Spickzettel für fortgeschrittene Linux-Befehle
- Kostenloser Online-Kurs:RHEL Technical Overview
- Spickzettel für Linux-Netzwerke
- SELinux-Spickzettel
- Spickzettel für allgemeine Linux-Befehle
- Was sind Linux-Container?
- Unsere neuesten Linux-Artikel
Installieren Sie pdftk-java unter Linux
Wie der Name schon sagt, pdftk-java
ist in Java geschrieben, daher funktioniert es auf allen gängigen Betriebssystemen, solange Sie Java installiert haben.
Linux- und macOS-Benutzer können Java von AdoptOpenJDK.net installieren. Windows-Benutzer können den Windows-Build von OpenJDK von Red Hat installieren.
So installieren Sie pdftk-java
:
1. Laden Sie die pdftk-all.jar-Version aus ihrem Gitlab-Repository herunter und speichern Sie sie unter ~/.local/bin/
oder an einem anderen Ort in Ihrem Pfad.
2. Öffnen Sie ~/.bashrc
in Ihrem bevorzugten Texteditor und fügen Sie diese Zeile hinzu:
alias pdftk='java -jar $HOME/.local/bin/pdftk-all.jar'
3. Laden Sie Ihre neuen Bash-Einstellungen:
$ source ~/.bashrc
Befehlssyntax
Die Struktur eines gültigen pdftk-java
Der Befehl folgt einem Muster, aber es gibt eine Menge Flexibilität bei dem, was in dem Muster enthalten ist. Die Syntax ist etwas ungewöhnlich, weil sie keine Terminaloptionen im traditionellen Stil verwendet, aber mit etwas Übung ist sie nicht allzu schwer zu merken.
pdftk
:Der Alias zum Aufrufen des Befehls- Eingabedatei:Die PDF-Datei, die Sie ändern möchten
- Aktion:Was Sie mit der Eingabedatei machen möchten
- Ausgabe:Wo Sie Ihre modifizierte PDF-Datei speichern möchten
Der Aktionsteil ist am komplexesten, also beginne ich mit einfachen Aufgaben.
Kombinieren Sie zwei PDF-Dateien zu einer
Es ist nicht ungewöhnlich, dass die Titelseite eines Buchs in einer anderen Anwendung wie Inkscape oder GIMP erstellt wird als der Rest des Buchs, was normalerweise in einer Layoutanwendung wie Scribus oder einer Office-Suite wie LibreOffice erfolgt. Sie könnten die beiden in Ihrer Layoutanwendung kombinieren. Ein guter Desktop-Publisher wie Scribus macht es einfach, auf ein Bild zu verweisen, sodass das Layout automatisch aktualisiert wird, wenn sich das Cover ändert. Es ist jedoch auch möglich, das Cover mit pdftk-java
einem PDF voranzustellen :
$ pdftk cover.pdf body.pdf \
cat \
output book.pdf
In diesem Beispiel ist die Aktion cat
, wie in verketten und wie der Cat-Befehl von Linux verkettet er eine oder mehrere PDF-Dateien zu einem einzigen Datenstrom, und der Datenstrom wird in die Datei geleitet, die output
ist argument spezifiziert.
Seiten aus einem PDF entfernen
Sie können eine Seite nicht direkt aus einer PDF-Datei entfernen, aber Sie können eine neue PDF-Datei erstellen, die nur die Seiten enthält, die Sie behalten möchten.
$ pdftk book.pdf \
cat 1 3-end \
output shorter-book.pdf
In diesem Beispiel werden Seite 1 meiner Buchdatei und alle Seiten von 3 bis zum Ende in einer neuen Datei gespeichert. Die Seite, die ich entfernt habe, ist daher Seite 2.
Teilen Sie ein PDF in separate Dateien auf
Das Aufteilen einer PDF-Datei in viele verschiedene Dateien verwendet ebenfalls den cat
Aktion, und es ist im Prinzip ähnlich wie das Entfernen von Seiten. Sie können ein PDF aufteilen, indem Sie die gewünschten Seiten in eine neue Datei senden:
$ pdftk book.pdf \
cat 1-15 \
output part-1.pdf
$ pdftk book.pdf \
cat 16-42 \
output part-2.pdf
Wenn Sie ein PDF in einseitige Dateien aufteilen müssen, gibt es dafür eine spezielle Aktion namens burst
:
$ pdftk book.pdf burst
$ ls
book.pdf pg_0001.pdf pg_0002.pdf
pg_0003.pdf pg_0004.pdf pg_0005.pdf
[...]
Formulare ausfüllen
Nur wenige würden argumentieren, dass das PDF-Format im Laufe der Jahre nicht aufgebläht wurde, und ein Merkmal, das Sie manchmal in einer PDF-Datei finden, ist ein ausfüllbares Formular. Sie sehen dies in US-Steuerdokumenten, RPG-Charakterblättern, Online-Schularbeitsbüchern und anderen PDF-Dateien, die interaktiv sein sollen. Während die meisten modernen PDF-Viewer, wie Evince von GNOME und Okular von KDE, PDF-Formulare ausfüllen können, können Sie ein PDF-Formular auch mit Hilfe von pdftk-java
ausfüllen .
Zuerst müssen Sie die Formulardaten mit generate_fdf
extrahieren Handlung. Dies extrahiert die IDs der Formularelemente und platziert sie in einer Textdatei.
$ pdftk character-sheet.pdf \
generate_fdf \
output chsheet-form.txt
Ihre Zieldatei (in diesem Beispiel chsheet-form.txt
) enthält die Daten des im PDF enthaltenen Formulars, aber nur die Textteile. Sie können es in jedem Standard-Texteditor wie Atom oder Gedit bearbeiten.
In einem manchmal bewundernswerten und manchmal unangenehmen Einblick in den Arbeitsablauf der Organisation, die das PDF erstellt, werden Sie feststellen, dass einige Formulare eindeutig beschriftet sind, während andere Standardnamen wie „Checkbox_001“ und „Textfield-021“ haben, sodass Sie möglicherweise überqueren müssen -Referenzieren Sie Ihre Textdatei mit Ihrem PDF, aber das kann sich lohnen, wenn Sie ein Skript schreiben, um Formulare automatisch auszufüllen. Jedes Label ist als /T
gekennzeichnet item, und in der folgenden Zeile ist ein Leerzeichen (gekennzeichnet als /V
) zur Texteingabe vorgesehen. Hier ist ein Snippet von einem, das Kontext zu seinen Labels und einige Daten enthält:
/T (CharacterName 2)
/V (Abaddon)
>>
<<
/T (SlotsTotal 24)
/V ()
>>
<<
/T (Hair)
/V (Brown)
>>
<<
/T (AC)
/V (15)
>>
<<
/T (Background)
/V ()
>>
<<
/T (DEXmod )
/V ()
Sobald Sie die Formulardaten eingegeben haben, können Sie Ihre Texteingabe mit der PDF-Struktur mit dem fill_form
kombinieren Aktion:
$ pdftk character-sheet.pdf \
fill_form chsheet-form.txt \
output completed.pdf
Hier ist ein Beispiel des Ergebnisses:
PDF-Änderung leicht gemacht
Wenn Sie mit vielen PDF-Dateien oder PDF-Dateien über Shell-Skripte arbeiten, ist ein Tool wie pdftk-java
ist von unschätzbarem Wert, weil es Sie davon befreit, alles manuell tun zu müssen. Wenn ich aus der Ausgabe von Docbook ein PDF erstelle, ist es ein Makefile, das pdftk-java
aufruft für eine beliebige Anzahl von Aufgaben, sodass ich keine Chance habe, einen Schritt zu vergessen oder den Befehl falsch einzugeben, und ich brauche meine Zeit nicht damit zu verbringen. Es gibt viele andere Gründe, warum Sie pdftk-java
verwenden könnten in Ihren eigenen Workflow und viele andere Dinge pdftk-java
tun können, einschließlich Aktionen wie shuffle
, rotate
, dump_data
, update_info
, und attach_files
. Wenn Sie häufig mit PDF-Dateien zu tun haben, geben Sie pdftk-java
an versuchen.