RTF-Dateien mit PHP erstellen

Letzthin musste ich im Geschäft mit PHP einige Wordfiles erstellen. Da sich die Formatierung der Wordfiles auf fetten Text beschränkte machte ich es mir einfach und erstelle RTF-Files mit der Endung .doc. RTF-Dateien sind Plaintext und so recht einfach zu erstellen und wenn die Dateiendung .doc ist, werden sie automatisch mit dem Word geöffnet. So habe ich erstmal im Word eine Datei mit fettem und normalem Text erstellt und die als RTF abgespeichert. So kann man diese Datei gleich als Vorlage benutzen.

Ich habe nun den Inhalt der Datei in einer Variable gespeichert, um so die RTF-Datei schnell erstellen zu können. Das sieht dann so aus (man beachte die doppelten Backslashes)
<?
// template erstellen
$template="{\\rtf1\\ansi\\ansicpg1252\\deff0\\deflang2055{\\fonttbl{\\f0\\froman\\fprq2\\fcharset0 Times New Roman;}{\\f1\\fnil\\fcharset0 Calibri;}}
{\\colortbl ;\\red0\\green0\\blue0;}
{\\*\\generator Msftedit 5.41.21.2509;}\\viewkind4\\uc1\\pard\\cf1\\f0\\fs24
\\b {fett}
\\par
\\b0 {normal}
\\par\\cf0\\lang7\\f1\\fs22\\par
}"
;
?>


In diesem Template kann man nun die beiden Variabeln {fett} und {normal} durch den gewünschten Text ersetzen. Allerdings kann man den Text nicht einfach so einfügen, denn Sonderzeichen und Zeilenumbrüche müssen erst noch richtig codiert werden. Das geht so:
<?
// sonderzeichen und zeilenumbrueche ersetzen
$replace['from'][]="&auml;";
$replace['from'][]="&ouml;";
$replace['from'][]="&uuml;";
$replace['from'][]="&Auml;";
$replace['from'][]="&Ouml;";
$replace['from'][]="&Uuml;";
$replace['from'][]="\r";

$replace['to'][]="\'e4";
$replace['to'][]="\'f6";
$replace['to'][]="\'fc";
$replace['to'][]="\'c4";
$replace['to'][]="\'d6";
$replace['to'][]="\'dc";
$replace['to'][]="\n\\par\n";

$text=str_replace($replace['from'],$replace['to'],$text);
?>


Alles in allem kann das nun so aussehen:
<?
// template erstellen
$template="{\\rtf1\\ansi\\ansicpg1252\\deff0\\deflang2055{\\fonttbl{\\f0\\froman\\fprq2\\fcharset0 Times New Roman;}{\\f1\\fnil\\fcharset0 Calibri;}}
{\\colortbl ;\\red0\\green0\\blue0;}
{\\*\\generator Msftedit 5.41.21.2509;}\\viewkind4\\uc1\\pard\\cf1\\f0\\fs24
\\b {fett}
\\par
\\b0 {normal}
\\par\\cf0\\lang7\\f1\\fs22\\par
}"
;

// fetter Text
$fett="dies ist ein fetter Text";

// normaler Text
$normal="Dies ist ein normaler Text

mit Umlauten und Zeilenumbr&uuml;chen"
;

// sonderzeichen und zeilenumbrueche ersetzen
$replace['from'][]="&auml;";
$replace['from'][]="&ouml;";
$replace['from'][]="&uuml;";
$replace['from'][]="&Auml;";
$replace['from'][]="&Ouml;";
$replace['from'][]="&Uuml;";
$replace['from'][]="\r";

$replace['to'][]="\'e4";
$replace['to'][]="\'f6";
$replace['to'][]="\'fc";
$replace['to'][]="\'c4";
$replace['to'][]="\'d6";
$replace['to'][]="\'dc";
$replace['to'][]="\n\\par\n";

$fett=str_replace($replace['from'],$replace['to'],$fett);
$normal=str_replace($replace['from'],$replace['to'],$normal);

// Template bearbeiten
$template=str_replace("{fett}",$fett,$template);
$template=str_replace("{normal}",$normal,$template);

// daten schreiben
$fp=fopen("file.doc","w");
if(!
$fp)
{
    die(
"cannot write file");
}
fPuts($fp,$template);
fClose($fp);
?>