Automatisierte Dokumentenerstellung mit PHPWord und PHPPowerPoint

Erstklassig: PHPWord und PHPPowerPoint
Kommentare

In der letzten Ausgabe des PHP Magazins haben wir mit PHPExcel aufgezeigt, wie einfach und strukturiert die Erstellung von Excel-Dokumenten mit PHP umgesetzt werden kann. Die beiden Schwesterprojekte PHPWord und PHPPowerPoint runden die einheitliche Klassensammlung ab. Sie bieten ebenfalls komfortable Funktionen an, mit denen sich die vielfältigen Anforderungen der automatisierten Dokumentenerstellung lösen lassen. Neue Dokumente mit Bildern und Schriftformatierungen können sowohl PHPPowerPoint als auch PHPWord erzeugen. Mit Letzterem lassen sich darüber hinaus auch noch Vorlagen ausfüllen.

PHPWord ist die elegante Alternative zu den Ansätzen, die Word-Dokumente über COM-Objekte aufbauen oder den Umweg über das Rich-Text-Format (RTF) gehen wollen. Die Nutzung der COM-Funktionen setzt einen Windows-Server mit installiertem MS Word voraus, via RTF können mit vertretbarem Aufwand nur Platzhalter in Vorlagen ersetzt, aber keine neuen Dokumente erstellt werden. PHPWord kann sowohl auf Linux- als auch auf Windows-Servern betrieben werden und steht wie die Schwesterprojekte PHPExcel und PHPPowerPoint als Open-Source-Lösung unter der GNU Library Public License, Version 2, zur Verfügung. PHPWord erstellt Word-2007-Dokumente inklusive Office-Metadaten wie Autor, Titel und Beschreibung, beinhaltet diverse Schriften und Schriftformatierungen, ermöglicht die Gestaltung der Kopf- und Fußzeile, das Einfügen von Bildern,OLE-Objekten und eines Inhaltsverzeichnisses und unterstützt ein einfaches Vorlagensystem für die automatisierte Erstellung von Anschreiben und anderen Dokumenten. In diesem Artikel werden exemplarisch die Erstellung eines Word-Dokuments und die Nutzung des Vorlagensystems beschrieben, um die Funktionsweise dieser Klasse kennen zu lernen.
Voraussetzungen und Installation
PHPWord setzt PHP ab der Version 5.2.0 sowie die Erweiterungen libxml und ZipArchive voraus. Die Installation ist denkbar einfach. Die aktuelle Version von PHPWord lässt sich unter [1] als Zip-Archiv herunterladen und anschließend auf dem Webserver entpacken. Sinnvolle Speicherorte sind das Root-Verzeichnis des Webservers, was zu einer Struktur nach folgendem Schema führt:
/var/www/Classes/PHPWord.php
/var/www/Classes/PHPWord/IOFactory.php
/var/www/Classes/PHPWord/TOC.php
Das Archiv umfasst viele erläuternde Beispiele zur Funktionsweise, die als Vorlagen für die eigene Umsetzung dienen können. Mit dem Aufruf der PHP-Skripte über den Browser werden die entsprechenden Word-Dokumente auf dem Server erzeugt und im Verzeichnis der Beispiele abgespeichert. Für die einwandfreie Funktionalität der Klassenfunktionen Inhaltsverzeichnis und Listenelemente muss noch ein Patch eingespielt werden. Dies kann unter [2] heruntergeladen werden. Die Änderungen sind einfach durchzuführen und beziehen sich auf PHPWord/Writer/Word2007/Document.php (Zeile 349) und PHPWord/Section.php (Zeile 183). Etwas versteckt befindet sich unter [3] die ausführliche, absolut lesenswerte Dokumentation PHPWord_Docs_0.6.2.docx. Neben den Klassenfunktionen erklärt sie bereits zu Beginn, was es mit der Maßeinheit Twips auf sich hat. Ein Twip ist eine typografische Längeneinheit und bedeutet „TWentieth of an Inch Point“, also 1/20 Punkt = 1/1440 Zoll. Mit diesen Einheiten werden in PHPWord zum Beispiel Tabellenbreiten oder Seitenränder definiert.
Aufbau des Dokuments
Nun wollen wir aber mit unserem eigenen Beispiel PHPWord_Header_Footer_TOC.php beginnen. Die vollständigen Quelltexte sowie die Klasse PHPWord finden Sie auf der Heft-CD. Am Anfang wird einmalig die Klasse über PHPWord.php eingebunden, alle anderen Klassen werden automatisch bei Bedarf nachgeladen (Lazy Loader). In Listing 1 „erzeugt“ der Klassenaufruf $PHPWord = new PHPWord()ein neues Word-Objekt. In den nächsten Zeilen werden die Schrift- und Absatzformatierungen des Dokuments definiert. Benutzer der Vorgängerversion 0.6.1 sollten diese Neuerung beachten, da vorher nicht zwischen Schrift und Absatz unterschieden wurde. Mit 0.6.2. wurde für die Absatzformatierung eine eigene Klasse erstellt. Zu beachten ist weiterhin, dass die Variablennamen innerhalb der PHP-Restriktionen frei gewählt werden können. Überdies ist bei Methodenaufrufen auf Groß- und Kleinschreibung zu achten. Das ist gerade am Anfang ein Stolperstein. Für die gebräuchlichen Schriften unseres Dokuments werden die Parameter wie Größe in Punkten, Farbe in RGB oder Fettsatz angegeben. Um diese drei Grundschriftarten bei einer möglichen manuellen Nachbearbeitung des Word-Dokuments mit entsprechendem Namen in der Übersicht FORMATVORLAGEN UND FORMATIERUNGEN aufzufinden, werden diese mit dem Methodenaufruf $PHPWord->addFontStyle(‚Standard‘, $fontStyleNormal) usw. hinterlegt. Der erste Parameter ist hierbei der anzuzeigende Name. Es folgen die Angaben für die Überschriften der ersten und zweiten Ebene. Bei der Absatzformatierung wird nun auch zum ersten Mal die Maßeinheit Twips genutzt. Die Definition des Abstandes vor und nach einer Überschrift erfolgt im Word-Dokument in Punkten. Vor der Überschrift der ersten Ebene ist ein Abstand von fünf Punkten gewünscht. Da ein Twips das 1/20 eines Punktes ist, wird ’spaceBefore‘ => 5 * 20 angegeben. Um auch die Überschriften nach FORMATVORLAGEN UND FORMATIERUNGEN zu übernehmen, werden diese mit dem Aufruf $PHPWord->addTitleStyle(1, $fontStyleTitle1, $paragraphStyleTitle1) hinterlegt. Der erste Parameter ist die Gliederungsebene. Das Ergebnis zeigen die Abbildungen 1 und 2.
Abb. 1: Die Schriftformatierungen der Überschriften stehen im erstellten Word-Dokument zur Verfügung
Abb. 2: Auch die Definition des Absatzes mit Ausrichtung und Zeilenabstand wurden übernommen
Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -