Word RTF dynamisch erstellen

Aus php bar

Wechseln zu: Navigation, Suche

Inhaltsverzeichnis

Problem

Man soll aus einer Formulareingabe dynamisch ein Word Dokument erzeugen. PDF scheidet aus, da das Dokument noch nachbearbeitet werden soll.

Lösung

Man erstellt in Word ein Template, markiert darin die Bereiche die ersetzt werden sollen und speichert es als RTF mit der Dateiendung .doc ab. Das RTF-Format ist nicht binär und kann somit von PHP als ASCII-Text interpretiert werden. Nun nur noch nach den Platzhaltern suchen und ersetzen...


PHP Snippet - Datei auf dem Server erstellen

 /**
  * Word-Dokument (RTF, aber als .DOC kaschiert) aufbauen und als Anhang verschicken
  */
 /* ... */
 // Template öffnen
 $brief = file_get_contents('my_template.doc.php');
 // Template ist gegen direktes Lesen mit php-Tags geschützt, diese jetzt entfernen
 $brief = str_replace('<?php /*', '', $brief);
 $brief = str_replace('*/?>', '', $brief);
10 
11 $brief = str_replace('*tagesdatum*', strftime("%d.%m.%Y"), $brief);
12 if ($anrede == 'Herr') {
13     $qanrede1 = 'Herrn';
14     $qanrede2 = 'r Herr';
15 } else {
16     $qanrede2 = ' Frau';
17 }
18 //n an Herr anhängen
19 $brief = str_replace('*qanrede1*', $qanrede1, $brief);
20 $brief = str_replace('*vname*', $vname, $brief);
21 $brief = str_replace('*nname*', $nname, $brief);
22 $brief = str_replace('*strasse*', $strasse, $brief);
23 $brief = str_replace('*haus*', $haus, $brief);
24 $brief = str_replace('*plz*', $plz, $brief);
25 $brief = str_replace('*ort*', $ort, $brief);
26 //'sehr geehrter Herr'/'sehr geehrte Frau'
27 $brief = str_replace('*qanrede2*', $qanrede2, $brief);
28 /* ... */
29 // Datei speichern (mit Endung .DOC)
30 $file_name = 'my_template.doc';
31 $fp = fopen('tmp/' . $file_name, 'w');
32 if (!$fp) {
33     trigger_error('file_put_contents cannot write in file.', E_USER_ERROR);
34     return;
35 }
36 fputs($fp, $brief);
37 fclose($fp);


PHP Snippet - RTF direkt an Browser leiten

Einfach im obigen Skript Zeile 29 bis 37 durch folgenden Code ersetzen:

1 header('Content-Type: application/rtf');
2 header('Content-Disposition: attachment; filename="Brief.rtf"');
3 print $brief;

Hinweis: Vor "header" darf kein Zeichen an den Browser gesendet worden sein!

Weblinks

Persönliche Werkzeuge