← Startseite
Success Story · Kotlin · Java · Spring Boot · AWS

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.

Aufgabe

PDF-Dokumente erzeugen und verteilen – integriert in die bestehende AWS-Systemlandschaft des Kunden.

Lösung

Ein eigener Microservice erzeugt PDFs aus HTML-Templates mit Thymeleaf, Flying Saucer und OpenPDF und ist per REST angebunden.

Ergebnis

Templates und Übersetzungen lassen sich ohne Deployment austauschen – mit lizenzfreien Bausteinen für den kommerziellen Einsatz.

Technologie

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.

Integration

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

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.

Prototyp

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
Kontakt

Lassen Sie uns über Ihr Backend sprechen.

Schreiben Sie mir kurz, worum es geht. Ich melde mich persönlich und wir finden heraus, ob und wie ich helfen kann.

Porträt von Christoph Sens
Christoph SensIhr direkter Ansprechpartner