Dokmatiq DOKMATIQ

HTML zu PDF — ein API-Call, statt Headless-Chrome zu pflegen

Wandle beliebiges HTML (inkl. CSS, Web Fonts, Bilder und Tabellen) in ein sauberes PDF um. Optional auf deinem Briefpapier, optional PDF/A-konform, immer ohne eigenes Browser-Deployment.

Was es macht

Die API nimmt einen HTML-String (oder eine URL) entgegen und liefert ein PDF zurück. Die Rendering-Engine rendert modernes CSS — Flexbox, Grid, Web Fonts, @media print — genauso wie ein aktueller Chromium, nur serverseitig und stateless.

Minimaler Request

curl -X POST https://api.dokmatiq.com/v1/convert/html-to-pdf \
  -H "Authorization: Bearer $DOKMATIQ_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "html": "<!doctype html><html><body><h1>Rechnung 2026-0042</h1><p>Betrag: 960,00 €</p></body></html>",
    "format": "A4",
    "margins": { "top": "20mm", "bottom": "20mm", "left": "20mm", "right": "20mm" }
  }' \
  -o rechnung.pdf

Response: Content-Type: application/pdf, Status 200, Body = fertiges PDF.

Typische Optionen

{
  "html": "...",
  "format": "A4",
  "orientation": "portrait",
  "margins": { "top": "20mm", "bottom": "20mm", "left": "20mm", "right": "20mm" },
  "header": { "html": "<div style=\"font-size:9pt\">Rechnung 2026-0042</div>", "height": "15mm" },
  "footer": { "html": "<div style=\"font-size:9pt\">Seite <span class=\"pageNumber\"></span> von <span class=\"totalPages\"></span></div>", "height": "15mm" },
  "outputProfile": "PDF/A-3b",
  "waitUntil": "networkidle0"
}

Für Briefpapier-Overlay: die passenden Content-Areas im DocGen-Request setzen (stationery-Feld) statt im HTML — so bleibt der HTML-Code frei vom Layout und das Briefpapier ist 1:1 das, was die Grafikagentur geliefert hat.

Input-Grenzen

Grenze
Maximale HTML-Größe25 MB
Maximale Response-Größe200 MB
Timeout bis Render-Fertig60 s
Externe URLs (Bilder, Fonts)folgen https:// und data:
JavaScript-Ausführungopt-in via executeJs: true

Standardmäßig rendert die API ohne JavaScript-Ausführung — deutlich schneller und vorhersehbarer als ein voller Headless-Browser. Wer dynamische Inhalte braucht (Charts, Client-Rendering), aktiviert das per Flag.

Wofür man es einsetzt

  • Rechnungs-PDFs aus Template-Engines wie Liquid, Handlebars, Twig
  • Reports aus Dashboard-Templates, die sowieso als HTML gerendert werden
  • E-Mail-Anhänge (Bestellbestätigung, Versandbenachrichtigung) aus den bestehenden Mail-Templates
  • Geschäftsbriefe auf Firmenbriefpapier, generiert aus CMS-Inhalten
  • Produktdatenblätter, Angebote, Verträge aus strukturierten Daten

Vergleich mit Alternativen

Dokmatiq HTML-zu-PDFEigener Headless-ChromewkhtmltopdfPandoc
Setup-Zeit1 API-CallContainer, Browser, QueueBinary installierenBinary installieren
Moderne CSS (Grid, Flex)jajateilweisevia LaTeX begrenzt
Web Fontsjajajaeingeschränkt
SkalierungAPI-seitigselbst zu lösenselbst zu lösenselbst zu lösen
Briefpapier-Overlayja (via Stationery)selbst bauenneinnein
PDF/A-Outputdirekt per Flagextra Post-Processingextra Post-Processingvia LaTeX
JS-Renderingopt-inimmerneinnein

Die eigene Chrome-Lösung ist fast immer verlockend — bis der erste Pod out-of-memory geht, ein Font-Request hängt oder Chrome ein Breaking-Update bringt. Dann zahlt man die Betriebskosten.

Häufige Stolpersteine

  1. Web Fonts nicht geladenwaitUntil: "networkidle0" erzwingen oder Fonts als data:-URL einbetten
  2. Seitenumbrüche ignoriertpage-break-after: always oder break-after: page (modernes CSS) explizit setzen
  3. Relative URLs — die API sieht nicht, von welcher Domain das HTML kommt; Bilder/Fonts auf absolute URLs umstellen
  4. Header/Footer zu klein — Header- und Footer-HTML rendert in einer kleineren Skala; font-size explizit setzen (mind. 8–9pt)

Direkt ausprobieren

100 Konvertierungen pro Monat kostenlos. Keine Kreditkarte. Stateless REST — du sendest, du bekommst.