| | Dass man mit den PDF-Funktionen von PHP zeichnen und Texte ausgeben kann, dürfte
bekannt sein und mit etwas Erfahrung leicht von der Hand gehen. Richtig
interessant wird es aber erst mit den erweiterten Fähigkeiten. In diesem
Tutorial soll Ihnen das folgende näher gebracht werden:
- Einbinden von Bildern
- Textausgabe und Pfade
- Erstellen von Bookmarks
- Einfügen von Hyperlinks
Sie sollten ein Grundverständnis für PDF und dessen Erstellung mit den
PHP-Funktionen mitbringen, um dem Tutorial sicher folgen zu können.
Einbinden von Bildern
PDF-Dokumente können wie auch HTML-Dokumente Bilder enthalten. Im Unterschied
zu HTML werden die Bilder jedoch direkt in das Dokument eingebettet und nicht
als externe Datei referenziert. Das hat insbesondere den Vorteil, dass Sie beim
Datenaustausch nur eine Datei übertragen müssen. Am besten Sie schauen sich
einfach mal das folgende Beispiel an.
|
<?php
$fd = fopen("test21.pdf", "w");
$pdfdoc = pdf_open($fd);
pdf_begin_page($pdfdoc, 421, 595);
$pdfimage = pdf_open_image_file($pdfdoc, "jpeg", "dynalogo.jpg");
pdf_place_image($pdfdoc, $pdfimage, 10, 10, 0.6);
pdf_end_page($pdfdoc);
pdf_close($pdfdoc);
fclose($fd);
?>
|
PDF Dokument
|
|
Beispiel 1: Einbinden eines Bildes aus einer Datei.
|
Ein Bild muss zunächst unter Angabe des Formats ('jpeg') und des Dateinamens
mit der pdf_open_image_file() geladen werden. Die Platzierung erfolgt
dann mit der Funktion pdf_place_image(). Bei der Platzierung kann zu
der Position auch noch ein Skalierungsfaktor angegeben werden. In diesem Fall
ist er auf 0.6 gesetzt, da das Bild sonst nicht auf die Seite gepasst hätte.
Neben JPEG können auch die Formate GIF, TIFF und PNG gelesen werden.
Die Zweiteilung der Einbindung eines Bildes hat im übrigen einen guten
Grund. Sie können ein Bild mehrfach verwenden, ohne jedes mal das komplette Bild
in das PDF-Dokument einzubetten. pdf_place_image() schreibt intern
lediglich einen Verweis auf das bereits im Dokument befindliche Bild. Der
Speicherplatzbedarf kann dadurch erheblich reduziert werden.
Machen Sie doch einfach mal folgenden Test. Platzieren Sie das Bild mehrere mal
auf der Seite und vergleichen Sie die Dateigrößen der PDF-Dokumente. Und damit
es nicht ganz so langweilig wird, kommt mit jedem Bild eine weitere Drehung des
Koordinatensystems hinzu. Das folgende Beispiel zeigt wie es geht.
|
<?php
$fd = fopen("test22.pdf", "w");
$pdfdoc = pdf_open($fd);
pdf_begin_page($pdfdoc, 421, 595);
$pdfimage = pdf_open_image_file($pdfdoc, "jpeg", "dynalogo.jpg");
for($i=0; $i<10; $i++) {
pdf_place_image($pdfdoc, $pdfimage, 10, 10, 0.6);
pdf_rotate($pdfdoc, 9);
}
pdf_end_page($pdfdoc);
pdf_close($pdfdoc);
fclose($fd);
?>
|
PDF Dokument
|
|
Beispiel 2: Mehrfachplatzierung eines Bildes mit Rotation.
|
Das Dokument aus dem ersten Beispiel hat eine Größe von 22368 Bytes. Das
Dokument aus dem zweiten Beispiel ist mit 22397 Bytes nur geringfügig größer.
Wie wichtig diese Eigenschaft ist, werden Sie feststellen, wenn Sie das erste
mehrseitige Dokument erstellen, das auf jeder Seite das Firmenlogo als Pixelbild
trägt. Aber es kommt noch besser.
Wenn schon PHP dann richtig! Mit PHP und der GD-Bibliothek lassen sich
Pixelgrafiken erzeugen. Nichts liegt also näher, als diese in einem
PDF-Dokument einzubinden. Die Vorgehensweise ist die gleiche wie im letzten
Beispiel, Sie müssen lediglich das Bild mit pdf_open_memory_image()
laden und können es danach beliebig platzieren. Das Bild kann sobald es mit
pdf_open_memory_image() geladen wurde, wieder aus dem Speicher
entfernt werden.
|
<?php
$fd = fopen("test23.pdf", "w");
$pdfdoc = pdf_open($fd);
pdf_begin_page($pdfdoc, 421, 595);
$image = ImageCreate(100, 100);
$red = ImageColorAllocate ($image, 255, 0, 0);
$blue = ImageColorAllocate ($image, 0, 0, 255);
ImageFilledRectangle($image, 0, 0, 100, 100, $red);
ImageFilledRectangle($image, 20, 20, 80, 80, $blue);
$pdfimage = pdf_open_memory_image($pdfdoc, $image);
ImageDestroy($image);
for($i=0; $i<10; $i++) {
pdf_place_image($pdfdoc, $pdfimage, 10+$i*30, 10+$i*30, 0.6);
}
pdf_end_page($pdfdoc);
pdf_close($pdfdoc);
fclose($fd);
?>
|
PDF Dokument
|
|
Beispiel 3: Einbinden eines Bildes, das mit PHP erzeugt wurde.
|
Für das Bild in diesem Beispiel ist es sicherlich nicht sinnvoll es
mit der GD-Bibliothek zu erstellen, da auch die PDF-Funktionen bei weniger
Speicherbedarf dazu fähig wären und das Ergebnis auch noch besser skalierbar
ist. Sinnvoll kann es aber dann werden, wenn vorliegende Pixelbilder mit der
GD-Bibliothek vor dem Einbetten in das PDF-Dokument modifiziert werden sollen.
|