'."\n"; $debug=0; ?>
| Acrobat-PDF-(Portable Document Format)-Dokumente bieten einige Vorteile: Auf jedem PC lesbar, unabhängig von Betriebssystem, Hersteller und Version, mit und ohne Browser. Vor allem aber sind sie nur lesbar - ohne (einfache) Möglichkeit, die Originale zu ändern. |
PDF-Dokumente können verschiedene Eelemente enthalten: Text, gezeichnete Grafik,
Bilder, Links, ... PHP ist mit Hilfe des Moduls pdflib in der Lage, beliebige PDF-Dokumente zu erstellen. |
PHP
|
PHP Hypertext Processor |
| Voraussetzungen | Lesen (Acrobat Reader) und Herstellung von PDF-Dokumenten |
| PDFlib | Modul PDFlib für PHP |
| PDF-Design | Datenstrom oder PDF-Datei |
| Grundgerüst | Herstellung eines Minimal-PDF-Dokuments mit PHP |
| Text | Schrift - PostScript, Text |
| Objekt-Grafik | Zeichnen mit PDF |
| Bilder | Einbettung von Bild-Dateien |
| Links |
Ausgewählte
|
Voraussetzungenfür die Verwendung von PDF-Dokumenten und für deren Erstellung mit PHP |
|
Verwendung von PDF-DokumentenDas Standard-Werkzeug zur Ansicht von PDF-Dokumenten ist der Acrobat Reader von Adobe. Sie erhalten den Reader kostenlos im Web von Adobe. Tip: Installieren sie vorher alle Browser, in diesem Fall wird das Adobe-Reader-Plugin in alle installierten Browser eingefügt. |
Erstellung von PDF-Dokumenten:Besonders einfach ist die Herstellung mit OpenOffice. Für höhere Ansprüche benötigen sie Acrobat von Adobe. Das Thema dieser Seite ist die Herstellung dynamischer PDF-Dokumente mit PHP: solche Dateien werden Live und 'vorprogrammiert' auf einem Webserver erzeugt. |
Live-PDF-Test:Wenn sie den Text auf der rechten Seite sehen, dann 'versteht' ihr Browser PDF-Dokumente.Alternativ können sie das Test-Dokument 'PDF-Eigenschaften' auf einer eigenen Webseite anzeigen. Dieses 'statische' PDF-Dokument wurde mit OpenOffice hergestellt. |
|
Erstellung von PDF-Dokumenten mit PHP► PHP läuft normalerweise auf einem Webserver, z.B. Apache. Der Webserver muss installiert, konfiguriert, gestartet und getestet sein. Als Sonderfall ist es auch möglich, PHP als 'Standalone'-Programm zu verwenden.► Der Webserver muss PHP unterstützen: PHP muss installiert, konfiguriert und getestet sein.
PHP muss mit PDFlib-Unterstützung
erstellt bzw. konfiguriert sein (Details unter
PHP-Module).Die PDFlib ist für den privaten nichtkommerziellen Gebrauch kostenfrei erhältlich. |
►
Details zur Installation und Konfiguration von
Apache und
PHP
auf Windows finden sie auf der Webseite
'WAMP'
(Windows, Apache, MySQL, PHP). ► Zur Herstellung statischer PDF-Dokumente ist OpenOffice besonders geeignet. Optimale PDF-Dokumente erstellen sie mit den PDF-Standardschriften (s.u. PDF-Text), deren Installation sehr empfehlenswert ist. ► Für größere Ansprüche benötigem sie Adobe Acrobat. Die Adobe-Webseite bietet Details zu diesem Programm. Auch Programme anderer Hersteller bieten gute PDF-Funktionalität. |
PHP-Modul PDFlib |
|
|
Zur Erstellung von PDF-Dokumenten verwendet PHP
die PDFlib.
Sie müssen zunächst feststellen, ob ihre PHP-Version das Modul enthält. Die Variable $pdfok wird true gesetzt, wenn das Modul geladen ist. Details zu PHP-Modulen |
$pdfok = 0;
Live-$module = get_loaded_extensions(); if (in_array("pdf", $module)) {$pdfok++;} |
|
Einige Provider von Webspace laden nur wenige Module ständig.
Das beschleunigt die Ausführung von PHP-Scripts. Alternativ können sie Module
wie pdf zur Laufzeit laden. Dazu wird die Funktion dl verwendet, die allerdings aus Sicherheitsgründen nur in jenen Pfaden sucht, welche in der Konfiguration php.ini unter 'extension_dir' angeführt sind. Danach sind Modul und Funktionen bis zum Ende der Script-Datei verfügbar. (Auskunft beim Provider einholen) |
So wird Modul pdf zur Laufzeit geladen: Dateiname der Bibliothek ohne Pfad !
if (!extension_loaded("pdf") {
Live-dl('libpdf_php.so');
} if (extension_loaded("pdf") {$pdfok++;} |
| PDF entwickelt sich relativ rasch. Daher sind zahlreiche PDFlib- Versionen verfügbar, die unterschiedliche Funktionen unterstützen. Das Beispiel zeigt, wie alle enthaltenen Funktionen von PDFlib ausgegeben werden. |
if($pdfok) {
$func = get_extension_funcs('pdf');
}
$c = count($func); print "Liste der $c pdf-Funktionen: "; sort($func); foreach ($func as $f) {print "$f, ";} |
|
Liste der $c verfügbaren pdf-Funktionen:
\n"; sort($func); foreach ($func as $f) {print "$f, ";} print " \n"; } else {print "\t\t\tKeine pdf-Funktionen für PHP verfügbar. \n";} ?> |
|
|
Falls die PDFlib
in ihrer PHP-Version nicht enthalten ist: Laden sie aus dem Internet die neueste stabile Version von PHP, installieren sie das PDF-Modul und konfigurieren sie PHP (Windows). |
Testen sie PHP und das Modul nach Installation. Tipp: Besorgen sie sich (aus dem Internet) möglichst auch die PDF-Standard-Schriften (s.u.). |
PDF-Grundgerüst |
|
|
►
Wenn ein pdf-Datenstrom erzeugt werden soll, dann bleibt der Dateiname
($outname) leer. Wenn eine Datei erzeugt wird,
dann wird ein Dateiname (Pfad) eingesetzt. ► Zu Beginn wird ein neues pdf-Objekt erzeugt (hier $pdf). Jede pdf-Funktion erhält dieses Objekt als Argument. ► Das Funktions-Paar pdf_open_file und pdf_close bezeichnet Beginn und Ende der Datei. Eine Datei enthält Informationen (z.B. Creator) und beliebig viele Seiten. ► Das Funktions-Paar pdf_begin_page und pdf_end_page bezeichnet Beginn und Ende einer Seite. ► Innerhalb der Seite werden die anzuzeigenden Objekte (Text, Grafik, Links, ...) erstellt. ► Wenn eine Datei erstellt wurde, dann ist das PDF-Grundgerüst hier beendet, ansonsten folgt noch die Übersendung des Dokuments als Datenstrom. Achtung: neuere Versionen der PDFlib verwenden für das Grundgerüst teilweise andere Funktionen. Konsultieren sie dazu die Dokumentation ihrer PDFlib-Version. |
// Dateiname
$outname="";
// Beginn pdf-Dokument
$pdf = PDF_new();pdf_open_file($pdf,$outname); pdf_set_info($pdf,"Creator","PDFlib"); pdf_begin_page($pdf,360,250); // PDF-Inhalt hier einfügen
pdf_end_page($pdf);pdf_close($pdf); // Ende pdf-Dokument
// Datenstrom senden
$pdf_data = pdf_get_buffer($pdf);$cl = strlen($pdf_data); header("Content-type: application/pdf"); header("Content-disposition: inline; filename=demo.pdf"); header("Content-length: $cl"; print $pdf_data; |
PDF-Text |
|
|
►
Text wird mit Hilfe eines Font-Objekts erstellt. Funktion pdf_findfont
erstellt ein Font-Objekt (hier $f)
mit Hilfe einer installierten oder 'internen' Schrift.
Jede folgende Text-Funktion verwendet dieses (oder ein anderes) Font-Objekt. ► Funktion pdf_show_xy schreibt Text an die angegebene Stelle (Koordinaten in Pixel von links unten). ► Funktion pdf_setcolor definiert eine Farbe. Sie wird solange verwendet, bis eine andere Farbe definiert wird. |
$f = pdf_findfont($pdf, "Helvetica-Bold", "winansi",0);
pdf_setfont($pdf, $f, 12); pdf_show_xy($pdf, "PDFlib",10, 185); pdf_setcolor($pdf,"fillstroke","rgb",0,0,0.5,0); pdf_setfont($pdf, $f, 12); $s = strftime("%H:%M:%S",time()); pdf_show_xy($pdf, "Server-Zeit: $s", 10,170); |
|
PDF-Dokumente achten genau auf die verwendete Schrift und
verlassen sich nicht auf 'irgendeine' Schrift am Ziel-PC.
Verwendete Schriften (Postscript, TrueType) werden daher normalerweise zusammen mit der
gesamten Metrik in einem pdf-Dokument inkludiert. Um das zu verhindern, verwenden sie am besten eine der 14 'internen' Schriften der PDFlib (siehe rechts ihre Simulation auf dieser Webseite). |
Die 14 'internen' Schriften der PDFlib (Groß/Klein-Schreibung der Schriftnamen
genau beachten): Courier, Courier-Bold, Courier-Oblique, Courier-BoldOblique, Helvetica, Helvetica-Bold, Helvetica-Oblique, Helvetica-BoldOblique, Times-Roman, Times-Bold, Times-Italic, Times-BoldItalic, Symbol, ZapfDingbats |
| Besorgen sie sich (Internet) die PostScript-Schriften (Courier.afm, Courier-Bold.afm, ... ZapfDingbats.afm) und installieren sie die Schriften in ihrem Betriebssystem. | Das oben eingefügte PDF-Test-Dokument hat mit üblichen Win-Schriften (Arial, Times New Roman) eine Größe von ca. 60kb, mit PDF-Standard-Schriften (Helvetica, Times) nur ca. 8kb ! |
|
|
PDFlib.com - Die Homepage der PDFlib.
|
PHP.net: PDF-Funktionen
(en,
de) PHP.de - Forum PHP-Resource.de - Forum, Scripts, Tutorials Sourceforge - Projekt pdf-php |
|