// PDF Server v0.4.0 BETA
PDF Server — HTML zu PDF als Service
// Galerie
// Vorteile
Was PDF Server auszeichnet.
Pixelgenaues PDF-Rendering via Headless Chromium — volle CSS-Unterstützung inkl. Kopf- und Fußzeilen sowie Seitennummerierung.
JSON-Spalten/Zeilen oder CSV-Daten direkt zu gestalteten Tabellenberichten umwandeln — kein HTML-Templating nötig.
Native <qr-code>- und <bar-code>-HTML-Tags. Unterstützt EAN-13, Code128, DataMatrix u.v.m. — serverseitig gerendert.
Paralleler Chromium-Instanz-Pool für Produktionslasten mit hohem Durchsatz. Bewältigt Spitzen ohne Start-Latenz.
Einzeilige Bereitstellung mit dem mitgelieferten Dockerfile. Enthält Chromium — keine externen Abhängigkeiten auf dem Host.
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.htmlpdfctl— 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:
- System-Browser gefunden — falls Chrome oder Chromium bereits installiert ist, wird dieser direkt genutzt.
- Auto-Download — ist kein System-Browser vorhanden, lädt
go-rodbeim 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) |