PDF-Generierung in Microservice-Landschaften
Ein Kunde wollte seine Microservice-Landschaft um die Erzeugung und Verteilung von PDF-Dokumenten erweitern – mehrsprachig, ohne aufwändige Deployments und ohne Lizenzfallen.
PDF-Dokumente erzeugen und verteilen – integriert in die bestehende AWS-Systemlandschaft des Kunden.
Ein eigener Microservice erzeugt PDFs aus HTML-Templates mit Thymeleaf, Flying Saucer und OpenPDF und ist per REST angebunden.
Templates und Übersetzungen lassen sich ohne Deployment austauschen – mit lizenzfreien Bausteinen für den kommerziellen Einsatz.
HTML rein, PDF raus
Für die Erzeugung von PDFs aus HTML nutzt das Projekt Flying Saucer. Als PDF-Bibliothek darunter stehen iText 5 oder OpenPDF zur Wahl – die erzeugten Dokumente sind in Größe und Aussehen identisch.
Die Empfehlung fiel auf OpenPDF: Es steht unter der LGPL und lässt sich auch in kommerziellen Umgebungen problemlos einsetzen. Zudem hat das Flying-Saucer-Team die Unterstützung für iText 5 im Mai 2024 eingestellt.
Austauschen ohne Deployment
Ein zentraler Wunsch des Kunden: PDF-Vorlagen und Übersetzungen ändern können, ohne jedes Mal neu auszurollen.
- Ein eigener Microservice übernimmt die PDF-Erzeugung.
- Er ist über REST-Schnittstellen an die bestehende AWS-Systemlandschaft angebunden.
- HTML-Templates und Übersetzungen liegen in einer Datenbank und werden dynamisch geladen.
Die unterschätzte Lizenzfrage
Besondere Aufmerksamkeit braucht die Schriftart, die in die PDFs eingebettet wird – vor allem bei anderen Alphabeten wie Kyrillisch. Beliebte Schriften wie Arial sind lizenzpflichtig und können erhebliche Kosten verursachen.
Die Lösung: die lizenzfreie Schriftfamilie Noto. Sie unterstützt über 800 Sprachen und darf unter der SIL Open Font License frei verteilt werden.
Lauffähig auf GitHub
Ein funktionsfähiger Prototyp liegt öffentlich auf GitHub. Er liefert PDFs synchron aus und lässt sich leicht auf eine asynchrone Verteilung umstellen.
- Java 21
- Kotlin
- Spring Boot
- Spring Data
- Hibernate
- PostgreSQL
- Docker
- Docker Compose
- Testcontainers
- Rest Assured
- JUnit
- Maven
