Es gibt viele Wege auf einem (Web)-Server ein PDF Dokument zu erstellen, eine, die besondere Vorteile hat, möchte ich Euch heute vorstellen.
PDF Dokumente auf dem Server erzeugen
Wenn man „normalerweise“ Dokumente auf dem Server erzeugen will, so etwas wie Rechnungen, Bestellbestätigungen usw. muß man eine PDF-Lib nehmen. Mit deren Hilfe baut ein Programmierer das Dokument aus Einzelteilen zusammen, sprich, jede einzelne Linie, jeden Text und jede Schriftart. Dafür braucht er ewig lang und das bedeutet, es wird teuer.
Da Webseiten von Webentwicklern und Webdesignern gestaltet werden, wäre es doch viel besser, wenn diese Leute die Vorlagen für die Rechnungen in HTML, CSS und Javascript bauen könnten und man nur noch „die Werte“ einsetzt, oder? Genau das geht mit wkhtmltopdf und einigen anderen derartigen Programmen.
WKHTMLTOPDF
wkhtmltopdf hat den Vorteil, daß es in einer Statischen Form benutzt werden kann, ohne das man einen X11-VirtualFramebuffer braucht. Das macht den Einsatz auch auf gemieteten Webaccounts einfach.
Webdesigner können sich via HTML und CSS derart in dem Dokument austoben, wie es ein Programmierer mit der Lib fast nicht könnte und die Sache hat einen Vorteil: Man kann sich die erzeugte HTML Datei im Browser ansehen und bekommt so eine Vorschau ohne das man das PDF wirklich erzeugen und anzeigen müßte. Natürlich gibt es Stolpersteine und kleine Abweichungen vom Wunschzustand, das bleibt nicht aus. So kann man z.B. recht schlecht Seitenzahlen einfügen, außer man erzeugt die Seiten einzeln, bevor Sie ins PDF umgewandelt werden.
Beispiel:
wkhtmltopdf –print-media-type datei1.html datei2.html datei.pdf
–print-media-type gibt hier an, daß die print.css benutzt werden soll. So kann man in der Vorlage CSS fürs Web und für das PDF unterbringen. Dies erlaubt auch den einfachen Einsatz des Templates auf der Seite selbst 😉
Da wkhtmltopdf auch Javascript unterstützt, können auch dynamische PDFs erzeugt werden, die abhängig vom benutzergewählten Inhalt andere Darstellungen haben, ohne das man das großartig in der Webanwendung, die das PDF erzeugt, implementieren müßte. Das hat zur Folge, daß man bei einer geschickten Wahl des Dokumentenaufbaus, nichts an dem z.b. PHP Script machen muß, um neue Inhalte einzubauen.
Im konkreten Fall hatten wir eine SPA (Single Page Application ) gebaut, die dynamisch neue Formularinhalte hinzufügt, und damit hochgradig veränderliche Inhalte verarbeiten mußte. Das ist im PHP dann meistens die Hölle, das wieder zu sortieren, aber in unserem Fall konnten wir leicht die strukturelle Form in ein mehrseitiges PDF-Dokument überführen, ohne das das PHP Script wegen der Komplexität fehleranfällig wird oder etwas über die einzelnen Formularfelder wissen müßte, was über Basisinformationen wie Namen und Typen hinausgeht. Es lohnt sich immer eine gute Idee mal in der Praxis auszuprobieren 😉
Ghostscript
Meine Werbeagentur und ich haben diese Art der PDF Erzeugung neulich für ein Projekt benutzt, bei dem auch noch Bedingungen, für die es bereits fertige PDFs gab, in das finale Dokument eingefügt werden mußten. Dies kann man leicht mit Ghostscript erledigen, indem die einzelnen PDFs zu einem einzigen PDF verbunden werden:
gs -q -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -sOutputFile=final.pdf datei.pdf bedingung1.pdf bedingung2.pdf
Natürlich könnte man die Bedingungen auch gleich als HTML Dokument in das vorher erzeugte PDF einbringen, aber in der Realität kommen solche Dokumente aus irgendwelchen Rechtsabteilungen und die können kein HTML oder CSS, sondern gerade einmal Word. Daher ist es meistens nötig, das in zwei Schritten zu realisieren.