HTMLWorld - HTML, CSS, JavaScript, PHP, Java, Flash und vieles mehrHTMLWorld:   Home | Impressum |
 

 
 

Anzeige 
 
               Forum
 
 
HTMLWorld » PHP » PHP-Artikel » PDF-Dateien erstellen mit PHP

PHP-Artikel: PDF-Dateien erstellen mit PHP

von Michael Stöckel

Die Unterstützung für das PDF-Format ist im Laufe der Jahre immer weiter verbessert worden. Immer mehr Programme unterstützen das Format, weshalb es nur sinnvoll ist, wenn Daten im Internet in PDF angeboten werden. Bereits fertige Dateien sind aber nicht das Ende der Fahrenstange. PHP bietet eine Erweiterung an, mit deren Hilfe PDF-Dateien dynamisch erstellt werden können.
Dieser Artikel zeigt die wichtigsten Funktionen dieser PHP-Erweiterung auf und erklärt, wie PDF-Dateien erstellt werden können.

Anzeige

Installation der Erweiterung  nach oben

Wenn die Extension nicht Teil der installierten PHP-Distribution ist, muß diese zuerst aus dem Internet heruntergeladen werden. Über die Internetadresse http://pecl.php.net/package/pdflib bekommt man die notwendige Datei.
Nach dem Download muß die DLL-Datei in das ext- oder extensions-Verzeichnis im PHP-Ordner kopiert werden.
Jetzt ist noch ein Eintrag in der DLL-Liste in der php.ini-Datei (Rubrik "Windows Extensions") notwendig. Am Ende der Liste muß die Zeile "extension=php.pdf.dll" eingegeben werden.
Zum Schluß muß der Webserver neu gestartet werden.

Wenn die DLL-Datei bereits vorhanden ist, muß diese evtl. noch freigeschaltet werden. Dazu muß in der php.ini in der Zeile "extension=php.pdf.dll" überprüft werden, ob am Zeilenanfang ein Semikolon angegeben ist. Ist das der Fall, muß dieses entfernt, danach die Datei gespeichert und der Webserver neu gestartet werden.
Danach stehen die Funktionen zur Verfügung.

Die PDFLib Lite-Variante der PDF-Erweiterung  nach oben

Es gibt eine Version der PDF-Erweiterung, die nicht alle Funktionen der "großen" Bibliothek unterstützt. Diese kleine Extension wird als "Lite" bezeichnet und besitzt einen eingeschränkten Funktionsumfang. Zum Beispiel können mit der kleinen Version keine Formulare und keine Tabellen angelegt werden.

Wichtig: In der php.ini-Datei wird in der Liste der Windows Extensions nicht zwischen den möglichen Versionen unterschieden. Eine Möglichkeit, um herauszufinden, um welche Version es sich handelt, ist die Eigenschaften der angelegten PDF-Datei aufzurufen. Im Karteireiter "PDF" wird in der Zeile "PDF Producer" der Name und die Version der Bibliothek angezeigt.

Unterschied zur CPDF-Erweiterung  nach oben

Neben der bekannten PDFLib unterstützt PHP auch die CPDF-Erweiterung, mit der ebenfalls PDF-Dateien erstellt werden können. Allerdings besteht laut PHP-Dokumentation keine wesentlichen Unterschiede zwischen den beiden Erweiterungen.

Hinweis: Die CPDF-Erweiterung ist Teil des PECL-Repository und ab der PHP-Version 5.1.0 nicht mehr standardmäßig enthalten.

Praxisbeispiele zur Erstellung einer pdf-Datei  nach oben

Jedes Element einer pdf-Datei muß im Dokument positioniert werden. Dazu gibt man zwei Koordinaten als Parameter der benötigten Funktionen an. Wenn die Position festgelegt wird, muß man vom linken unteren Eck des Dokumentes ausgehen.

Erzeugen einer Objektinstanz für die pdf-Datei

Als Grundlage für die Arbeit mit PDF-Dateien muss zunächst das passende Objekt erzeugt werden:

$doc = pdf_new();

... anschließend wird das zu schreibende Dokument geöffnet:

pdf_open_file($doc,"test.pdf");

Erstellen eines Inhaltsverzeichnisses (Lesezeichen) für die Datei

Wenn man eine pdf-Datei aufruft, wird unter Umständen auf der linken Seite ein Inhaltsverzeichnis der Datei mit ausgegeben.
Ein dazu notwendiger Eintrag kann mit der folgenden Skriptzeile angelegt werden:

$page1 = pdf_add_bookmark($doc,"Kapitel 1", $x, 1);

Es ist empfehlenswert, jedem Aufruf der Funktion einen Rückgabewert zu geben. Dies ist notwendig, um ein verschachteltes Inhaltsverzeichnis anzulegen. Die pdf-Datei kann so zu einzelnen Kapiteln / Blöcken zusammengefasst werden.
Ein Funktionsaufruf benötigt immer 4 Parameter. Neben der Instanz für die pdf-Datei muß eine Bezeichnung für den Eintrag angegeben werden. Der dritte Parameter legt fest, ob es sich um einen Eintrag innerhalb einer Gruppe bzw. eines Kapitels der pdf-Datei handelt. Wenn es sich bei der betreffenden Seite in der obersten Ebene des Inhaltsverzeichnisses befinden soll, muß an dieser Stelle eine Variable angegeben werden, die sonst nicht im Skript verwendet wird. Eine Fehlermeldung wird nicht angezeigt. Der vierte Parameter, der entweder die Werte 0 oder 1 annehmen kann, gibt an, ob das Inhaltsverzeichnis an dieser Stelle bereits geöffnet sein soll (Wert 1) oder geschlossen bleibt (Wert 0).

Weiteres Beispiel:

$page1 = pdf_add_bookmark($doc,"Kapitel 1", $x, 1);
$page2 = pdf_add_bookmark($doc,"Seite 1.1", $page1, 1);

Die Seite, die als "Seite 1.1" bezeichnet wird, gehört zum Kapitel 1. Deshalb wird in der entsprechenden Zeile der Rückgabewert $page1 anstatt einer willkürlichen Variablen mit angegeben.

Angabe von organisatorischen Informationen zur Datei

Die Angabe dieser Informationen ist optional. Das Dokument wird auch dann erstellt, wenn diese Angaben nicht gemacht werden.

pdf_set_info($doc, "Author", "Michael Stöckel");
// Autor der Datei
pdf_set_info($doc, "Title", "Testdatei");
// Titel des Dokumentes
pdf_set_info($doc, "Subject" , "Artikel");
// Betreff für das Dokument
pdf_set_info($doc, "Creator", "HTMLWorld");
// Weitere Details zum Ersteller

Definition von Schriften

Mit der Funktion pdf_set_parameter können individuelle Schriftarten eingebunden werden. Dabei muß der absolute Pfad zur Schriftdatei mit angegeben werden.

pdf_set_parameter($doc, "FontOutline", 
                  "Arial=C:/WINDOWS/Fonts/arial.ttf"); 
$font1 = PDF_findfont($doc, "Courier", "winansi", 0);
$font2 = PDF_findfont($doc, "Arial", "winansi", 1);

Mit der Funktion pdf_findfont werden die Schriften für das Dokument definiert. Für ein pdf-Dokument können mehrere Schriften definiert werden. Über den Rückgabewert der Definition(en) kann die gewünschte Schriftart jederzeit eingesetzt werden.
Für folgende Schriftarten ist die Funktion pdf_set_parameter nicht notwendig:
Courier, Courier-Bold, Courier-Oblique, Courier-BoldOblique, Helvetica, Helvetica-Bold, Helvetica-Oblique, Helvetica-BoldOblique, Times-Roman, Times-Bold, Times-Italic, Times-BoldItalic, Symbol, ZapfDingbats

Beginn einer Seite im pdf-Dokument

Die Funktion pdf_begin_page eröffnet eine neue Seite. Sie muß zwingend zusammen mit der Funktion pdf_end_page angegeben werden da sonst eine Fehlermeldung erscheint.

pdf_begin_page($doc, 595, 842);

Die beiden Zahlen stellen die Breite und die Höhe des Dokumentes in Pixel da.

Die folgende Tabelle zeigt ein paar übliche Seitengößen und die notwendigen Angaben für die Funktion:

Größe Maße
A0 2380x3368
A1 1684x2380
A2 1190x1684
A3 842x1190
A4 595x842
A5 421x595
A6 297x421
B5 501x709
Letter (8.5"x11") 612x792
Legal (8.5"x14") 612x1008
Ledger (17"x11") 1224x792
11"x17" 792x1224

Einfügen von Textzeilen

Grundsätzlich gilt, dass jede Textzeile im pdf-Dokument separat eingefügt werden muß. Zwei Funktionen sind dazu notwendig:

pdf_setfont($doc, $font1, 20); 
pdf_show_xy($doc, "Test der PDFLib", 10, 500);

Mit der Funktion pdf_setfont wird zum einen die Schriftart und die Schriftgröße festgelegt, mit der der Text dargestellt werden soll.
Die Funktion pdf_show_xy bringt den Text in das eigentliche Dokument. Dazu muß der Text selbst und die Position, an der der Text erscheinen soll, angegeben werden. Der erste Wert gibt die x-Richtung und der zweite Wert die y-Richtung vor.

Mit der Funktion pdf_set_parameter() gibt es zudem die Möglichkeit, die betreffende Textzeile zu unterstreichen. Dazu muß vor und nach der pdf_show_xy-Zeile jeweils eine weitere Skriptzeile eingefügt werden, so dass der Code jetzt so aussieht (Schriftdefinition wird weggelassen):

pdf_set_parameter($doc,'underline','true');
pdf_show_xy($doc, 'Test der PDFLib', 10, 500);
pdf_set_parameter($doc,'underline','false');

Wichtig dabei ist, daß bei der ersten Zeile mit pdf_set_parameter der Parameter "true" mitgegeben wird. Bei der zweiten Zeile muß an der gleichen Stelle "false" eingetragen werden, um das aktuelle Unterstreichen "abschließen" zu können.

Zeichnen einer Linie

Um eine Linie in ein pdf-Dokument zu bekommen, sind immer vier Funktionen notwendig:

pdf_setlinewidth($doc,20);
pdf_moveto($doc, 100, 100);
pdf_lineto($doc, 200, 100);
pdf_stroke($doc);

Mit der Funktion pdf_setlinewidth, die zwingend zuerst angegeben werden muß, kann die Dicke der Linie verändert werden. Mit der Funktion pdf_moveto wird der Startpunkt der Linie festgelegt, mit pdf_lineto der Endpunkt und erst mit der Funktion pdf_stroke wird die Linie tatsächlich gezeichnet.

Einbinden eines Weblinks

Ein Link wird mit der Funktion pdf_add_weblink eingefügt:

pdf_add_weblink($doc, 10, 30, 150, 50, 
                "http://www.html-world.de/");

Die angegebenen Zahlen sind die Koordinaten für die Positionierung des Weblinks.
Sie haben folgende Bedeutung:

1. Zahl: Startposition in x-Richtung
2. Zahl: Startposition in y-Richtung
3. Zahl: Endposition in x-Richtung
4. Zahl: Endposition in y-Richtung

Hinweis: Im pdf-Dokument wird nur ein Kasten angelegt. Wenn man mit der Maus darüber fährt, ändert sich der Cursor und in einem Meldefenster wird das Ziel des Weblinks angezeigt.
Wenn man einen Linktext angeben will, muß man eine Textzeile definieren und diese entsprechend über den Kasten des Weblinks positionieren.

Einbinden eines Bildes

Mit der Funktion pdf_load_image wird die Verwendung des Bildes "vorbereitet". Alle notwendigen Parameter werden festgelegt. Zum einen wird die Instanz für die aktuelle pdf-Datei angegeben und zum anderen der Typ des Bildes. Dabei handelt es sich nicht um den MIME-Type, sondern um eine explizite Angabe, die die PDFLib zur Interpretation braucht. Beispiel:

$pic = pdf_load_image($doc, "jpeg", "bild1a.jpg", "");
pdf_place_image($doc, $pic, 100, 200, .24);
pdf_close_image($doc, $pic);

Folgende Bildtypen werden unterstützt: jpeg, tiff, gif, png

Wie der Name schon sagt, platziert die Funktion pdf_place_image das Bild in der Datei. Die notwendigen Parameter sind die Instanz auf die Datei, die Instanz für das vorher vorbereitete Bild, Position in x-Richtung, Position in y-Richtung und der Wert für die Skalierung des Bildes. Für die Skalierung sind Werte zwischen 0.00 und 1.00 möglich.
Mit pdf_close_image wird die aktuelle Instanz für das Bild wieder geschlossen.



« zurück weiter »
Bewerten

 

PHP-Artikel

.Autor:Jan Winkler.
. Bewertung:
PHP-Artikel: PDF-Dateien erstellen mit PHP HTMLWorld
(5/5 bei 1 Votes)
.
. Community: 586 Beiträge im PHP-Artikel Forum .

Navigation

Achtung: Seite ist nicht mehr gültig von Sir Quicksand
Undefined variable - bitte um Hilfe von A235
Navigation Link soll ausgewählt bleiben von Maxxon
Zeitliche Zugriffsbegrenzung auf eine Webseite von Krueger008
Suche in einer Spalte Datenbank mit Ausgabe als Link von xmen
php frage von cyborg
Welchen Befehl? von duesseltalker
Mail vom Kontaktformular ist leer von promo
Formular wird alphabetisch sortiert, statt logisch von gooddog
Bekomme Validierung von Style.css.php nicht in den Griff !? von OneMoreMedia
Seiteninhalt über ID's ändern ? von Alex...
Custom tailor made sites to suit your business requirement. von acumencs
Struktur von php-Dateien in wordpress von Iago
Extension:LDAP Authentication von sternkopf
Warnung bzw. Fehlermeldung von rallaf

zum PHP-Artikel Forum »


 
     
 

Anzeige