Einleitung: Warum HTML+CSS in PDF eine Herausforderung ist (und wie man sie löst)
Stellen Sie sich vor: Sie entwickeln eine Website mit PHP, und der Kunde bittet: „Mach, dass der Button ‚PDF herunterladen‘ schöne Rechnungen, Berichte oder Zertifikate ausgibt.“ Sie denken: „Kein Problem! Ich nehme eine HTML-Vorlage, füge CSS-Stile hinzu und konvertiere sie in PDF.“ Doch die Realität erweist sich als schwieriger: Schriftarten verschwimmen, Tabellen zerfallen, und die CSS-Eigenschaft flexbox funktioniert nur manchmal.
Auf Stack Overflow hat die Frage „How can I add HTML and CSS into PDF“ tausende Aufrufe gesammelt. Das bedeutet, dass das Problem fast jedem PHP-Entwickler bekannt ist. In diesem Artikel werden wir drei beliebte Bibliotheken untersuchen – Dompdf, TCPDF und mPDF – und zeigen, wie man HTML mit CSS korrekt in PDF unter PHP konvertiert.
Sie erfahren:
- Welche Bibliothek für verschiedene Aufgaben geeignet ist
- Wie man CSS-Stile einbindet (extern, inline, @import)
- Wie man typische Probleme löst: Kyrillisch, Tabellen, Bilder
- Wie man funktionierenden Code zur PDF-Generierung aus HTML schreibt
Warum kann man HTML nicht einfach als PDF speichern?
Browser rendern HTML+CSS hervorragend, aber PDF-Generatoren sind keine Browser. Sie verwenden eigene Rendering-Engines, die nicht alle CSS-Eigenschaften unterstützen. Zum Beispiel:
flexboxundgrid– funktionieren nicht überallborder-radius– wird teilweise unterstützt@media print– kann ignoriert werden- Schriftarten (insbesondere Kyrillisch) – müssen eingebunden werden
Die gute Nachricht: Moderne PHP-Bibliotheken verbessern sich ständig, und mit dem richtigen Ansatz kann man ein PDF erhalten, das fast wie im Browser aussieht.
Überblick über Bibliotheken zur Konvertierung von HTML+CSS in PDF unter PHP
Betrachten wir die drei beliebtesten Werkzeuge. Jedes hat seine Stärken.
1. Dompdf
Vorteile: Leicht, einfach über Composer zu installieren, gute Unterstützung für CSS 2.1 und teilweise CSS3. Ideal für einfache Dokumente wie Rechnungen, Quittungen.
Nachteile: Schwache Unterstützung für komplexe Layouts (flexbox, grid), Probleme mit großen HTML-Mengen.
2. TCPDF
Vorteile: Stabil, leistungsstark, unterstützt Unicode (Kyrillisch), funktioniert ohne externe Bibliotheken. Ideal für komplexe PDF-Dateien mit Diagrammen, QR-Codes, mehrseitigen Tabellen.
Nachteile: Komplexe Syntax, CSS-Stile müssen manuell eingebunden werden, der Code wird umfangreich.
3. mPDF
Vorteile: Beste CSS-Unterstützung (einschließlich @media, float, position), hervorragende Arbeit mit Kyrillisch, Unterstützung für Stile aus externen Dateien. Gilt als „goldener Mittelweg“.
Nachteile: Schwerer als Dompdf, kann bei großen Dokumenten langsam sein.
Empfehlung: Für einen schnellen Start nehmen Sie Dompdf. Für ernsthafte Projekte – mPDF. TCPDF – wenn maximale Flexibilität benötigt wird und Sie bereit sind, mehr Code zu schreiben.
Praktisches Beispiel: PDF-Generierung aus HTML mit Dompdf
Lassen Sie uns echten Code schreiben. Installieren Sie Dompdf über Composer:
composer require dompdf/dompdfErstellen Sie nun ein PHP-Skript, das eine HTML-Vorlage in PDF konvertiert:
<?phprequire_once 'vendor/autoload.php';
use Dompdf\\Dompdf;use Dompdf\\Options;
// Einstellungen$options = new Options();$options->set('defaultFont', 'DejaVu Sans'); // Unterstützung für Kyrillisch$options->set('isRemoteEnabled', true); // Externe Bilder erlauben
$dompdf = new Dompdf($options);
// HTML-Vorlage$html = '<!DOCTYPE html><html><head> <style> body { font-family: DejaVu Sans, sans-serif; } .invoice { width: 100%; max-width: 80