megorei / banan.io

Satz­systeme.

15+ Systeme. 4 Paradigmen. Laser-Drucker, Browser, LaTeX, Typst, Prawn, Chrome, Gotenberg. Die Technologie ist nicht die Frage. Die Frage ist: wer gestaltet die Vorlage?

Das Problem

Zu viele Systeme.
Falsche Frage.

Wer heute ein PDF braucht, wird von Optionen erschlagen. LaTeX. Typst. Chrome headless. WeasyPrint. wkhtmltopdf. Prawn. iText. HexaPDF. Gotenberg. Puppeteer. Pandoc. LibreOffice. PdfLib. Crystal Reports.

Alle können PDFs erzeugen. Die Frage ist nicht welches System technisch am besten ist. Die Frage ist: welches System passt zu deiner Organisation, deinen Skills, deinen Anforderungen?

Wer die Systeme nach Feature-Listen vergleicht, stellt die falsche Frage. Die richtige Frage ist strukturell: wer in deiner Organisation gestaltet die Vorlage?

Die Kernfrage ist nicht technisch.
Sie ist organisatorisch.

Ω
LaTeX / pdflatex
Wissenschaft, Bücher, mathematisch präzise Setzung
T
Typst
Modern, schnell, LaTeX-Alternative mit sanfterer Lernkurve
W
Chrome / WeasyPrint
HTML+CSS → PDF, Webdesigner-freundlich
P
Prawn / iText
Programmatisch, volle Kontrolle, kein Markup
Die 4 Paradigmen

Wie man PDF denkt.

Paradigma Prinzip Vertreter Designerin ist…
Programmatisch PDF-Primitives direkt im Code beschreiben Prawn, iText, HexaPDF, PdfLib Developer
Markup / Satz Deklarative Sprache beschreibt Layout LaTeX, Typst, Troff Developer (technisch)
Browser-Rendering HTML+CSS → Headless Browser → PDF Chrome, wkhtmltopdf, WeasyPrint, Puppeteer, Gotenberg Webdesigner
Template / GUI Visuelle Vorlagen, Merge-Felder LibreOffice, Crystal Reports, Word → PDF Fachbenutzer

Hervorgehoben: Browser-Rendering hat den besten Kompromiss aus Gestaltungsfreiheit und Zugänglichkeit für die meisten Teams.

Das Feld

15+ Systeme in vier Spalten.

Prawn
Programmatisch
LaTeX
Markup
Chrome HL
Browser
LibreOffice
GUI/Template
iText
Programmatisch
Typst
Markup
WeasyPrint
Browser
Word → PDF
GUI/Template
HexaPDF
Programmatisch
Pandoc
Markup → *
Puppeteer
Browser
Crystal Rep.
GUI/Template
PdfLib
Programmatisch
troff / groff
Markup
Gotenberg
Browser / API
InDesign → PDF
GUI/Template
Die eigentliche Frage

Wer gestaltet die Vorlage?

Das ist die Entscheidungs-Achse. Nicht Performance. Nicht Lizenzkosten. Nicht Ökosystem. Alles andere folgt daraus: wer kann diese Vorlage pflegen, wenn sich die Anforderungen ändern?

Developer
Prawn · iText · HexaPDF · PdfLib
Volle Kontrolle. Jede Designänderung = Code-Änderung. Kein Designer-Eingriff möglich.
Dev (technisch)
LaTeX · Typst · Pandoc
Deklarativ. Schneller zu ändern. Aber Syntax-Einstieg nötig. Kein Drag-and-Drop.
Webdesigner
Chrome · WeasyPrint · Gotenberg · Puppeteer
Beste Trennung: Layout in HTML/CSS, Daten kommen per Template. Designer und Developer unabhängig. Breiteste Skill-Basis.
Fachbenutzer
LibreOffice · Word · Crystal Reports
Kein Code. Volle GUI. Aber Versionierung schwierig, Merge-Logik schnell komplex.
Empfehlung

Richtiges System für richtige Aufgabe.

Dynamische Geschäftsdokumente (Rechnungen, Verträge)
→ Chrome / Gotenberg
HTML-Template + Daten-Inject. Designer pflegt Layout, Dev pflegt Logik. Trennung sauber.
Wissenschaftliche Paper, Bücher, Mathe-schwer
→ Typst (neu) oder LaTeX
Typografische Präzision. Formeln. Bibliographie. Kein Browser der zwischen Systemen abweicht.
Vollständige Kontrolle über jedes Pixel
→ Prawn / HexaPDF
Wenn das PDF exakt spezifiziert ist und sich nicht ändert. Kein Overhead, kein Rendering.
Non-Tech-Team soll Vorlage pflegen
→ LibreOffice / Word
Wenn das Team kein HTML kennt und das nie lernen wird. Accept the constraint.
Microservice / API-first in Docker
→ Gotenberg
REST-API vor Chrome headless. Keine lokale Browser-Abhängigkeit. Läuft überall.
Universeller Konverter verschiedener Formate
→ Pandoc
Markdown / DOCX / EPUB → PDF. Wenn das Quelldokument wechselt nicht das Zielsystem.
Wanderung

Die Reise durch
alle Paradigmen.

Wer länger als fünf Jahre PDFs in Produktion erzeugt, kennt mehr als ein System. Nicht weil er unentschlossen ist — weil jede Anforderung ein anderes System optimal macht. Die Reise ist der Lernprozess.

LaTeX — die erste Wahl wenn Qualität über allem steht. Perfekte Typografie, mathematische Präzision, KOMA-Script für Deutsche Dokumente. Die Kosten: TeX-Distribution auf jedem Server, Build-Zeiten, Debugging in LaTeX-Fehlermeldungen die kein Mensch versteht. "Overfull \hbox (3.45pt too wide)" ist kein Stack-Trace den man googeln kann.

Prawn — Ruby-nativ, keine externe Abhängigkeit. Aber: jede Rechnung ist ein Malprogramm. 200 Zeilen Ruby für Logo + Adresse + Tabelle + Summe + Footer. Jede Design-Änderung ist eine Code-Änderung. Kein Designer greift an ohne Dev-Begleitung.

wkhtmltopdf — pragmatischer Mittelweg: HTML/CSS → PDF ohne Chrom-Overhead. Funktioniert. Bis man moderne CSS-Features braucht. Seit 2022 nicht mehr aktiv gepflegt. Mit jedem Jahr steigt der Abstand zur Browser-Realität.

2014 — LATEXSTART
LaTeX + KOMA-Script. Perfekte Qualität. TeX-Distribution auf jedem Server. Debugging-Hölle. Geeignet für Wissenschaft, nicht für schnelle Iteration.
2016 — PRAWN
Ruby-nativ, null Abhängigkeiten. Aber Design = Code. Jede Farbe, jeder Abstand ist eine Variable. Dev-Bottleneck.
2018 — WKHTMLTOPDF
HTML/CSS → PDF. Designer kann mitarbeiten. Kein Chromium-Overhead. Seit 2022: deprecated.
2021 — GOTENBERG
Chrome als Microservice. REST-API, Docker, kein lokaler Browser. Sauber. Eine weitere Abhängigkeit.
2024 — TYPST ← jetzt
Deterministisch, CSS-nah, single binary, schnell. Neue Projekte: erste Wahl.
Die unbequeme Wahrheit

CSS Print —
Chrome lügt.

Die W3C CSS Print Specification definiert wie PDFs aus HTML/CSS erzeugt werden sollen: Seitenumbrüche (page-break-*), Kopf- und Fußzeilen (@page), Fußnoten (float: footnote), Orphans und Widows, Seitengrößen und -ränder.

Chrome implementiert davon ungefähr 60%. Bugs bei komplexen Tabellen-Seitenumbrüchen, Float-Clearance in Print-Kontext, @page-Margin-Boxen, Fußnoten-Support (de facto: null).

Das ist kein Chrome-Problem. Browser sind für Bildschirme optimiert. Print ist ein Nebenprodukt. Für echte Print-Qualität gibt es zwei Systeme die ernst genommen werden:

Prince XML — seit 2004, CSS Print vollständig implementiert. Kommerziell (€3,800 Einmallizenz). Weil Print ihr Kernprodukt ist, nicht ein Browser-Feature. Die Typographie-Qualität ist sichtbar besser bei komplexen Dokumenten.

DocRaptor — Prince als SaaS-API. Per-Document-Pricing. Kein Server, kein Setup, einfach POST mit HTML → PDF zurück.

Chrome für schnelle Geschäftsdokumente: ja.
Chrome für Jahresberichte oder Bücher: nein.

CSS PRINT / BROWSER-SUPPORT
Feature Chrome WeasyPrint Prince
@page Regeln Teilweise Teilweise Vollständig
Seitenumbrüche (Tabellen) Buggy Besser Korrekt
Fußnoten Nein Rudimentär Vollständig
Orphans / Widows Teilweise Teilweise Vollständig
Laufende Kopfzeilen Nein Nein Vollständig
Praxis-Vergleich

Eine Rechnung.
Fünf Systeme.

Standard-Rechnung: Logo, Absenderblock, Empfänger, Rechnungstabelle (Position, Menge, Einzelpreis, Gesamt), Steuerangaben, Footer. Wie viel Code ist das?

PRAWN — ~200 Zeilen Ruby
pdf.bounding_box([40, 780],
  width: 515, height: 60) do
  pdf.image logo_path,
    width: 120
end
# Jede Box, jede Linie,
# jeder Abstand: Code.
Volle Kontrolle. Jede Design-Änderung = Code-Änderung.
TYPST — ~50 Zeilen
#set page(margin: 2cm)
#set text(font: "Helvetica")

= Rechnung #invoice.number

#table(columns:(auto,1fr,auto),
  [Pos],[Beschreibung],[€],
  ..items.map(i => ...)
)
Deterministisch. CSS-nah. Testbar. Agent-freundlich.
CHROME/GOTENBERG — ~40 HTML + 15 API
<style>
@page { margin: 2cm; }
table { width: 100%; }
</style>
<table><tr>...</tr></table>

# POST /forms/chromium/convert/html
Designer-freundlich. CSS-Print-Bugs bei komplexen Tabellen.
CARBONE.IO — ~0 Template-Code
# DOCX-Vorlage in Word bauen
# Felder: {d.name}, {d.total}

curl -X POST \
  https://api.carbone.io/render \
  -d '{"data": {...}}'
Non-Tech-Team baut Vorlage in Word. Developer liefert JSON.
Der unterschätzte Mittelweg

Carbone.io —
Word als Template-Engine.

Das Konzept klingt simpel bis man versteht was es ermöglicht: DOCX-Vorlage mit {{d.variable}}-Platzhaltern + JSON-Daten rein + PDF raus.

Was das bedeutet in der Praxis: Die Fachabteilung baut das Template in Microsoft Word — mit dem Werkzeug das sie kennt. Keine Syntax, kein CSS, keine Deployment-Zyklen. Developer liefert nur die Daten-API. Trennung perfekt.

Wo es nicht funktioniert: wenn das Layout komplex wird, stoßen DOCX-Templates schnell an Grenzen. Bedingte Seiten, dynamische Tabellen mit Verschachtelung, Print-Optionen — da beginnt die Frustration.

Aber für Standard-Rechnungen, Zertifikate, Lieferscheine mit stabiler Struktur: Carbone.io ist die schnellste Lösung für Teams die keinen Entwickler im Layout-Loop haben wollen.

JasperReports / Crystal Reports

Wenn Mensch das Template baut. GUI-First.

Enterprise-Standard für Reporting: GUI-Designer mit Drag-and-Drop, direkte Datenbankanbindung, Reporting-Server der tausende PDFs pro Stunde rendert.

Sachbearbeiter öffnet JasperStudio oder Crystal Reports Designer, zieht Felder auf die Canvas, definiert Aggregationen, speichert Template. Kein Code. Developer liefert nur die Query.

Das ist das Paradigma der Enterprise-Welt: nicht Code als Vorlage, sondern GUI-Template als Vorlage. BIRT, Cognos Report Studio, SAP Crystal Reports — alle dasselbe Paradigma, verschiedene Ökosysteme.

Wo der Preis liegt: die Werkzeuge sind alt, die UX ist komplex, und wer aus dem JasperReports-Ökosystem heraus will, migriert manuell.

Die neue Frage

Agents und Satzsysteme —
wer generiert dann?

Wenn Agenten Compliance-Reports, COA-PDFs, Audit-Protokolle, Behördendokumente generieren: wer gestaltet dann die Vorlage? Und welches System kann ein Agent zuverlässig befüllen?

Prawn: Agent schreibt Ruby-Code der PDFs generiert. Technisch möglich. Aber fragil: kleiner Syntaxfehler → Exception → kein PDF. Agent muss Ruby, Prawn-API und das Layout-Konzept verstehen. Zu viel Kontext.

Chrome/HTML: Agent schreibt HTML. Das kann jedes Modell — HTML ist im Pre-Training. Aber CSS-Print-Bugs können Behördendokumente unbrauchbar machen.

Carbone.io: Agent befüllt DOCX-Template via JSON. Funktioniert wenn Template stabil ist. Für variable Layouts (z.B. unterschiedlich viele Seiten je nach Daten) schnell an Grenzen.

Typst gewinnt im Agentic Context. Warum:

SINGLE BINARY

Kein TeX-Distribution-Overhead, kein Browser, kein Server. Eine Binary, deterministischer Output. Agent ruft typst compile invoice.typ — fertig.

CSS-NAHE SYNTAX

Modelle kennen CSS aus dem Pre-Training. Typst-Syntax ist nah genug, dass ein Agent Typst-Markup zuverlässig schreiben kann — ohne Prawn-API oder LaTeX-Makros zu kennen.

DETERMINISTISCH + TESTBAR

Gleicher Input → gleicher Output. Immer. Template kann gecheckt werden: typst compile --check template.typ. Fehler sind klare Compile-Errors, kein Runtime-Chaos.

CANNABIS-ANWENDUNGSFALL

§26-Compliance-Report als Typst-Template. Daten kommen vom Compliance-Agent (357 CSCs, Mitgliedslisten, Dokument-Fristen). Wöchentlich, automatisch, behörden-konform. Das ist der agentic Satzsystem-Loop.

Spezialfälle

HexaPDF, Prince und
die Spezialisten.

HexaPDF (Ruby)

Das modernste Low-Level PDF-Framework in Ruby. Wenn Prawn nicht reicht: komplexe Formulare, PDF/A-Validierung, digitale Signaturen, Verschlüsselung. Volle PDF-Spezifikation in Ruby. Nicht für Layout-Arbeit — für PDF-Manipulation und -Validierung.

Prince XML

€3,800 Einmallizenz. Kommerziell. Lohnt sich wenn: Bücher, Jahresberichte, Dokumente mit Fußnoten und laufenden Kopfzeilen. CSS Print vollständig implementiert weil das das einzige Produkt ist. Typografische Qualität auf LaTeX-Niveau — aber über CSS gesteuert.

Pandoc

Universeller Konverter: Markdown → PDF (über LaTeX/Typst), DOCX → PDF, HTML → PDF. Wenn das Quelldokument wechselt — Autorin schreibt Markdown, Devops schreibt DOCX, Daten kommen als HTML — aber das Zielformat immer PDF ist. Pandoc mit Typst-Backend ist die modernste Variante.

PDFKit / WeasyPrint

Python-Ökosystem-Vertreter. WeasyPrint implementiert mehr CSS Print als Chrome — weil es sich darauf fokussiert hat. Für Python-lastige Teams oder wenn Chrome-Bugs stören aber kein Prince-Budget vorhanden ist.

Wer gestaltet, entscheidet.

Die Technologiewahl folgt aus der Organisationsfrage. Nicht umgekehrt. Identifiziere wer die Vorlage heute pflegt und wer sie morgen pflegen soll — dann wird klar welches System passt.

megorei — Juni 2026