PDF Formulare mit LaTeX und OpenPDF

“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.

formular

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.

filled_flat-1

Nachdem der PdfStamper geschlossen wurde, liegt ein neues PDF Dokument bereit. Dies kann nun versendet oder ausgedruckt werden.

Leave a Comment