PDF Dokumente auf dem Server erzeugen

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.

Linux am Dienstag: Programm für den 8.3.2022

Dieses mal in Linux am Dienstag, geht es um PDF Files und wie man die in der Konsole erzeugt und bearbeitet.

Linux am Dienstag: Programm für den 8.3.2022

Unsere Themen ab 19 Uhr sind u.a. :

  • Konsole – Wie man PDF Dateien erzeugt
  • Sicherheit – Kernelbug macht Linux Container unsicher
  • Sicherheit – Alexa per Stimmenkommandos hacken
  • Sport – .. ist einfach nur Körperverletzung
  • Pulseaudio – Mickey Mouse Effekt umgehen

Wie jede Woche per Videokonferenz auf https://meet.cloud-foo.de/Linux .

Kleine Anmerkung: Die bisherigen Vorträge findet man jetzt unter https://linux-am-dienstag.de/archiv/ .

Spammer und Scammer drehen immer mehr ab

Heute morgen hatte ich eine merkwürdige Email im Kasten. Gut, das kommt öfters vor, manche davon haben sogar einen legitimen Inhalt, aber diese hier ist derzeit Platz #2 der Hitliste. Platz #1 ist übrigens die leere Spammail, die an tausend Empfänger ging 🙂

Spammer und Scammer drehen immer mehr ab

Schauen wir uns erstmal die Header an:

From: Orabelle Cadwell <orabellekbdcad@hotmail.com>
Date: Mon, 6 Jul 2020 12:03:20 +0000
Subject:  2017-05-27 00:27:08  csq2qvXHzJr

Keine Ahnung ob da jemand einen Kontakt von vor 3 Jahren wiederbeleben wollte, oder ob er sich dachte, daß Zufallsdaten immer ein Datum sein müssen , aber völlig unsinnig wird erst der Inhalt:

https://fksC6I jO1.arpa ,) $>< https://1fCIjOs6k .arpa ,) $>< https://fk1Osj 6CI.arpa ,) $>< https://1Ojs6fkC I.arpa = 09 ,) $>< https://kIs1O6Cj f.arpa ,) $>< https://OIskC 16jf. arpa ,) $>< https://1OjCI ksf6.arpa ,) $>< https://kIC6f js 1O.arpa ,) $>< https://jIks fC16O.arpa ,) $>< https:/ /s 6OfIj1kC.arpa ,) $>< https://1 O6sjfkIC.arpa ,) $>< h ttps://k1sIOjC f6.arpa ,) $>< https://kO1jfI sC6.arpa ,) $>< https://kjIs1Of 6C.arpa ,) $>< https://sf1kCIj 6O.arpa , ) $>< https://OC sk1I6fj.arpa ,) $>< https://6I jO1sfCk.arpa ,) $>< https://s jIk1C6fO.arpa ,) $>< https://6fksIOj1 C .arpa ,) $>< https://1CkI6O jfs.arpa ,) $>< https://Okjf I1 6sC.arpa ,) $>< https://jfI 1sCk6O.arpa ,) $>< https: //6IjOCf s1k.arpa ,) $>< https://jskIOfC16 .arpa ,) $>< https://skjfO1IC6 .arpa ,) $>< https://ksCI61j fO.arpa ,) $>< https://Cs6Ifk j1O.arpa ,) $>< https://6fO IjCk1s.arpa ,) $>< https://jfC16IO ks.arpa ,) $>< https://CsO 1Ifj6k.arpa ,) $>< https://fCsj1I6O k.arpa ,) $>< https://C6O1sf jk I.arpa ,) $>< https://16C OIkfjs.arpa ,) $>< https://Ijf 6sOk1C .arpa ,) $>< https://s6OCf1jk I.arpa ,) $>< https ://Isjk1O6f C.arpa ,) $>< https://Ij 16COfks.arpa ,) $>< https://1 jsCfIkO6.arpa ,) $>< https://6j O1CIfks.arpa ,) $> < https://6CIkfs j1O.arpa ,) $>

Wenn man mal davon absieht, daß es die .arpa Domain zwar gibt, diese aber ausschließlich für PTR Records, also IP zu Domainnamen Umwandlung, benutzt wird und es somit keine wie auch immer generierten Domain im klassischen Sinne gibt, mußte man den Inhalt erst doppelt von „quoted-printable“ zu „lesbar“  umwandeln, was kein Mailprogramm der Welt macht. Schlußfolgerung: Der Block, der übrigens mehrere KB lang ist, dient nur der Verwirrung der Antispamprogramme.

Jetzt wirds richtig wirr, weil den Block oben gab  es als ASCII-Block, als HTML-Block und als .. tada.. PDF-Block 😀 Da wollte jemand auf Nummer sicher gehen 😉

Ok, ich denke, die Mission isterfüllt: Alle sind verwirrt – Der Verfasser, das Antispamprogramm und die 2.500 Empfänger 😀