AA_metal_sykicktb_sxc_988306.jpg

© Sykicktb, sxc.hu

Solide verarbeitet

Werkzeuge für PDF und Postscript (Teil 13)

21.10.2010
Klickprogramme sind beim automatisierten Verarbeiten von PDF-Dokumenten von Nachteil. Stattdessen haben textbasierte Werkzeuge wie PDFrecycle die Nase vorn. Sie sparen Zeit und Nerven.

Viele Unix-Programme zum Verändern von PDF-Dokumenten beherrschen jeweils nur eine spezielle Operation. Um mehrere Dokumente nacheinander in gleicher Art und Weise zu bearbeiten, helfen neben dem gezielten Studium der Handbücher und der Dokumentation auch Programmierkenntnisse, etwas Experimentierfreude und Geduld. Als Werkzeuge benötigen Sie das PDF Toolkit PDFrecycle [1], PDFtk [2], PDFjam [3] sowie Awk und Sed [4] für kleinere Bash-Skripte.

Florian Diesch hat 2009 angefangen PDFrecycle zu entwickeln. Das Python-basierte Konsolenwerkzeug baut auf dem PyPDF-Modul [5] und in Folge auf dem Textsatzsystem LaTeX auf. Bisher steht das Programm nur als Tar-Archiv über EasyInstall [6] bereit. Das macht eine Installation per Hand und insbesondere am Paketmanagement vorbei notwendig.

Neben Python benötigt die Software die Pakete python-pypdf und python-setuptools [7] erforderlich. Distributionsspezifische Pakete für Debian/Ubuntu oder Fedora liegen derzeit nicht vor. PDFrecycle steht als Software im Alpha-Stadium. Das bisherige Ergebnis schaut aber recht viel versprechend aus.

Dieschs Idee besteht darin, die einzelnen Transformationen für die PDF-Dokumente nicht als Parameter in der Kommandozeile zu übergeben, sondern stattdessen in einer Textdatei abzulegen. Diese Textdatei übergeben Sie beim Aufruf an die Software, und diese arbeite sie entsprechend ab.

pdfrecycle -i transformat↩ionen -o basename

Die Steuerdatei enthält einzelne Anweisungen, Statements genannt, mit denen Sie die Transformationen und deren Abfolge bestimmen. Um das Ausgabefile wunschgemäß zu benennen, geben Sie den Namensstamm über -o basename an. Das Suffix pdf ergänzt das Programm automatisch. Die folgenden Beispiele demonstrieren den Einsatz der Software sowie der oben genannten Werkzeuge.

Rotation

Für eine Drehung mit PDFrecycle benötigen Sie die Steuerdatei, in der Sie die Anweisungen ablegen. Den Namen der Datei dürfen Sie frei wählen. Um die Seiten 1 bis 4 des PDF-Dokuments flyer.pdf um 180 Grad zu drehen, schreiben Sie folgende Anweisungen in die Textdatei:

FILE flyer.pdf
ANGLE 180
PAGE 1-4

Anstandslos führt PDFrecycle den Auftrag aus, selbst bei krummen Winkeln. Mit den Seitenzahlen stellt es sich jedoch etwas pingelig an: Falls die Seiten im genannten Dokument nicht existieren, wirft es hemmungslos mit Fehlermeldungen um sich und verweigert trotzig die Arbeit.

Möchten Sie nur Teile des Dokuments in 90-Grad-Schritten drehen, helfen Ihnen die Kommandos PDF90, PDF180 und PDF270 aus dem PDFjam-Paket. Diese rotieren Seiten um die angegebene Gradzahl im Uhrzeigersinn. Für obigen Fall sieht der Aufruf wie folgt aus:

pdf180 --outfile flyer-gedreht.p↩
df flyer.pdf 1-4

Um gleich einen ganzen Stapel PDF-Dokumente zu bearbeiten, akzeptiert PDFrecycle eine Folge von Kommandos in der Textdatei – für jedes PDF-Dokument separat. Es packt jedoch das Ergebnis aller Transformationen in eine einzige Ausgabedatei. Es bleibt daher nur als Ausweg, jedes PDF-Dokument innerhalb einer Schleife einzeln (Listing 1).

Listing 1

for filename in file1.pdf file2.pdf file3.pdf;
do
    desc=$(basename $filename .pdf);
    pdfrecycle -i "$desc.trans" -o "$desc-res"
done

Grundlage bildet eine Liste von PDF-Dokumenten, in Zeile 1 der Einfachheit halber als file1.pdf bis file3.pdf benannt. Zu jedem PDF-Dokument gehört eine Steuerdatei mit den Transformationsbefehlen, hier benannt file1.trans für file1.pdf. Für jedes File aus der Liste bestimmt das Skript zuerst den Namesstamm ohne Suffix (Zeile 3) und speichert diesen in der Variable $desc ab. Danach folgt der Aufruf von PDFrecycle in Zeile 4 mit dem Transformationsfile (Option -i) und dem Namen des Ausgabefiles (Option -o).

Jedes Vorkommen der Variable $desc ersetzt die Bash beim Verarbeiten der Kommandozeile durch den Variableninhalt – hier durch den zuvor gespeicherten Filenamen ohne Erweiterung. Nach dem Ausführen des Skripts liegen im Dateisystem drei neue PDF-Dokumente, benannt file1-res.pdf, file2-res.pdf und file3-res.pdf.

Mit den Werkzeugen PDF90, PDF180 und PDF270 geht das weitaus unkomplizierter. Mit der Option --suffix übergeben Sie die Erweiterung, die Sie an den Namen des gedrehten Files anfügen möchten. Durch die Option --batch und eine nachfolgende Dateiliste wissen die Tools, welche PDF-Dokumente sie drehen möchten:

pdf90 --suffix 'gedreht' --batch↩
 file1.pdf file2.pdf

Seiten entfernen

Erstellen Sie zum Beispiel Dokumente wie Rechnungen mit PDFlatex, dann kommt es beim Einsatz von Tabellen manchmal vor, dass diese durch die unterschiedlichen Zeilenzahlen manchmal etwas größer als der maximal mögliche Seiteninhalt ausfallen. Der automatischen Seitenumbruch von LaTeX verschiebt dann die Tabelle im Dokument auf die nachfolgende Seite.

Im Ergebnis entsteht ein Dokument aus mehreren Seiten, bei dem die Seite vor der Tabelle eventuell leer ist. Das ärgert und erfordert das Löschen der leeren Seite. Das erledigen Sie zum Beispiel mittels PDFtk über folgenden Aufruf:

pdftk inputfile.pdf cat 2-end ou↩
tput outputfile.pdf

Um das Problem des Umbruchs zu vermeiden, wäre es natürlich möglich, die Randeinstellungen im LaTeX-Dokument zu verändern. Falls das nicht geht, zum Beispiel wegen einem fest vorgegebenen Layout, bleibt nur obiger Aufruf oder ein intelligentes Shell-Skript, das Ihnen die Arbeit erleichtert.

Nachfolgende Kombination aus den zwei Shell-Skripten pdfpages.sh (Listing 2) und pdfcompact.sh (Listing 3) nimmt Ihnen die Arbeit ab. Das erste ermittelt zunächst die Anzahl der Seiten im PDF-Dokument, und das zweite entfernt danach zielsicher die unerwünschte Seite.

Das Ermitteln der Seitenanzahl erfolgt im Skript pdfpages.sh durch den Aufruf von PDFinfo. Das liefert die Seitenanzahl des Dokuments (Zeile 12). Aus dem Ergebnis schneidet Egrep genau die Textzeile heraus, die die Zeichenkombination "Pages:" beinhaltet. Mit dem Standardwerkzeug Awk [8] zerlegen Sie diese Zeile danach in zwei Felder. Als Trennzeichen fungiert dabei der Doppelpunkt, was Sie Awk über die Option -F: mitteilen.

Das zweite Feld beinhaltet die Seitenanzahl und landet mit ' { print $2 } ' auf der Standardausgabe. Der Streameditor (Sed) liest diese über eine Pipe wieder ein und löscht daraus alle vorkommenden Leerzeichen – oder genauer: ersetzt alle Leerzeichen durch nichts.

Dabei kommt eine Musterersetzung durch einen Regulären Ausdruck zum Einsatz. Ausführlichen Lesestoff dazu bietet Jeffrey Friedls exzellentes Buch zum Thema reguläre Ausdrücke. In Zeile 13 gibt das Skript die ermittelte Seitenanzahl aus. Um das Skript zu testen (Abbildung 1), genügt der Aufruf:

./pdfpages.sh test.pdf
Abbildung 1: Mittels eines einfachen Skripts ermitteln Sie die Seitenzahl eines PDF-Dokuments.

Listing 2

#!/bin/bash
pdffile=$1
if [[ -z $pdffile ]]
then
    # ups - keine Parameter?
    echo "Kein PDF-File angegeben."
    echo "Aufruf: pdfpages PDF-file"
    exit 1
fi
pdfpages=`pdfinfo $1 | egrep '^Pages:' | awk -F: ' { print $2 } ' | sed -e 's/ //g'`
echo "Anzahl Seiten: $pdfpages"
exit 0

Listing 3

#!/bin/bash
inputfile=$1
outputfile=$2
updateOriginal=0
if [[ -z $inputfile ]]
then
    # keine Parameter angegeben?
    echo "Zu bearbeitendes PDF-File fehlt."
    echo "Aufruf: pdfcompact.sh input.pdf [output.pdf]"
    exit 1
fi
if [[ -z $outputfile ]]
then
    outputfile="$1.tmp"
    updateOriginal=1
fi
pdfpages=`./pdfpages.sh $1 | awk -F: ' { print $2 } ' | sed -e 's/ //g'`
if [[ $pdfpages -gt "1" ]]
then
    # erste Seite (Leerseite) aus dem PDF löschen
    # und in angegebenem Ausgabefile speichern
    pdftk $1 cat 2-end output $outputfile
fi
if [[ updateOriginal -eq 1 ]]
then
   # kein Ausgabefile benannt - daher Original modifizieren (umbenennen)
   mv $outputfile $1
fi

Nachdem pdfcompact.sh die angegebenen Parameter geprüft hat, ruft es in Zeile 21 unser Skript aus Listing 2 auf. Dieses ermittelt die Seitenanzahl und das Ergebnis landet über eine Pipe bei Awk und Sed. Diese extrahieren die Ziffern aus dem Text. Falls das Auswerten in Zeile 22 ergibt, dass das PDF-Dokument einen Umfang von mehr als einer Seite hat, schneidet das Skript mit PDFtk die erste Seite heraus (Zeile 26 in Listing 3). Der Aufruf des Skripts erfolgt mit diesem Kommando:

./pdfcompact.sh in.pdf out.pdf

Haben Sie ein Ausgabedokument angegeben, bleibt die Eingabedatei unverändert. Falls Sie kein Ausgabefile benennen, modifiziert das Skript die Eingabedatei wunschgemäß.

Das Skript hat jedoch eine wichtige Einschränkung. Es erkennt nicht, ob die erste Seite tatsächlich leer ist. Möglich wäre ein Erkennen mit Hilfe der beiden Werkzeuge PDFtotext und PDFimages. Diese Werkzeuge extrahieren Text und Bilddaten aus PDF-Dokumenten. Liefern beide für die erste Seite keinen Inhalt zurück, ist die Wahrscheinlichkeit recht hoch, dass die Seite tatsächlich leer ist.

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 

Ähnliche Artikel

  • PDFjam in Version 2.00
    PDFjam, eine Skriptsammlung zum Verarbeiten von PDF-Dokumenten, ist in Version 2.00 mit neuen Funktionen und Optionen erhältlich.
  • Seiten-Puzzle
    Im zweiten Teil unserer Serie zu Postscript und PDF geht es Werkzeuge zum Zerlegen und Zusammenfügen von Dokumenten.
  • Mit Pdfpages und Gummi PDF-Dokumente reformatieren
    Mit Pdfpages sagen Sie großvolumigen Dokumenten und exotischen Formaten kinderleicht den Kampf an: Mit wenigen Befehlen erzeugen Sie aus jeder Vorlage die PDF-Datei.
  • Ein Multifunktionsgerät für die Arbeit mit PDF-Dateien
    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.
  • Randständig
    Sie möchten ein PDF drucken, das für ein exotisches Papierformat gedacht oder mit unpassenden Rändern versehen ist? Kein Problem – Pdf90 und Pdfcrop machen es im Nu zur Augenweide.
Kommentare

Infos zur Publikation

LU 11/2014: VIDEOS BEARBEITEN

Digitale Ausgabe: Preis € 4,95
(inkl. 19% MwSt.)

Mit der Zeitschrift LinuxUser sind Sie als Power-User, Shell-Guru oder Administrator im kleinen Unternehmen monatlich auf dem aktuelle Stand in Sachen Linux und Open Source.

Sie sind sich nicht sicher, ob die Themen Ihnen liegen? Im Probeabo erhalten Sie drei Ausgaben zum reduzierten Preis. Einzelhefte, Abonnements sowie digitale Ausgaben erwerben Sie ganz einfach in unserem Online-Shop.

NEU: DIGITALE AUSGABEN FÜR TABLET & SMARTPHONE

HINWEIS ZU PAYPAL: Die Zahlung ist auch ohne eigenes Paypal-Konto ganz einfach per Kreditkarte oder Lastschrift möglich!       

Tipp der Woche

Schnell Multi-Boot-Medien mit MultiCD erstellen
Schnell Multi-Boot-Medien mit MultiCD erstellen
Tim Schürmann, 24.06.2014 12:40, 0 Kommentare

Wer mehrere nützliche Live-Systeme auf eine DVD brennen möchte, kommt mit den Startmedienerstellern der Distributionen nicht besonders weit: Diese ...

Aktuelle Fragen

Artikelsuche
Erwin Ruitenberg, 09.10.2014 07:51, 1 Antworten
Ich habe seit einige Jahre ein Dugisub LinuxUser. Dann weiß ich das irgendwann ein bestimmtes Art...
Windows 8 startet nur mit externer Festplatte
Anne La, 10.09.2014 17:25, 6 Antworten
Hallo Leute, also, ich bin auf folgendes Problem gestoßen: Ich habe Ubuntu 14.04 auf meiner...
Videoüberwachung mit Zoneminder
Heinz Becker, 10.08.2014 17:57, 0 Antworten
Hallo, ich habe den ZONEMINDER erfolgreich installiert. Das Bild erscheint jedoch nicht,...
internes Wlan und USB-Wlan-Srick
Gerhard Blobner, 04.08.2014 15:20, 2 Antworten
Hallo Linux-Forum: ich bin ein neuer Linux-User (ca. 25 Jahre Windows) und bin von WIN 8 auf Mint...
Server antwortet mit falschem Namen
oin notna, 21.07.2014 19:13, 1 Antworten
Hallo liebe Community, Ich habe mit Apache einen Server aufgesetzt. Soweit, so gut. Im Heimnet...