Letztens stand ich vor der Herausforderung, eine PHP-Klasse zu schreiben, die PDF-Dateien erzeugt. Als Inhalt für die PDF Dateien waren sensible Kundendaten angedacht. Diese Anforderung war mir nicht fremd, jedoch konnte ich mich gut daran erinnern, dass sie mit viel Arbeit verbunden war. Die meisten Libraries bieten nur die Möglichkeit, die PDF-Dateien Zeile pro Zeile zu generieren Je nachdem woher man die Daten dafür beschaffen muss, kann sich dies zu einem mühseligem Unterfangen entwickeln. Hier kann ich aktuell zwei Lösungsansätze vorschlagen, die leicht anzuwenden sind und eine gute Sicherheit gewährleisten.

PDF mit dem Webservice LiveDocx erzeugen
LiveDocx ist ein SOAP-Webservice zur Dokumentenerzeugung, der auf der marktführenden Textverarbeitungskomponente TX Text Control .NET basiert. Mit LiveDocx ist es möglich, Templates mit jeder Programmiersprache, die SOAP unterstützt, mit Daten zu füllen. Die resultierenden Dokumente können jeweils in allen unterstützten Formaten gespeichert werden. Die Vorgehensweise ist einfach: Man erstellt einen Account bei www.phplivedocx.org und schreibt einen SOAP-Clienten oder verwendet die neuerdings veröffentlichte Zend Framework Komponente von LiveDocx, die als external angebunden werden kann. Danach erstellt man mit MS-Word eine .docx Datei und versieht sie mit Platzhaltern. Für das Erzeugen der PDF Datei benötigt man lediglich die Zugangsdaten zum WebService, den Pfad zu der Template-Datei und die Werte für die Platzhalter. Hier ein Beispiel aus der www.phplivedocx.org Seite:

$phpLiveDocx = new Zend_Service_LiveDocx_MailMerge(
    array (
        'username' => 'yourUsername',
        'password' => 'yourPassword'
    )
);
 
$phpLiveDocx->setLocalTemplate('template.docx');
 
$phpLiveDocx->assign('software', 'Magic Graphical Compression Suite v1.9');
$phpLiveDocx->assign('licensee', 'Henry Döner-Meyer');
$phpLiveDocx->assign('company',  'Megasoft Co-operation');
 
$phpLiveDocx->createDocument();
 
$document = $phpLiveDocx->retrieveDocument('pdf');
 
file_put_contents('document.pdf', $document);
 
unset($phpLiveDocx);	

Nun, was ist mit der Sicherheit? Diesbezüglich habe ich mit dem Support von www.phplivedocx.org kommuniziert, und man versicherte mir, dass die Daten via SSL übertragen werden und dass sie niemals auf der Seite des SOAP-Servers gespeichert werden.

PDF mit Zend_Pdf erzeugen
Da dem Kunden der Lösungsansatz mit dem WebService von LiveDocx nicht sicher genug war, musste ein Programmatischer Ansatz her. Dies bietet die Zend_Pdf Komponente des Zend Frameworks. Diese Herangehensweise verspricht absolute Kontrolle über den Prozess der PDF-Erzeugung und eine 101% Sicherheit. Allerdings ist der Preis dafür ein extrem hoher Aufwand; jede Textzeile, jedes Objekt, wie Bilder oder Tabellen, muss einzeln durch Festsetzen ihrer bzw. seiner Koordinaten im Dokument positioniert werden. Dieser Aufwand ist – abgesehen von minimalen Korrekturen – bei jeder Änderung des Dokuments wieder zu treiben. Weiterhin wäre ein einstellbarer Textumbruch oder eine Formatierung zum Blocksatz sehr wünschenswert. Aktuell muss man diese selber programmieren. Nichtdestotrotz, nach genauem Studieren der Zend_Pdf Komponente lassen sich ebenso leicht PDF Dateien erzeugen. Hier ein Beispiel, wie Sie einen leeren PDF-Briefbogen hochladen und beschreiben können:

// Lade das PDF Dokument.
$pdf = Zend_Pdf::load($fileName);

...

// Lege Zeichensatz fest und zeichne einen text
$pdf ->pages[0]->setFont($font, 36)
       ->setFillColor(Zend_Pdf_Color_Html::color('#9999cc'))
       ->drawText('Das ist mein erster Satz.', 60, 500);

...

// Aktualisiere das PDF Dokument
$pdf->save($fileName);
// Speichere das Dokument in eine neue Datei
$pdf->save($newFileName, true);
 
// Gib das PDF Dokument in einer Zeichenkette zurück
$pdfString = $pdf->render();

Im Allgemeinen muss man dazu sagen, dass die Zend_Pdf Komponente noch nicht alle Features abdeckt die man (oder der Kunde) sich so vorstellt, jedoch wird zurzeit viel daraufhin gearbeitet und entwickelt. So gibt es seit Mai 2009 einen Proposal von Nico Edtinger zu der Zend_Pdf Kommponente, die Zeilenumbrüche, Blockeinrückungen und Textausrichtungen automatisch generieren kann. Die Tests auf seiner Seite überzeugen allemal.

Fazit
Wer eine einfache und 99%ige Sicherheit bei der Erzeugung von PDF-Dateien haben möchte, der verwendet das WebService von LiveDocx, und wer keine umfangreichen Inhalte hat und eine 101%ige Sicherheit erzielen möchte, der verwendet die Zend_Pdf Komponente.

Weiterführende Informationen

PDF-Erzeugung mit dem Zend Framework, von Jonathan Maron
LiveDocx in PHP
Zend_Pdf Komponente
Anwendungsbeispiel für die Zend_Pdf Komponente
Zend_Pdf text drawing improvements – Nico Edtinger

3 thoughts on “PDF Datei erzeugen

  1. Hi, i read your blog occasionally and i own a similar one and i was just wondering if you get a lot of spam feedback? If so how do you stop it, any plugin or anything you can advise? I get so much lately it’s driving me mad so any help is very much appreciated.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.