FPDF – PDF via PHP erstellen – PDF Generator

Mit Hilfe der FPDF Bibliothek können PDFs erstellt werden. Auf diese Weise kann man sich quasi seinen eigenen PDF Creator basteln, der z. B. Inhalte von TXT- oder CSV-Dateien in ansprechende PDF-Dokumente umwandelt. ;)
Und so geht’s!
Zuerst lädt man sich die kostenlose Bibliothek (inkl. Documentation, Tutorials, Examples & fpdf.php) herunter. Und dann kann man eigentlich schon beginnen.

Grundlegendes

Damit die PDF-Generierung funktioniert, wird die Datei fpdf.php benötigt (Diese ist im Download enthalten.).

<?php require('fpdf.php'); ?>

Dokumenteigenschaften festlegen

Im ersten Schritt werden die Parameter des PDF-Dokuments festgelegt.
FPDF([string orientation [, string unit [, mixed size]]])

// Anwendung
// FPDF([string orientation [, string unit [, mixed size]]])
FPDF($FPDForientation, $FPDFunit, $FPDFsize)
ORIENTATION Ausrichtung
» [P]ortrait (Hochformat)
» [L]andscape (Querformat)
// Standard: P
UNIT Maßeinheit
» pt (Punkt)
» mm (Millimeter)
» cm (Zentimeter)
» in (Zoll bzw. Inch)
// Standard: mm
SIZE Format
» A3
» A4
» A5
» Letter
» Legal
» Custom: array(X,Y)
// Standard: A4

Beispiele

Im folgenden Beispiel wird ein einseitiges PDF-Dokument erstellt, welches 210 x 105 Millimeter groß ist und im Querformat vorliegt. Mit AddPage() können weitere Seiten hinzugefügt werden, wobei man die Ausrichtung beeinflussen kann.

// Beispiel 1
$pdf = new FPDF('L','mm',array(210,105));
$pdf->Output();

Beim nächsten Beispiel wird ein zweiseitiges PDF-Dokument erstellt, wobei die erste Seite im Querformat (Landscape) und die zweite Seite im Hochformat (Portrait) vorliegt.

// Beispiel 2
$pdf = new FPDF('L','mm',array(210,105));
$pdf->AddPage();
$pdf->AddPage('P');
$pdf->Output();

Beim Quadrat (z. B. 20 x 20 cm) ist es natürlich egal, welche Ausrichtung (L oder P) gewählt wird.
Allerdings muss L oder P gesetzt werden, damit es zu keiner Fehlermeldung kommt.

// Beispiel 3
$pdf = new FPDF('P','cm',array(20,20));
$pdf->Output();

free-pdf-infografik-version-1

Text

SetFont(string family [, string style [, float size]])
Mit SetFont() wird die Schriftart festgelegt.

// Anwendung
// SetFont(string family [, string style [, float size]])
SetFont($fontFamily, $fontStyle, $fontSize)
FAMILY Schriftfamilie
» Standardfont (Courier, Helvetica / Arial, Times, Symbol oder ZapfDingbats)
» eigene Schrift via AddFont()
STYLE Schriftstil
» b (bold / fett)
» i (italic / kursiv)
» u (underline / unterstrichen)
// Standard: regular / normal
SIZE Schriftgröße in Punkt
// Standard: 12

Nachdem man nun die Schriftart festgelegt hat, können die entsprechenden Texte eingefügt werden. Diese werden mit Hilfe von Zellen eingebunden.
Cell(float w [, float h [, string txt [, mixed border [, int ln [, string align [, boolean fill [, mixed link]]]]]]])

Cell( $Width, $Height, $Text, $Border, $Ln, $Align, $Fill, $Link)
WIDTH // Breite der Zelle
HEIGHT // Höhe der Zelle
TEXT // Text
BORDER // Rahmen der Zelle
» 0 (ohne Rahmen)
» 1 (mit Rahmen)
» array(T, R, B, L) (benutzerdefinierter Rahmen)
// Standard: 0
LN // Zeilenumbruch
Diese Angabe beeinflusst das Verhalten der nachfolgenden Zelle.
» 0 ... Die nächste Zelle wird gleich dahinter / rechts daneben abgebildet.
» 1 ... Die nächste Zelle wird auf der nächsten Zeile ausgegeben.
» 2 ... Die nächste Zelle wird linksbündig unter der vorherigen Zelle angeordnet.
// Standard: 0
ALIGN // Ausrichtung
» L (left)
» C (center)
» R (right)
// Standard: L
FILL // Hintergrund
» true (mit Hintergrund)
» false (ohne Hintergrund)
// Standard: false
LINK // Verlinkung
Auf diese Weise kann die Zelle verlinkt werden.

Cell() – Beispiele zur Verdeutlichung der Funktionsweise von Zeilenumbrüchen

Die folgenden Beispiele sollen zeigen, welche Auswirkungen der Wert von $Ln (vgl. oben) auf die Anordnung der einzelnen Zellen hat.
Um den Code entsprechend kurz zu halten, werde ich nur den Zahlenwert von $Ln in der entsprechenden Farbe und Reihenfolge darstellen.

0     0     0     0

fpdf-cell-line-break-example-01   fpdf-cell-line-break-example-01-1

1     1     1     0

fpdf-cell-line-break-example-02   fpdf-cell-line-break-example-02-1

0     1     0     0

fpdf-cell-line-break-example-03   fpdf-cell-line-break-example-03-1

0     2     0     0

fpdf-cell-line-break-example-04   fpdf-cell-line-break-example-04-1

0     2     2     0

fpdf-cell-line-break-example-05   fpdf-cell-line-break-example-05-1

0     0     2     0

fpdf-cell-line-break-example-06   fpdf-cell-line-break-example-06-1

0     2     1     0

fpdf-cell-line-break-example-07   fpdf-cell-line-break-example-07-1
Nach abschließender Betrachtung der Grafiken könnte man festlegen, dass:
0 = dahinter*
1 = nächste Zeile*
2 = darunter*
* Positionierung der nachfolgenden Zelle

Zeichnen

Weitere Informationen folgen.

Farben und Füllungen

Weitere Informationen folgen.

Beenden & Speichern

string Output([string name, string dest])

// Anwendung
// string Output([string name, string dest])
string Output($outputName, $outputDest)
NAME Dateiname
// Standard: doc.pdf
DESTINATION  Art der Ausgabe
» I (im Browser)
» D (im Browser als Download)
» F (als Datei unter dem angegebenen Namen)
» S (als String)
// Standard: I

Beispiele

Beispiel 1 spiegelt die Standardausgabe im Browser wieder.

// Beispiel 1
$pdf->Output();

Im zweiten Beispiel wird die generierte PDF als Datei abgelegt, wobei mit Hilfe des Dateinamens auch gleich der entsprechende Speicherort festgelegt werden kann.
In diesem Fall wird die Datei im übergeordneten Ordner abgelegt.
Damit der User oder man selbst auch gleich Zugriff auf die generierte Datei hat, könnte man auch noch einen Link zur erstellten PDF einbinden (vgl. Beispiel 3).
Zusätzlich könnte man die Dateinamen flexibel gestalten – z. B. via Zeitstempel.

// Beispiel 2
$pdf->Output('../custom-pdf-document.pdf','F');
// Beispiel 3
$timestamp = time();
$pdf->Output('../'.$timestamp.'.pdf','F');
<a href="../<?= $timestamp ?>.pdf" target="_blank">&#187; PDF anschauen</a>

Quelle: http://fpdf.org/

Schreibe einen Kommentar

* Pflichtfelder