Darstellung
18 – PDF, Print & Templates
Reifegrad: 🟢 produktiv · Schicht: src/templates/*.html, src/lib/template-engine.ts, src/lib/fonts.ts, pdf-lib, src/app/api/pdf/*, src/app/api/print/*, src/app/print/*
Zweck
Geschäftsdokumente (Angebot, Auftragsbestätigung, Rapport, Rechnung) als druck-/versandfertige PDFs erzeugen – gebrandet mit Firmenlogo/-farben.
HTML-Templates (src/templates/)
| Datei | Verwendung |
|---|---|
offer-template.html | Angebot (einseitig) |
offer-multi-page.html | Angebot (mehrseitig, viele Positionen) |
order-confirmation-template.html | Auftragsbestätigung |
rapport-template.html | Baustellenrapport |
invoice-template.html | Rechnung (Human-PDF; E-Rechnung siehe 10-rechnungen-e-rechnung) |
- Template-Engine (
src/lib/template-engine.ts): füllt Platzhalter mit Datensatz + Mandanten-Branding (companies.primary_color/logo/footer_text). - Fonts (
src/lib/fonts.ts): eingebettete Schriften für konsistente Darstellung inpdf-lib. - Im Docker-Runner werden die Templates explizit mitkopiert (
COPY src/templates).
Erzeugung
| Endpoint | Dokument |
|---|---|
GET /api/pdf/offers/[id] | Angebots-PDF |
GET /api/pdf/rapport/[id] | Rapport-PDF |
GET /api/pdf/invoices/[id] | Rechnungs-PDF |
GET /api/print/offers/[id] | Druckoptimierte HTML-Ansicht |
- Druckseite
/print/offers/[id]rendert serverseitig (sauberer Druck/„Als PDF speichern"). - Domain liefert PDF-Links (
getOfferPdfLink,getInvoicePdfLink). - Die E-Rechnung nutzt einen eigenen PDF-Pfad (
packages/domain/src/einvoice/human-pdf.ts+ ZUGFeRD-Einbettung), siehe 10-rechnungen-e-rechnung.
Versand
Erzeugte PDFs werden per Microsoft Graph über no-reply@work7.net versendet: sendOffer, sendInvoice, sendRapportEmail (siehe 05-angebote-vertrieb, 09-rapport, 10-rechnungen-e-rechnung). Signierte PDFs (DocuSign) werden als signed_pdf am Datensatz abgelegt (siehe 14-docusign-signing).
Bekannte Befunde / offene Punkte
- Zwei PDF-Erzeugungswege: HTML-Template +
pdf-lib(Standarddokumente) vs. dedizierte E-Rechnungs-Pipeline (CII/ebInterface). Beide korrekt, aber getrennt zu pflegen. - Templates sind statisches HTML (keine Theme-Auswahl pro Mandant über Branding-Farben hinaus).