Serie Postscript/PDF-Tools
| Teil 1 | Anzeigen und Konvertieren | LU 08/2009, S. 78 | http://www.linux-community.de/artikel/19014 |
| Teil 2 | Zerlegen und Zusammensetzen | LU 09/2009, S. 82 | http://www.linux-community.de/artikel/17410 |
| Teil 3 | Mehrfachdruck und Poster | LU 10/2009, S. 88 | http://www.linux-community.de/artikel/19376 |
| Teil 4 | Flyer, Booklets und Bücher | LU 11/2009, S. 88 | http://www.linux-community.de/artikel/19481 |
| Teil 5 | Analysieren und Extrahieren | LU 12/2009, S. 88 | http://www.linux-community.de/artikel/19635 |
| Teil 6 | Drehen und Skalieren | LU 01/2010, S. 90 | http://www.linux-community.de/artikel/20046 |
| Teil 7 | Metadaten bearbeiten | LU 02/2010, S. 90 | http://www.linux-community.de/artikel/20357 |
| Teil 8 | Wasserzeichen und Barcodes | LU 03/2010, S. 90 | http://www.linux-community.de/artikel/20558 |
Es fällt alles andere als leicht, zu erkennen, ob ein Dokument echt ist. Daher entwickelt und testet man schon seit Jahrhunderten Verfahren, um für dieses Problem praktikable und möglichst dauerhaft nutzbare Lösungen zu finden. Eine gängige Lösung besteht darin, Dokumente optisch zu kennzeichnen – entweder durch ein im Papier eingebrachtes Wasserzeichen oder – im digitalen Zeitalter – durch einen entsprechenden Aufdruck.
Bei digital erstellten Dokumenten versteht man unter einem Wasserzeichen zusätzliche Informationen, die sich nicht vom restlichen Dokument trennen lassen ([1],[2]). Auf einem Ausdruck auf einfachem, weißen Papier lässt sich ein Wasserzeichen durch ein hellgraues Hintergrundbild simulieren. Dabei überdeckt der tatsächliche Dokumenteninhalt das Zeichen zwar teilweise, überdeckt, es bleibt aber für den Menschen erkennbar.
Automatisiert lassen sich solche Wasserzeichen oder Hintergrundbilder hingegen nur sehr schwer oder gar nicht erkennen und auslesen. Zu diesem Zweck kommen stattdessen Barcodes (von engl. "bar", Balken) zum Einsatz. Eine solche optoelektronisch lesbare Schrift besteht aus einer Folge verschieden breiter, paralleler Striche und Lücken [3]. Sie kodieren Informationen wie eine Rechnungsnummer, die Tracking-ID eines Pakets oder den Preis eines Produkts. Mithilfe eines Lesegerät und der passenden Software kann man den Barcode im Nu wieder entschlüsseln – wie es täglich zigtausend Mal an jeder Supermarktkasse geschieht.
Eine solche Kennzeichnung muss nicht unbedingt nur logistischen Zwecken dienen. Oft kommt sie auch dazu zum Einsatz, Eigentum zu kennzeichnen oder die Urheberschaft mittels einer eigenen Kennung nachzuweisen. Im Bereich der Forschung und Entwicklung ist es üblich, den Entwurfszustand eines Dokuments mittels "Entwurf" oder "Geheim" zu vermerken und auf diesem Weg ein Dokument als noch unfertig oder nicht zur Veröffentlichung freigegeben zu kennzeichnen.
Bei automatisch generierten und nachfolgend versendeten Dokumenten dient die Kennzeichnung meist weniger der Authentizitäts- und Integritätskontrolle als vielmehr dem Nachvollziehen von Datenflüssen und der automatischen Verarbeitung und Referenzierung in Dokumentenmanagement-Systemen ([2],[3]). Das gilt gerade und speziell für den Einsatz von Barcodes.
Möchten Sie Dokumente entsprechend markieren, ist es sinnvoll, die Markierungen bereits bei der Erstellung des Dokuments mit einzubinden. Das gilt gleichermaßen für Hintergrundbilder und Strichcodes. Bei einer nachträglichen Ergänzung müssen Sie dagegen umständlich verschiedene Ebenen übereinanderlegen und zu einer Ausgabedatei zusammenfügen. Am unkompliziertesten erzeugen Sie Dokumente mit einem digitalen "Wasserzeichen" in Form eines Hintergrundbilds in einer Textverarbeitung wie OpenOffice Writer oder Abiword.
Um ein Hintergrundbild festzulegen, wählen Sie in OOo Writer zunächst im Menü den Eintrag Format | Seite aus. Daraufhin öffnet sich ein Fenster wie in Abbildung 1 zu sehen. Im Reiter Hintergrund finden sich alle benötigten Schaltknöpfe.
Zuerst suchen Sie im Feld Als: den Eintrag Grafik aus und fügen dann die gewünschte Bilddatei durch Betätigen des Schalters Auswählen mit Hilfe eines Dateiauswahldialogs hinzu. Unter dem Knopf Auswählen befindet sich der Bereich Art: Hier legen Sie fest, ob OOo Writer das Hintergrundbild an einer festen Position (Position), ganzflächig (Fläche) oder gekachelt (Kachel) einbinden soll.
Das rechts angeordnete Vorschaubild zeigt lediglich das zu integrierende Hintergrundbild, nicht jedoch dessen exakte Anordnung. Die lässt sich erst im Dokument erkennen, nachdem Sie den Dialog mittels OK geschlossen haben. Abbildung 2 zeigt ein Textdokument mit zusätzlicher Entwurfskennung.
Auch Abiword verfügt über die Möglichkeit, ein Hintergrundbild zu setzen. Sie erreichen diese Funktion über den Menüpunkt Format | Hintergrund | Seitengrafik. Anders als OOo Writer skaliert Abiword das Hintergrundbild grundsätzlich auf die gesamte Seitenhöhe, sodass es je nach Vorlage oft verzerrt wirkt (Abbildung 3). Es gibt keine Möglichkeit, diese Skalierung auszuschalten oder selbst einen Faktor dafür festzulegen.
In LaTeX eine Abbildung als Hintergrund zu nutzen, erweist sich als nicht gerade trivial. Die nachfolgend vorgestellte Methode basiert auf einer Idee, die Ingo Klöckl in seinem Buch "LaTeX Tipps & Tricks" [4] vorstellt. Es kommen dabei nur Standardbefehle sowie als einzige Erweiterung das Paket graphicx zum Einsatz.
Den Ausgangspunkt bildet die picture-Umgebung, mit deren Hilfe sich nahezu beliebige Grafik- und Textbefehle platzieren lassen. Die picture-Umgebung bekommt durch die Angabe (0,0) eine Länge und Breite von jeweils 0 pt. Damit wird die Einfügeposition nicht weiter nach rechts verschoben und der nachfolgende Text erscheint optisch auf dem eingebundenen Bild.
Listing 1 zeigt einen Ausschnitt des LaTeX-Quelltexts aus der Dokumentendatei background.tex. In Zeile 7 wird zunächst das benötigte Paket graphicx eingebunden, um Pixelgrafiken im PNG- und JPG-Format verwenden zu können. Durch das Hinzufügen der Option [pdftex] lässt sich der LaTeX-Code mit Pdflatex ohne Umwege nach PDF übersetzen.
\documentclass[10pt]{article}
\usepackage{a4}
\usepackage{german}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{palatino}
\usepackage[pdftex]{graphicx}
\begin{document}
\begin{picture}(0,0)
\put(0,0){\parbox[t][\textheight][c]{\textwidth}
{\centerline{\includegraphics[width=\textwidth]{entwurf.png}}}
}
\end{picture}
(…)
Die Zeilen 11 bis 15 beschreiben die picture-Umgebung mit einer Höhe und Breite von jeweils 0 pt. Darin befindet sich eine Absatzbox (\parbox), die Sie mit dem put-Befehl am Koordinatenursprung platzieren (\put(0,0)). Sie ist nach oben ausgerichtet (Parameter 1 mit dem Wert [t]) und hat eine Höhe entsprechend der Texthöhe des Dokuments (Parameter 2 mit dem Wert [\textheight]). Der Inhalt der Absatzbox erscheint vertikal mittig ausgerichtet (Parameter 3 mit dem Wert [c]).
Zeile 12 legt die Breite der Absatzbox auf die Textbreite fest, die aus der LaTeX-Variable \textwidth entnommen wird. In Zeile 13 bindet das Kommando \includegraphics die Hintergrundgrafik entwurf.png ein. Die Option width=\textwidth legt zudem fest, die Abbildung auf die Textbreite zu skalieren. Der Befehl \centerline richtet die Abbildung horizontal mittig aus. Den Inhalt des LaTeX-File übersetzen Sie mithilfe pdflatex background.tex nach PDF. Die fertige Seite mit Hintergrundbild zeigt Abbildung 4.
Erscheint Ihnen der beschriebene Weg zu kompliziert, haben Sie – wie immer unter LaTeX – weitere Alternativen zur Auswahl. Eine Variante besteht darin, alle Texte und Abbildungen in einer separaten LaTeX-Box unterzubringen und die jeweilige Position dieser Boxen spezifisch festzulegen. Damit lässt sich ähnlich wie in einem DTP-Programm agieren, in dem man einzelne Textkästen festlegt und diese an die gewünschte Stelle auf dem Blatt schiebt. Die Position legen Sie mit dem LaTeX-Kommando \put und der nachfolgenden Angabe der x- und y-Koordinaten fest. In Abbildung 5 legt Zeile 48 die picture-Umgebung fest, in den Zeilen 50 und 54 erfolgt das Ausrichten der nachfolgenden Text- und Grafikboxen.
Strichcodes erzeugen Sie ohne großen Aufwand etwa mit dem Programm Kbarcode aus dem gleichnamigen Paket [5]. Es unterstützt mehr als 20 verschiedene Barcode-Varianten, die sich auch aus dem Programm als Bild exportieren und somit leicht in Dokumente einbinden lassen. Zuerst wählen Sie die Kodierungsart aus und tragen danach den Wert oder Text ein, den der Strichcode abbilden soll. Ein Klick auf Erstellen zeigt den fertigen Barcode an (Abbildung 6).
Fehlt das Häkchen neben der Option Text anzeigen, erzeugt Kbarcode nur der Strichcode ohne den Text zur Überprüfung. Möchten Sie den Barcode noch weiter anpassen, erledigen Sie das über die vier Felder Abschneiden, Rand, Skalierung und Rotation. Letztere erfolgt in 90-Grad-Schritten.
Alternativen zu KBarcode bieten die Anwendung Gnubarcode ([6],[7]) sowie das DTP-Programm Scribus [8], das über einen Generator für Strichcodes verfügt (Abbildung 7). Möchten Sie selbst ein entsprechendes Werkzeug entwickeln, greifen Sie am Besten auf Zint [9] zurück: Die freie Bibliothek enthält Mechanismen zum Generieren von Barcodes. Auf Zint basiert auch ein freier Onlinedienst [10] zum Erzeugen der Strichcodes (Abbildung 8).
Verwenden Sie regelmäßig Strichcodes in Dokumenten, führt früher oder später kein Weg mehr um eine automatisierte Lösung zur deren Erzeugung herum. LaTeX-Enthusiasten kommen dabei mit den beiden Paketen pstricks und pst-barcode[11] voll auf ihre Kosten. Diese Pakete bilden einen festen Bestandteil der TeTeX- und TeX-Live-Distributionen [12], die beispielsweise jeder Veröffentlichung von Debian und Ubuntu beiliegen. Zusätzliche Arbeit in Form von manuellem Nachbearbeiten der installierten TeX-Daten ist nicht erforderlich.
Bei den Pstricks handelt es sich um eine Sammlung von Postscript-basierten TeX-Makros, mit denen Sie graphische Zaubereien umsetzen. Dazu zählen zum Beispiel Farben und Farbverläufe sowie das Abbilden mathematischer Funktionen, Kurven und Datenmengen in exakt unterteilten und bezeichneten Koordinatensystemen. Ein ausführliches Handbuch finden Sie als PDF auf der Webseite des Pstricks-Projekts ([13],[14]).
Sie binden die beiden Pakete Pstricks und Pst-barcode mit dem Kommando \usepackage{paket
} in der Präambel seines LaTeX-Dokuments ein. Wie Sie in den Zeilen 5 und 6 von Listing 2 zu sehen ist, benötigen die Pakete keine weiteren Optionen. Um den Barcode zu erstellen, brauchen Sie eine spezielle Umgebung: eine pspicture-Box aus dem Pstricks-Paket. Diese stutzen Sie mit den beiden nachfolgenden Parametern auf die passende Größe zurecht. Das Kommando \psbarcode schließlich generiert den Strichcode in der Box. Dabei steuern Sie sich das Aussehen des Barcodes mit drei Parametern.
\documentclass[10pt]{article}
\usepackage{a4}
\usepackage[T1]{fontenc}
\usepackage[latin1]{inputenc}
\usepackage{pstricks}
\usepackage{pst-barcode}
\begin{document}
\huge{Rechnung Nr. 201001E15}
\begin{pspicture}(3.5,1.2in)
\psbarcode{201001E15}{includetext}{code39}
\end{pspicture}
(…)
Der erste legt den Inhalt des Codes fest – im Listing eine fiktive Rechnungsnummer 201001E15, die aus ASCII-Zeichen besteht. Der zweite Parameter bestimmt, welche Bestandteile des Strichcodes sichtbar werden. Die Option includetext sorgt für die Ausgabe der ASCII-Zeichen unterhalb des Barcodes. Je nach verwendeter Variante gibt es auch die weiteren Optionen includecheck (Prüfziffer einschalten) und includecheckintext (Prüfziffer als Text darstellen), die Sie innerhalb der beiden geschweiften Klammern und jeweils durch Leerzeichen voneinander getrennt eintragen.
Die Art des Barcodes steuern Sie über den dritten Parameter. Das Beispiel verwendet Code39, in dem sich Ziffern und Buchstaben darstellen lassen. Eine ausführliche Übersicht über die möglichen Strichcode-Art und deren Optionen geben der entsprechende Wikipedia-Eintrag [3] und die ausführliche Dokumentation zu Pst-barcode von Herbert Voß.
Übersetzen Sie das LaTeX-Dokument nun mit latex und dvips nach Postscript, erhalten Sie den Barcode aus Abbildung 9. Mit Pdflatex klappt das Umsetzen dagegen nicht, weil Pdftex nicht mit dem Paket Pstricks umgehen kann. Ähnliche Probleme traten auch mit dvipdf auf – mit dem Ergebnis, dass der Strichcode nicht ins PDF-File übernommen wurde. Wo die Ursache dafür liegt, ist derzeit noch unklar. Der Umweg über latex, dvips und ps2pdf funktioniert jedoch perfekt.
Beim nachträglichen Markieren von PDF-Dateien leistet pdftk gute Dienste. Es kann einzelne PDF-Files als verschiedene Ebenen auffassen und diese dann in der gewünschten Reihenfolge aufeinanderlegen und miteinander verbinden. Das Hinzufügen eines Hintergrundbildes erledigen Sie mit dem Aufruf:
$ pdftk dokument.pdf background hgrund.pdf output outfile.pdf
Er erweitert die Datei dokument.pdf um ein Hintergrundbild, das Pdftk aus dem File hgrund.pdf holt. Das Ergebnis landet im Dokument outfile.pdf (Abbildung 10). Um stattdessen einen Stempel aufzubringen, wandeln Sie den Aufruf folgendermaßen ab:
$ pdftk dokument.pdf stamp stempel.pdf output outfile.pdf
Dabei enthält stempel.pdf den Stempel, den Sie auf dokument.pdf aufbringen wollen. Besteht stempel.pdf aus mehreren Seiten, verwendet Pdftk nur die erste Seite als Vorlage für den Stempel.
Bei beiden Aufrufen gilt es zu beachten, dass die obere (Dokumenten-)Ebene zumindest zum Teil transparent sein muss, da sie sonst die darunterliegende Ebene vollständig überdeckt. Sie können daher nur PDF-Files verwenden, die in der PDF-Version 1.4 oder später vorliegen, da vorher noch keine Transparenzen unterstützt wurden.
PDFs mit Transparenzen lassen sich auch mit der Kombination Inkscape [15], Dia [16] oder Gimp und Convert erzeugen, indem Sie beispielsweise die Zeichnungen zunächst als PNG-File mit Transparenzen exportieren und danach mittels Convert nach PDF umwandeln. Nutzer des PDF/EPS-Grafikprogramms Ipe [17] gehen bisher leer aus, da Ipe nur PDF-Dateien der Version 1.3 erzeugt. Das DTP-Programm Scribus [8] hat zwar keine spezielle Option dafür, unterstützt jedoch bereits einen Datenexport in die PDF-Version 1.5.
Infos
[1] Wasserzeichen (Wikipedia): http://de.wikipedia.org/wiki/Wasserzeichen
[2] Digitales Wasserzeichen (Wikipedia): http://de.wikipedia.org/wiki/Digitales_Wasserzeichen
[3] Barcodes (Wikipedia): http://de.wikipedia.org/wiki/Barcode
[4] LaTeX-Buch: Ingo Klöckl, "LaTeX Tipps & Tricks", dpunkt.verlag 2002, 978-3-89864-145-6, http://www.dpunkt.de/buecher/1750.html
[5] KBarcode: http://www.kbarcode.net
[6] Gnubarcode: http://www.gnu.org/software/barcode/
[7] Gnubarcode (Debian-Paket): http://packages.debian.org/de/lenny/barcode
[8] Scribus: http://www.scribus.net
[9] Zint: http://www.zint.org.uk
[10] Online-Barcode-Generator: http://www.barcode-generator.org/
[11] Pst-barcode (CTAN): http://www.ctan.org/tex-archive/graphics/pstricks/contrib/pst-barcode/
[12] LaTeX-Projekt: http://www.latex-project.org/
[13] Pstricks: http://www.tug.org/PSTricks/main.cgi
[14] Handbuch zu Pstricks: http://mirror.ctan.org/graphics/pstricks/base/doc/pstricks-doc.pdf
[15] Inkscape: http://www.inkscape.org
[16] Dia: http://www.gnome.org/projects/dia
[17] Ipe: http://tclab.kaist.ac.kr/ipe/