// PDF Server v0.4.0 BETA

PDF Server — HTML zu PDF als Service

License: MIT Platforms: Windows, Linux, macOS, Docker
Selbst gehosteter Go-Microservice, der HTML, CSV und JSON mit Headless Chromium in druckfertige PDFs umwandelt. Keine Cloud, keine seitenbasierten Kosten.
PDF Server Screenshot

Was PDF Server auszeichnet.

HTML & CSS zu PDF

Pixelgenaues PDF-Rendering via Headless Chromium — volle CSS-Unterstützung inkl. Kopf- und Fußzeilen sowie Seitennummerierung.

CSV & JSON Tabellen

JSON-Spalten/Zeilen oder CSV-Daten direkt zu gestalteten Tabellenberichten umwandeln — kein HTML-Templating nötig.

QR-Codes & Barcodes

Native <qr-code>- und <bar-code>-HTML-Tags. Unterstützt EAN-13, Code128, DataMatrix u.v.m. — serverseitig gerendert.

Browser-Pool

Paralleler Chromium-Instanz-Pool für Produktionslasten mit hohem Durchsatz. Bewältigt Spitzen ohne Start-Latenz.

Docker-ready

Einzeilige Bereitstellung mit dem mitgelieferten Dockerfile. Enthält Chromium — keine externen Abhängigkeiten auf dem Host.

Locale-bewusst

Formatiert Datum und Zahlen nach Locale. Go-Templates für dynamische Inhalte. REST-API auf Port 9813.

Ein selbst gehosteter Go-Microservice, der HTML, CSV und JSON-Daten mit Headless Chromium in druckfertige PDFs umwandelt. Deployment via Docker oder systemd — keine Cloud-Abhängigkeit, keine seitenbasierten Kosten.

Was er macht

PDF Server stellt eine performante REST-API auf Port 9813 bereit. Sende HTML, strukturierte JSON-Daten oder eine CSV-Datei — und erhalte ein pixelgenaues PDF zurück. Der Dienst verwaltet intern einen Chromium-Instanz-Pool für hohen Durchsatz und minimale Latenz. Barcodes und QR-Codes werden serverseitig nativ als gestochen scharfe Vektorgrafiken gerendert — ohne externe Bild-Dependencies.

Schnellstart

Docker:

docker run -p 9813:9813 mlc/pdfserver

PDF aus HTML generieren (inkl. QR-Code):

curl -X POST http://localhost:9813/api/v1/pdf/generate \
  -H "Content-Type: application/json" \
  -d '{
    "html": "<h1>Rechnung #1024</h1><p>Zum Verifizieren scannen:</p><qr-code width=\"3.5cm\">https://verify.example.com/1024</qr-code>"
  }' \
  --output rechnung.pdf

PDF aus CSV generieren:

genpdf -csv daten.csv -out bericht.pdf -title "Monatsbericht"

Eigene Komponenten: QR-Codes & Barcodes

PDF Server verarbeitet benutzerdefinierte HTML-Tags direkt serverseitig und wandelt sie vor dem Drucken in Vektor-SVGs um:

QR-Codes (<qr-code>)

QR-Codes können überall im HTML-Dokument platziert werden:

<qr-code width="4cm" foreground="#0d6efd" background="#f8f9fa">https://example.com</qr-code>

Barcodes (<bar-code>)

1D- und 2D-Industriebarcodes mit automatischer Prüfziffernberechnung einbetten:

<bar-code type="ean13" width="6cm" height="2cm" show-text="true">4006381333931</bar-code>
<bar-code type="code128" width="7cm" height="2.2cm">INV-2026-0042</bar-code>
<bar-code type="datamatrix" width="3cm" height="3cm">TEIL-XYZ-9988</bar-code>

Unterstützte Standards & Attribute

Barcode-Typ Beschreibung Standard-Größe
qr / <qr-code> 2D-QR-Code 3cm × 3cm
datamatrix 2D-DataMatrix (quadratischer Industriecode) 256px × 256px
code128 Alphanumerischer Standardbarcode (Logistik/Versand) 6cm × 2cm
ean13 Europäische Artikelnummer (13 Stellen) 6cm × 2cm
ean8 Kompakter Retail-Barcode (8 Stellen) 5cm × 2cm
upca Nordamerikanischer Retail-Barcode (12 Stellen) 6cm × 2cm
code39 Alphanumerischer Industrie-Barcode 6cm × 2cm
itf Interleaved 2 of 5 (Transportverpackung) 6cm × 2cm
  • Attribute: type, width, height, foreground (Farbname/Hex), background, show-text (true/false), class, style.
  • Unterstützte CSS-Einheiten: cm, mm, in, px, pt.

Direkter Barcode-Bild-Endpunkt

Eigenständige Barcode- oder QR-Code-Grafiken direkt abrufen (als SVG oder PNG), ohne ein PDF zu erzeugen:

# QR-Code als SVG laden
curl "http://localhost:9813/api/v1/pdf/barcode?type=qr&data=https://example.com&format=svg" -o qr.svg

# EAN-13-Barcode als PNG mit Klarschriftzeile
curl "http://localhost:9813/api/v1/pdf/barcode?type=ean13&data=4006381333931&text=true&format=png" -o barcode.png

Strukturierte Tabellen & Berichte

Der Endpunkt /api/v1/pdf/table/data erzeugt formatierte Tabellenberichte direkt aus JSON-Spalten und -Zeilen:

  • Integrierte Spaltenformate: currency (z.B. 1.200,50 €), number, percentage, date, datetime, qrcode, barcode-code128, barcode-ean13, barcode-ean8, barcode-datamatrix.
  • Ausrichtung: left, center, right.
  • Tabellen-Styling: striped, bordered, compact, anpassbare Header-Farben.
  • Zeitzonen & Datumskontrolle: IANA-Zeitzonen (z.B. Europe/Berlin, UTC) und Datumsformate flexibel konfigurierbar.

API-Endpunkte

Methode Pfad Beschreibung
POST /api/v1/pdf/generate HTML + CSS + Custom-Tags → PDF
POST /api/v1/pdf/table/data Strukturierte JSON-Daten (mit Barcodes & Formatierung) → Tabellen-PDF
POST /api/v1/pdf/table/csv CSV-Daten → Tabellen-PDF
POST /api/v1/pdf/table/html HTML-Tabellenfragment → Gestaltetes Tabellen-PDF
GET /api/v1/pdf/barcode Direkter Barcode- / QR-Code-Generator (SVG / PNG)
GET /health Status-Check und Chromium-Pool-Metriken

CLI-Tools

  • genpdf — CLI-Tool zur PDF-Erzeugung aus HTML, JSON oder CSV:
    # Strukturiertes JSON mit Barcodes im Querformat erzeugen
    genpdf -json inventar.json -format A4-Landscape -out inventar.pdf
    
    # CSV mit deutschem Locale und Zeitzone umwandeln
    genpdf -csv umsatz.csv -delimiter ";" -locale de-DE -timezone "Europe/Berlin" -out umsatz.pdf
    
    # Zwischen-HTML zur Fehlersuche ausgeben
    genpdf -json daten.json -outhtml debug.html
    
  • pdfctl — Dienststatus und Browser-Pool-Monitoring.
  • setup_browser — Managed Chromium vorab herunterladen (empfohlen unter Windows).

Chromium-Abhängigkeit

PDF Server benötigt Chromium zum Rendern. Die Abhängigkeit wird automatisch aufgelöst — keine manuelle Installation nötig:

  1. System-Browser gefunden — falls Chrome oder Chromium bereits installiert ist, wird dieser direkt genutzt.
  2. Auto-Download — ist kein System-Browser vorhanden, lädt go-rod beim ersten Start automatisch ein kompatibles Chromium (~180 MB) in ein lokales Cache-Verzeichnis herunter.

Unter Windows landet der Cache in %LOCALAPPDATA%\rod\browser\. Einmalig setup_browser.exe ausführen nach dem Entpacken des Archivs, um Chromium vorab zu laden.

Docker-User: Chromium ist bereits im Image enthalten — kein weiterer Schritt nötig.

Unterstützte Plattformen

Plattform Chromium-Bereitstellung
Docker Im Image enthalten
Linux Systempaket (apt install chromium) oder Auto-Download
macOS System-Chrome oder Auto-Download
Windows Auto-Download via go-rod (~180 MB beim ersten Start)