LUG Waldkraiburg

zur Navigation springen


eMail Impressum Datenschutz

PDF mit PHP erzeugen

von Siegfried Jahnel erstellt 10.2004

Was ist PDF?

PDF- Dokumente sind Text- Files, die vom Acrobat Reader gelesen, interpretiert und am Bildschirm oder Drucker augegeben werden. Der PDF- Code ist frei zugänglich und im Prinzip könnte jedermann sein PDF- Dokument mit einen Editor selbst erstellen. Im folgenden ist ein Teil eines PDF- Queltextes dargestellt.

%PDF-1.3 %âãÏÓ 1 0 obj << /Type /Catalog /Outlines 2 0 R /Pages.....

Vorbereitung

Der einfachste Weg PDF- Dokumente mit PHP zu erzeugen ist die Verwendung der PDF- Klasse von RO&S. Diese Klasse bietet zwar nicht alle Funktionen von PDF, aber für die Erstellung eines normalen Dokumentes reicht sie aus. Das Downloadpaket besteht aus zwei PHP- KLassen (class.pdf.php und class.ezpdf.php), einigen Fonts und einer README- Datei. Besonders zu empfehlen ist die ez.pdf- Klasse, die eine Erweiterung der PDF- Klasse darstellt und die wichtigsten Befehle zur PDF- Erzeugung nochmal vereinfacht.
Nach dem Download muß nur noch das Paket in ein beliebiges Verzeichnis des Webservers entpackt werden. In meinem Beispiel befinden sich die Dateien im Verzeichnis c:\wampp13cs\htdocs\pdf\.

Erstes Beispiel

Kopieren Sie den untenstehenden Quelltext in einen Editor und passen die Pfade zur Klasse und zu den Fonts an. Fügen Sie bitte keinen HTML-Code hinzu! Speichern Sie das Programm unter einem beliebigen Namen, z.B.: pdf1.php und rufen Sie es mit einem Browser auf.

<?php
include ("/home/public/classes/class.ezpdf.php");
$pdf = & new Cezpdf();
$pdf->selectFont("/home/public/classes/fonts/Courier.afm");
$pdf->ezText("Dies ist mein erstes pdf-Dokument",36);
$pdf->ezStream();
?>

Das Ergebnis sollte so aussehen.
Dieses erste Beispiel gibt die erzeugten PDF- Steuersequenzen direkt an den Browser aus. Vorangeschickt wird ein Header, der dem Browser sagt, daß es sich ein PDF- Format handelt und er den Acrobat Reader laden soll.

Zweites Beispiel

In diesem Beispiel soll das erzeugte PDF- Dokument auf die Festplatte geschrieben werden und den Namen pdf2.pdf erhalten.

<?php
include ("class.ezpdf.php");
$pdf = & new Cezpdf();
$pdf->selectFont("c:\wampp13cs\htdocs\pdf/fonts/Courier.afm");
$pdf->ezText("Dies ist mein erstes pdf- Dokument",36);
$pdfcode = $pdf->output();
$fp = fopen('pdf2.pdf','w');
fwrite($fp,$pdfcode);
fclose($fp);
?>

Tips und Tricks und Fallen

Diese Probleme sind bei meinen ersten Gehversuchen mit PDF aufgetreten

Problem 1: Es wird nur eine leere Seite augegeben
Einige Versionen des IE haben den Fehler, daß sie einen zweiten Header ignorieren. Das führt dazu, daß manchmal nur eine leere Seite oder der PDF- Quelltext zu sehen ist. Wurde also einmal eine Fehlermeldung ausgegeben, stellt der IE anschließend keine PDF- Dokumente mehr dar.
Abhilfe:
  • Vor dem PHP- Code darf kein (HTML-) Header zum Browser geschickt werden
  • Nach einer Fehlermeldung den IE neu starten
  • Das PDF- Dokument als File auf die Festplatte schreiben und anschließend und mit einem Link darauf verweisen.
  • Eine Umleitung mit "location:header" führt ebenfalls zu Fehlern. Am besten man leitet per JavaScript um: "location.href("beispiel.pdf")"

Problem 2: PHP Fehler "Undefined index...in line 1934"
Der Pfad zu den Fonts ist nicht korrekt

Problem 3: PHP Fehler "failed to create stream: No... "
Der Pfad zur class.ezpdf.php ist nicht korrekt


Viel Spass

Siegfried Jahnel::Software and more...
www.sj-sam.de



Seitenanfang