| | Einleitung
Wenn Sie sich mal im Internet umschauen, welche Dateiformate verwendet werden,
dann ist PDF neben HTML eines der häufigsten. Die Gründe dafür sind leicht
genannt.
PDF-Dokumente sind auf nahezu allen System lesbar, sie sind in hoher Qualität
druckbar und können von einer großen Anzahl Programme exportiert werden. Es
liegt also nahe auch PHP die Fähigkeit zu geben, PDF zu erzeugen. Nun ist die
Erzeugung von PDF nicht so trivial wie beispielsweise HTML, weshalb PHP auf die
Bibliothek pdflib von Thomas Merz
zurückgreift. Wenn Sie also die Beispiele in diesem Tutorial nachvollziehen
wollen, dann sollten Sie zuvor die aktuelle Version (3.02) der pdflib
installieren. Bei der Installation unter Unix sollten sie nicht vergessen eine
shared library zu erstellen. Dazu muss bei der Konfiguration der pdflib
die Option --enable-shared angegeben werden.
Die Unterstützung in PHP wird wie bei vielen anderen Modulen auch, über eine
Option eingeschaltet. In diesem Fall lautet sie
--with-pdflib=<Verzeichnis in das pdflib installiert wurde>
Bei vielen Distributionen sind die beiden obigen Schritte nicht notwendig,
da sie PHP bereits mit Unterstützung für pdflib ausliefern.
Ein einfaches Dokument
Der Einstieg in die Erzeugung von PDF-Dokumenten mit PHP ist recht einfach.
Das folgende Skript erzeugt bereits ein gültiges PDF-Dokument und schreibt es
in die Datei test1.pdf.
|
<?php
$fd = fopen("test1.pdf", "w");
$pdfdoc = pdf_open($fd);
pdf_begin_page($pdfdoc, 421, 595);
pdf_end_page($pdfdoc);
pdf_close($pdfdoc);
fclose($fd);
?>
|
|
Das Dokument enthält lediglich eine leere DIN A5 Seite. Gestartet wird ein
PDF-Dokument immer mit der Funktion pdf_open(), die in diesem Fall den
Dateizeiger $fd übergeben bekommt. Das führt dazu, dass das Dokument
in einer Datei abgelegt wird. Alternativ könnte das Argument für
pdf_open() auch entfallen, und das Dokument wird im Speicher erzeugt
und seitenweise an die Standardausgabe ausgeben. Die Erzeugung des Dokuments
im Speicher ist insbesondere im Web-Serverbetrieb von Vorteil, weil keine Datei
in das Dateisystem geschrieben werden muss und das Dokument ohne Umwege an den Browser
ausgeliefert wird. Geschlossen wird das Dokument mit pdf_close().
PDF-Dokumente sind wie PostScript-Dokumente seitenorientiert. Bevor also
irgendwelche Ausgaben gemacht werden können, muss eine Seite generiert werden.
pdf_begin_page() erzeugt eine solche neue Seite und bestimmt
gleichzeitig deren Größe in PostScript-Punkten (ein PostScript-Punkt ist der
72ste Teil eines Zolls). Auch Seiten müssen beendet werden, was mit
pdf_end_page() erfolgt. Nach dem Beenden einer Seite sind keinerlei
Veränderung an dieser Seite mehr möglich.
Ausgabe von Text
Das folgende Beispiel ist nur geringfügig komplexer, gibt aber schon
einen Text an vorgegebener Stelle aus. Gleichzeitig wird dies ihr erster
Kontakt mit dem Koordinatensystem einer PDF-Seite sein.
|
<?php
$fd = fopen("test2.pdf", "w");
$pdfdoc = pdf_open($fd);
pdf_begin_page($pdfdoc, 421, 595);
pdf_set_font($pdfdoc, "Times-Roman", 24, "host");
pdf_set_text_pos($pdfdoc, 100, 100);
pdf_show($pdfdoc, "Hallo");
pdf_end_page($pdfdoc);
pdf_close($pdfdoc);
fclose($fd);
?>
|
|
Der Grundaufbau des Skripts wird aus dem ersten Beispiel übernommen,
hinzu kommen lediglich die drei Funktionen zur Auswahl des Zeichensatzes
(pdf_set_font()), zum Setzen der Ausgabeposition
(pdf_set_text_pos()) und die eigentliche Textausgabefunktion
(pdf_show()). Das Ergebnis ist ein Text in Times-Roman mit der Größe
24pt. Der letzte Parameter von pdf_set_font() gibt das Encoding des
Zeichensatzes an. Mit 'host' liegt man in der Regel richtig. Der Ursprung des
PDF-Koordinatensystem liegt in der linken unteren Ecke, der Text erscheint also
jeweils 100 Punkte vom linken und unteren Rand entfernt (100 Punkte sind
100/72*2.54cm=3.528cm).
Geometrische Figuren Sie wollen sicherlich nicht nur Text ausgeben,
sondern auch Zeichnen. Auch das kann PDF, man sollte aber verstehen, dass dies
immer zwei Schritte erfordert. Im ersten Schritt wird ein so genannter Pfad
durch die Zeichenfunktionen erzeugt, im zweiten Schritt wird dieser Pfad
gezeichnet oder anderweitig verwendet. Wir wollen uns zunächst auf das Zeichnen
konzentrieren. Wie wär es mit einer Linie?
|
<?php
$fd = fopen("test3.pdf", "w");
$pdfdoc = pdf_open($fd);
pdf_begin_page($pdfdoc, 421, 595);
pdf_moveto($pdfdoc, 100, 100);
pdf_lineto($pdfdoc, 200, 200);
pdf_stroke($pdfdoc);
pdf_end_page($pdfdoc);
pdf_close($pdfdoc);
fclose($fd);
?>
|
|
Auch hier sind wieder drei Funktionen notwendig. Mit pdf_moveto()
setzen Sie den Ausgangspunkt der Linie. pdf_lineto() fügt eine
Liniensegment dem aktuellen Pfad hinzu und erst pdf_stroke() zeichnet
den aktuellen Pfad, also die Linie. Das mag kompliziert klingen, macht aber
Sinn, wenn Sie die anderen Möglichkeiten mit Pfaden zu arbeiten kennen. So ist
es beispielsweise möglich einen Pfad mit einer Farbe oder einem Muster zu
füllen, auch kann ein Pfad als Begrenzung anderer Bildteile (clipping)
verwendet werden. Pfade werden damit zu einem leistungsfähigen Werkzeuge, und
das nicht nur zum Zeichnen von Linien.
|