“Mehr als das Gold hat das Blei die Welt verändert und mehr als das Blei in der Flinte das Blei im Setzkasten.”
Georg Christoph Lichtenberg
Für manche Kollegen ist das Textsatzsystem \TeX mit seinem Aufsatz \LaTeX ein Dinosaurier. Dieser Dino ist aber quicklebendig und bietet immer wieder preisgünstige Lösungen für unerwartete Anforderungen.
In diesem Fall geht es um die Versendung von Anmeldebetätigungen für einen Ahnenforschungskongress. Diese Anmeldebestätigungen sollen als PDF Dokument an die Teilnehmer versendet werden. Die PDF Vorlage für die Anmeldebestätigungen wird mit \LaTeX erstellt und später für jeden Teilnehmer mit seinen Anmeldedaten befüllt.
\documentclass[a5paper,landscape,12pt]{scrartcl} % ... \begin{Form} \begin{tabular}{ll} \hline \\*[0.5em] \textbf{Vorname} & \TextField[name=firstname, width=8cm, borderwidth=0,bordersep=4,backgroundcolor={[named]fieldbackground}]{} \\ \\*[0.5em] \textbf{Nachname} & \TextField[name=lastname, width=8cm, borderwidth=0,backgroundcolor={[named]fieldbackground}]{} \\ \\*[0.5em] \textbf{Straße, Hausnummer} & \TextField[name=street, width=8cm, borderwidth=0,backgroundcolor={[named]fieldbackground}]{} \TextField[name=number, width=1.5cm, borderwidth=0,backgroundcolor={[named]fieldbackground}]{} \\ \\*[0.5em] \textbf{PLZ, Ort} & \TextField[name=zip, width=1.5cm, borderwidth=0,backgroundcolor={[named]fieldbackground}]{} \TextField[name=city, width=8cm, borderwidth=0,backgroundcolor={[named]fieldbackground}]{}\\ \\*[0.5em] \hline \end{tabular} \end{Form} % ...
Die hier dargestellte \LaTeX Eingabedatei dient zur Erzeugung des folgenden kleinen PDF Dokumentes. Die \TextField
Befehle stammen aus dem Paket hyperref
und produzieren die Formularfelder. In der Vorschau auf dieser Seite sind die leeren Formularfelder leider farblich nicht zu erkennen.
Damit die Formularfelder gefüllt werden, wird in diesem Beitrag die Bibliothek OpenPDF verwendet. Mit ihr lassen sich neue PDF Dokumente schnell erstellen und bestehende einfach manipulieren.
PdfReader reader = new PdfReader("formular.pdf"); PdfStamper stamper = new PdfStamper(reader, new FileOutputStream("filled_flat.pdf")); stamper.setFormFlattening(true); AcroFields fields = stamp.getAcroFields(); fields.setField("firstname", "Jens"); fields.setField("lastname", "Kaiser"); fields.setField("street", "Schlossallee"); fields.setField("number", "42"); fields.setField("zip", "33613"); fields.setField("city", "Bielefeld"); stamper.close();
Hier wird mit OpenPDF das Formular geöffnet und mit einem PdfStamper
wird dem bestehenden Dokument zusätzlicher Inhalt hinzugefügt. In diesem Fall der Inhalt der Formularfelder. Die Formularfelder haben exakt die Namen, die in den \TextField
Befehlen als name
Parameter angegeben wurden.
Mit dem Befehl stamper.setFormFlattening(true);
wird zusätzlich die zukünftige Bearbeitung der Formularfelder unterbunden. Ohne diese Zeile erhält man ein PDF Dokument mit vorausgefüllten und editierbaren Formularfeldern. Für andere Anwendungsfälle eine interessante Sache, aber in diesem Fall unnötig.
Nachdem der PdfStamper
geschlossen wurde, liegt ein neues PDF Dokument bereit. Dies kann nun versendet oder ausgedruckt werden.