Bis vor kurzem ging ich noch davon aus, dass es nicht all zu einfach wäre, mit PHP ein PDF zu erstellen. Da lag ich falsch: Mit FPDF existiert schon seit 2001 eine Klasse, um PDFs zu erstellen.
So steht der PDF-Erstellung auf der Website – sei es zur automatischen Erstellung der Rechnung oder Personalisieren von Druckdaten – nichts mehr im Wege.
Im Folgenden ein paar Kniffe für FPDF.
Erste Schritte: Schriften
Was hat man von einem PDF, wenn man nicht die richtigen Schriften verwendet. Da kann man dann auch gleich HTML verwenden.Achtung: Vor allen weiteren Schritten sollte man sicherstellen, alle notwendigen Rechte an den zu konvertierenden/verwendenden Schriften zu besitzen!
Um seine gewünschten Schriften mit FPDF verwenden zu können, muss man diese erst einmal um ein paar notwendige zusätzliche Dateien erweitern.
Die im FPDF-Tutorial beschriebenen Schritte haben ich hier zusammengefasst.
Wir brauchen:
- Eine Schrift-Metrik-Datei .afm
- Eine .php-Datei mit Code-Informationen der Schrift
- Eine .z-Datei, die die komprimierte Schrift enthält
Ausgehend von einer PostScript-Schrift sollten wir die .afm-Datei bereits haben, für die TrueType-Schrift müssen wir sie zuerst erstellen und bei einer OpenType-Schrift musste ich die OpenType-Schrift erst in eine TrueType-Schrift wandeln, um weiter zu kommen (habe mir keinen weiteren Kopf darum gemacht, "nur" eine TrueType-Schrift am Ende raus zu bekommen, da ich hier keine hochwertigen Druckdaten herstellen wollte).
Hier mag der eine oder andere Online-Schriften-Konverter hilfreich sein:
cloudconvert.com, everythingfonts.com, onlinefontconverter.com, etc.
Falls noch nicht vorhanden: .afm-Datei erstellen
Hier hilft das Kommandozeilenprogramm ttf2pt1 weiter, welches man bei Sourceforge herunterladen kann.
# Z.B. lieblingsschrift.ttf => lieblingsschrift.afm
ttf2pt1 -a /pfad/zur/lieblingsschrift.ttf lieblingsschrift
.php und .z erstellen
Im Ordner "tutorial" des FPDF-Downloads befindet sich die Datei makefont.php, in welcher man seine zu konvertierende Schrift einträgt:
require('../makefont/makefont.php');
MakeFont('lieblingsschrift.ttf','cp1252');
?>
Die Schrift-Datei sollte natürlich zusammen mit der .afm-Datei im selben Verzeichnis wie dieses PHP-Skript liegen; dann PHP-Skript im Browser ausführen lassen.
Danach sollten im selben Verzeichnis die benötigten .php und .z Dateien liegen.
Alle für sein Projekt benötigten Schrift-Dateien sammelt man am besten in einem zentralen Schriften-Verzeichnis.
Im PDF-Erstellungs-Skript verweist man per Konstante FPDF_FONTPATH auf dieses Verzeichnis, fügt per AddFont Schriften hinzu und setzt die gerade verwendete Schrift per SetFont.
Beispiel:
define('FPDF_FONTPATH','meine_fonts/');
require('fpdf.php');
$pdf=new FPDF();
// Folgende Schriften sollen im Dokument verwendet werden
$pdf->AddFont('DIN-A-Bold', '', 'din-a-bold.php');
$pdf->AddFont('Zurich-Regular', '', 'zurich.php');
$pdf->AddFont('Zurich-Bold', '', 'zurich-bold.php');
$pdf->AddPage();
$pdf->SetFont('DIN-A-Bold','',35);
$pdf->Cell(0,10,'Eine Schrift');
$pdf->SetFont('Zurich-Regular','',35);
$pdf->Cell(0,30,'Noch eine im Standard-Schnitt');
$pdf->SetFont('Zurich-Regular','',35);
$pdf->Cell(0,50,'...und fett.');
$pdf->Output();
?>
Templates verwenden
Man muss das Rad nicht immer neu erfinden und das PDF nicht unbedingt von Grund auf mit FPDF aufbauen.Dank Template-Funktion erstellt man sein PDF mit allen grundlegenden Elementen im Layout-Programm und fügt dann die variablen Elemente mit FPDF hinzu.
define('FPDF_FONTPATH','fonts/');
require_once('fpdf.php');
require_once('fpdi.php');
require_once('fpdf_tpl.php'); // <-- Wir brauchen hierfür die Template-Klasse
$pdf = new FPDI(); // <-- FPDI statt FPDF
$pdf->AddPage();
$pdf->setSourceFile("template.pdf"); // Vorbereitetes Template laden...
$tplIdx = $pdf->importPage(1); // ...und erste Seite des Templates importieren
$pdf->useTemplate($tplIdx, 10, 10, 100); // Importierte Template-Seite auf unserer aktuellen Seite an Position 0/0 mit 210mm Breite einbauen
// An hier alle weiteren PDF-Elemente zur Seite hinzufügen.
// Zum Beispiel ein rotes "Test"
$pdf->AddFont('Dinot-Regular', '', 'DINOT-Regular.php');
$pdf->SetFont('Dinot-Regular');
$pdf->SetTextColor(255, 0, 0);
$pdf->SetXY(30, 30);
$pdf->Write(0, 'Test');
$pdf->Output();
?>
JavaScript in PDF einbinden
PDFs können JavaScript enthalten und ausführen.Um mit FPDF JavaScript-Code hinzuzufügen, muss man sich den Code von dieser Seite in eine neue Datei kopieren und diese dann in sein PDF-Erstellungs-Skript einbinden.
Zu beachten ist , dass die Zeile
class PDF_JavaScript extends FPDF {
durch
class PDF_JavaScript extends FPDI {
ersetzt werden sollte, wenn man zusätzlich die Template-Klasse verwendet.
Und das neue PDF-Objekt wird dann mit
$pdf = new PDF_JavaScript();initialisiert.
PDF gleich beim Öffnen drucken lassen
Als Beispiel zur JavaScript-Verwendung befindet sich bei oben beschriebener JavaScript-Erweiterung die Möglichkeit, JavaScript-Code in das PDF einzubetten, welcher das PDF-Anzeigeprogramm dazu animiert, den Druck-Dialog zu öffnen.
Eine andere Möglichkeit ohne JavaScript mit nativem PDF-Code habe ich in diesem Artikel beschrieben.
PDF auf Webserver speichern (z.B. für Download) statt direkt an Client zu senden
Den Ansatz hierzu findet man auf der FPDF-Seite im Artikel Memory optimization.
![]() ![]() ![]() ![]() |
|
Erstellt am: 29.02.2016 | .Kommentieren |