Für das Erzeugen von Pdf-Dokumenten in php gibt es einige Bibliotheken: fpdf, pdflib, mpdf, tfpdf, tcpdf etc. pdflib ist proprietär und fällt hier natürlich raus. mpdf ist eher für das Umwandeln von Html-Code in pdf geeignet und einigermaßen aktuell und gepflegt. tcpdf war eine Zeit das Werkzeug der Wahl, wird aber seit einiger Zeit nicht mehr gepflegt. Viele dieser Bibliotheken basieren selbst auf fpdf, welche zwar nicht wirklich weiterentwickelt wird, aber der Stand scheint zumindest gepflegt zu bleiben. tfpdf kommt aus dem gleichen Hause wie fpdf und könnte die bessere Alternative sein, weil auch UTF-8 direkt unterstützt wird. Wenn es um das einfache Erzeugen von Dokumenten als Seiten mit einfachen Schriftzeilen und Bildern geht, ziehe ich fpdf anderen Lösungen vor. Für anspruchsvollere Dokumentengestaltung wären LaTeX oder LibreOffice besser geeignet.
fpdf installieren Sie am besten in Ihrem Projektverzeichnis mit composer:
composer require setasign/fpdf # alternativ tfpdf ...
Damit liegt im vendor-Verzeichnis die Bibliothek fpdf und muss über autoload importiert werden.
Mit dem folgenden Code lässt sich ein erstes einfaches Pdf erzeugen:
<?php
require_once("vendor/autoload.php");
$pdf = new FPDF();
$pdf->AddPage();
$pdf->SetFont('Arial','',32);
$pdf->SetXY( 10,40);
$pdf->Cell(40,10,"Hello World",0,1);
$pdf->Image("logo.png",10,10,100); //logo.png muss vorhanden sein ...
$pdf->Output();
Nun beginnen aber einige Probleme: fpdf arbeitet noch nicht mit utf-8-Kodierungen. Daher sind Umlaute in Quelltext, wenn er denn in utf-8 gespeichert wurde, problematisch. Das lässt sich noch lösen, allerdings fehlt dann irgendwann das Euro-Zeichen in ISO-8859-1, das es aber in ISO-8859-15 gibt.
Meine Empfehlung: Suchen Sie sich einen freien ttf-Font und kodieren Sie die passende Datei mit dem makefont-Skript, das mit fpdf mitgeliefert wird:
php vendor/setasign/fpdf/makefont/makefont.php /usr/share/fonts/poppins/Poppins-Medium.ttf ISO-8859-15
mv Poppins-Medium.* vendor/setasign/fpdf/font/
Dann müssen Sie natürlich dafür sorgen, dass auch der übergebene Text an Cell und Co entsprechend kodiert ist.
<?php
require_once("vendor/autoload.php");
$pdf = new FPDF();
$pdf->AddFont("Poppins-Medium","","Poppins-Medium.php");
$pdf->AddPage();
$pdf->SetFont('Poppins-Medium','',32);
$msg=@iconv('UTF-8','ISO-8859-15',"Überschrift mit Poppins ß é €");
$pdf->SetXY( 10,40 );
$pdf->Cell(40,10,$msg,0,1);
Das ist alles nicht perfekt, aber zumindest lassen sich so schnell PDFs mit eigenen Schriften, Linien, Kreisen und Images erstellen. Der Rest ist dann Handarbeit.
Wenn der vendor-Ordner direkt im Webverzeichnis liegt, ist es durchaus klug, daran zu denken, dass die Bibliotheken nicht von außen zu erreichen sein sollten. Das lässt sich mit einer .htaccess-Datei im vendor-Ordner anpassen.
Order allow,deny
Deny from all