PDF-Generierung in PHP: Überblick über Bibliotheken und praktische Beispiele
Das Erstellen von PDF-Dokumenten ist eine häufige Aufgabe in der Webentwicklung. Von Rechnungen und Berichten bis hin zu Zertifikaten und Büchern – PDF bleibt ein universelles Format für den Dokumentenaustausch. In PHP gibt es mehrere leistungsstarke Bibliotheken, die es ermöglichen, PDF sowohl aus HTML als auch programmatisch zu generieren. In diesem Artikel betrachten wir vier beliebte Werkzeuge: TCPDF, FPDF, Dompdf und mPDF.
1. FPDF – Leicht und schnell, ein Klassiker
FPDF ist eine der ältesten und einfachsten Bibliotheken. Sie erfordert keine zusätzlichen Erweiterungen (außer GD). Der Hauptvorteil liegt im Minimalismus und der Geschwindigkeit. FPDF arbeitet direkt mit Koordinaten, was eine vollständige Kontrolle über die Positionierung der Elemente ermöglicht.
Beispiel zum Erstellen eines einfachen PDF:
<?phprequire('fpdf.php');
$pdf = new FPDF();$pdf->AddPage();$pdf->SetFont('Arial', 'B', 16);$pdf->Cell(40, 10, 'Hallo Welt!');$pdf->Output();?>Vorteile:
- Sehr kleine Größe (ca. 100 KB)
- Keine externen Abhängigkeiten erforderlich
- UTF-8-Unterstützung über separate Schriftarten
Nachteile:
- Komplexe Arbeit mit HTML
- Eingeschränkte CSS-Unterstützung
2. TCPDF – Leistungsstark und funktionsreich
TCPDF ist eine erweiterte Version von FPDF mit Unterstützung für UTF-8, HTML, CSS, Bilder, QR-Codes, digitale Signaturen und vieles mehr. Es ist die Standardwahl für komplexe Dokumente.
Beispiel mit HTML:
<?phprequire_once('tcpdf/tcpdf.php');
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);$pdf->AddPage();$pdf->writeHTML('<h1>Überschrift</h1><p>Dies ist ein Absatz mit <b>fettem</b> Text.</p>');$pdf->Output('example.pdf', 'I');?>Besonderheiten:
- Vollständige Unicode- und RTL-Unterstützung (Arabisch, Hebräisch)
- Integrierte Schriftarten (DejaVu, FreeSerif)
- Unterstützung für SVG, JavaScript, Formulare
3. Dompdf – Generierung aus HTML/CSS
Dompdf wandelt HTML und CSS in PDF um. Dies ist die ideale Wahl, wenn Sie bereits ein Seitenlayout oder eine Vorlage haben. Dompdf unterstützt die meisten CSS-Eigenschaften, aber nicht alle (z. B. Flexbox und Grid können fehlerhaft funktionieren).
Beispiel:
<?phprequire 'vendor/autoload.php';
use Dompdf\\Dompdf;
$dompdf = new Dompdf();$html = '<h2 style="color:red;">Rote Überschrift</h2><p>Text mit Abständen.</p>';$dompdf->loadHtml($html);$dompdf->setPaper('A4', 'portrait');$dompdf->render();$dompdf->stream("document.pdf");?>Vorteile:
- Einfachheit: Sie schreiben HTML, erhalten PDF
- Gute Unterstützung für Tabellen und Bilder
Nachteile:
- Erfordert PHP 7.1+ und die Erweiterungen mbstring, dom
- Komplexe CSS-Layouts können fehlschlagen
4. mPDF – Hybrider Ansatz
mPDF ist eine Bibliothek, die die Möglichkeiten von TCPDF und Dompdf vereint. Sie arbeitet hervorragend mit HTML und CSS, unterstützt Unicode, Tabellen, Kopf- und Fußzeilen, Wasserzeichen. mPDF eignet sich besonders gut für die Erstellung von Büchern und Zeitschriften.
Beispiel mit CSS:
<?phprequire_once __DIR__ . '/vendor/autoload.php';
$mpdf = new \\Mpdf\\Mpdf();$html = '<div style="border:1px solid #000; padding:10px;">Blockinhalt</div>';$mpdf->WriteHTML($html);$mpdf->Output('output.pdf', 'I');?>Vorteile:
- Hervorragende Unterstützung für CSS 2.1 und teilweise CSS3
- Gute Unterstützung für Tabellen, Kopf- und Fußzeilen, Wasserzeichen
- Unicode-Unterstützung
Nachteile:
- Größerer Speicherverbrauch als FPDF
- Kann bei sehr großen Dokumenten langsamer sein
Fazit: Welche Bibliothek wählen?
Die Wahl hängt von Ihren Anforderungen ab:
- Wenn Sie ein einfaches PDF mit minimalen Abhängigkeiten benötigen – FPDF.
- Wenn Sie komplexe Dokumente mit Unicode, RTL und vielen Funktionen benötigen – TCPDF.
- Wenn Sie PDF aus vorhandenem HTML/CSS generieren möchten – Dompdf.
- Wenn Sie eine leistungsstarke HTML-zu-PDF-Konvertierung mit guter CSS-Unterstützung benötigen – mPDF.
Alle vier Bibliotheken sind Open Source und haben eine aktive Community. Experimentieren Sie mit Beispielen und wählen Sie diejenige, die am besten zu Ihrem Projekt passt!
Auch in der Bibliothek
Autorisierung und Authentifizierung in Go: Pakete und praktische Beispiele
ASIO für C++: Vollständiges Tutorial mit Beispielen
Flyway Java: Vollständige Anleitung mit Beispielen
SMS-Versand mit Swift (iOS/macOS): API der MessageUI-Bibliothek