Maria Haubner Mayflower

Ein Word-Dokument in PHP zu erstellen klingt zunächst einmal nach einer großen Tüftelarbeit, die viel Zeit beansprucht. Anwendungsmöglichkeiten gibt es einige, und so lohnt es sich, gleich mehrere Möglichkeiten auszuprobieren, um diese Aufgabe vernünftig zu lösen. Und wir werden sehen: Es ist doch einfacher als man denkt.

Ein Word-Dokument in PHP zu erstellen, kann eine ganz schöne Herausforderung werden. Microsoft Word bietet eine Vielzahl an Optionen und Einstellungen, und die möchte man natürlich auch nutzen, um ein zufriedenstellendes Ergebnis zu erhalten. Vielleicht ist man ja in der Situation, Dokumente für einen Geschäftskunden erstellen zu müssen, der nur Word kennt, aber keine Ahnung von den Einschränkungen in PHP hat. Da kann es natürlich passieren, dass der Kunde unzufrieden ist, wenn etwas auf einmal nicht machbar ist.

In diesem Artikel werden wir uns PHPWord etwas genauer anschauen und drei verschiedene Wege zeigen, mit denen man Word-Dokumente erstellen kann: grundlegendes einfaches Templating, die Erstellung von Dokumenten komplett in PHP und – um ein bisschen verrückt zu werden und die Sache auf die Spitze zu treiben – die Kombination von beidem. Nach der Lektüre sollte man auf jeden Fall eine Idee davon haben, wie man sich am besten seinen persönlichen Word-Creator gestalten könnte.

PHPWord

PHPWord ist Teil der PHPOffice-Bibliothek, die es erlaubt, Dokumente in verschiedenen Dateiformaten komplett in PHP zu lesen und zu schreiben. Die unterstützten Formate sind HTML, ODText, PDF, RTF und Word 2007, das wir uns genauer anschauen werden. PHPWord ist aktuell in Version 0.14 auf GitHub verfügbar. Noch ist nicht jedes Feature aus Microsoft Word komplett implementiert, doch die zur Verfügung stehenden Optionen sind schon sehr umfangreich. Einige davon werden im Folgenden anhand von Codebeispielen vorgestellt oder erwähnt. Damit diese Codebeispiele laufen, muss man natürlich PHPWord in sein Projekt einbinden. Zu Beginn beschäftigen wir uns mit dem einfachen Templating aus Word heraus.

Grundlegendes einfaches Templating

Mit PHPWord kann man sehr leicht mit Word-Templates arbeiten. Wenn man ein einfaches Dokument mit statischem Layout hat, in dem sich beispielsweise nur die Empfängeradressen ändern sollen, dann ist das der schnellste Weg. In Abbildung 1 sieht man das Template Template.docx, das mit Word erstellt wurde. Wie man sehen kann, sind Datum und Empfängeradresse durch Platzhalter ersetzt. Sie haben die Form ${placeholder}. Der PHP-Code, den man benötigt, um dieses Template dynamisch zu füllen, findet sich in Listing 1.

$templateProcessor = new \PhpOffice\PhpWord\TemplateProcessor('Template.docx');

$templateProcessor->setValue('date', date("d-m-Y"));
$templateProcessor->setValue('name', 'John Doe');
$templateProcessor->setValue(
  ['city', 'street'],
  ['Sunnydale, 54321 Wisconsin', '123 International Lane']);

$templateProcessor->saveAs('MyWordFile.docx');
Abb. 1: Einfaches, in Word erstelltes Template

Abb. 1: Einfaches, in Word erstelltes Template

Sehen wir uns das mal genauer an: Erst lädt man das Template in einen Template Processor, indem man die entsprechende Klasse aufruft und den Pfad zum Template als Parameter übergibt. Jetzt kann man die Platzhalter durch Werte ersetzen. Man sollte darauf achten, dass die setValue-Methode als erstes Argument den Namen des Platzhalters benötigt – jedoch ohne Dollarzeichen und geschweifte Klammern. Nachdem die Platzhalter ersetzt sind, speichert man das geänderte Template und ist fertig.

Den vollständigen Artikel lesen Sie in der Ausgabe:

PHP Magazin 5.18 - "Node.js 10: What's next?"

Alle Infos zum Heft
579849325Drei Wege, ein Word-Dokument mit PHPWord zu erstellen
X
- Gib Deinen Standort ein -
- or -