Sie sind hier : sebastian1012.bplaced.net/ homepage-neu / Themen-Blog1 / empfehlung-dompdf.php

Empfehlung: dompdf

Neulich stand das Thema „Rechnungsgenerierung per PDF“ auf der Agenda. Da ich im PDF-Business noch ein unbeschriebenes Blatt war, stand erstmal etwas Recherche an. Zuerst habe ich mir FPDF angeschaut. Ganz ordentliche Dokumentation und soweit auch sehr flexibel, die Tutorials sind ein guter Einstieg. Allerdings ist die aktuellste Version vom Juni 2011, FPDF wird nicht mehr weiterentwickelt.

Danach war der Platzhirsch dran: TCPDF. Aktive Weiterentwicklung und extrem mächtig. Die Beispiele zeigen schon, dass mit TCPDF wohl alles möglich ist. Und dennoch, ich hab‘ recht schnell schlechte Laune dabei bekommen:

$pdf->MultiCell(0, 0, $text, 1, 'L', 0, 0, '', '', true);

Ehm, ja. Hat sicher alles seine Daseinsberechtigung und ist bestimmt sehr durchdacht – mir war es aber für ein kleineres Projekt zu viel des Guten. Generell schleppen alle PDF-Funktionen einen riesigen Berg an Parametern mit sich rum, TCPDF wirkt als wäre es unkontrolliert gewachsen. Nichtsdestotrotz, eine ganz ordentliche Unterstützung von HTML ist mit dabei – siehe dieses Beispiel mit Code dazu.

Enter dompdf

Nächster Kandidat auf der Agenda war das ebenfalls aktiv weiterentwickelte dompdf, welches komplett auf die Verwendung von HTML und CSS für die PDF-Generierung setzt. Naturgemäß ist die Verwendung von HTML im Print-Bereich schwierig: korrekt platzierte Seitenumbrüche seien etwa genannt. Trotz dessen: dompdf hat mich vom Fleck weg überzeugt. Quasi vollständige CSS 2 Unterstüzung sorgt für sauberen Code – die grässlichen cellpadding = … width = … – Tabellen wie man sie unter TCPDF gewohnt ist sind obsolet. Zu den Beispielen gehts hier lang.

Ein paar Sahnestückchen noch: Absolute Positionierung klappt wunderbar. Das ist für Header und Footer-Elemente von besonderer Bedeutung. Auch die Verwendung von padding und margin fühlt sich an wie im Browser, insgesamt macht die Library einen sexy Eindruck. Abschließend noch ein kleines Beispiel:

require_once("dompdf/dompdf_config.inc.php");
               
$html =
'<!doctype html><html><head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<style>
    #title { font-size: 35px; }
    #footer { position: absolute; bottom: -10px; font-size: 10px; }
</style>
</head>
<body>
<h2 id="title">Rechnung / Lieferschein Nr. 12/330 vom 28.06.2012</h2>

<table id="order">
   ...
</table>

<div id="footer">
    XYZ GmbH, Geschäftsführer: Manfred Mustermann. Handelsregistergericht HRB Nr. 1234 · Ust-IdNr. DE 1234567 · St-Nr. 7654321<br />
</div>
</body>
</html>';
 
$dompdf = new DOMPDF();
$dompdf->load_html($html);
$dompdf->set_paper("a4", 'portrait'); 
$dompdf->render();
$dompdf->stream("rechnung.pdf", array("Attachment" => 0));

So hab ich mir das vorgestellt ;). Seitenumbrüche? Auch kein Problem:

<p style="page-break-before: always"> </p> 

Abschließend sei noch das html2pdf Projekt aus Frankreich erwähnt, das einen ähnlichen Ansatz wie dompdf verfolgt. Ausprobiert hab‘ ichs allerdings nicht.