PHP: eine dynamische Worddatei erstellen und aufrufen

In diesem Artikel möchte ich Ihnen zeigen, wie man mit PHP eine dynamische Worddatei erstellen kann und diese ohne zwischenzuspeichern dem Anwender zur Verfügung stellt.

Zunächst bedienen Sie sich einem kleinen Trick. Sie erstellen eine Worddatei und speichern diese im RTF-Format ab. Diese Datei dient Ihnen als Template, in dem Sie Platzhalter einbauen und diese später dynamisch in PHP ersetzen können. Im verwendeten Beispiel habe ich die Datei wordfile.rtf genannt.

RTF-Datei
RTF-Datei

Im nächsten Schritt müssen Sie der Datei noch die Endung .php hinzufügen. Dazu benennen Sie im Windowsexplorer die Datei einfach um und hängen die Endung dran.  Die umbenannte Datei können Sie mittels PHP einlesen und bearbeiten!

Anschließend öffnen Sie die Datei wordfile.rtf.php und ersetzen die Platzhalter in PHP wie folgt:


<?php
$content = file_get_contents('wordfile.rtf.php');

//remove php tags
$content = str_replace(‚<?php /*‘, “, $content);
$content = str_replace(‚?>‘, “, $content);

// replace variables
$content = str_replace(‚%test%‘, „Das ist ein Test!“, $content);
$content = str_replace(‚%date%‘, date(„d.m.Y“), $content);
$content = str_replace(‚%text%‘, „Hier steht ein Text.“, $content);
?>

Und mit folgendem Code wird die Datei, ohne diese auf dem Server zu speichern, zum Anwender gesendet:


<?php
// send file to user
header('Content-Type: application/rtf;charset=utf-8');
header('Content-Disposition: attachment; filename="Test.doc"');
print $content;
?>

Das Endergebnis sieht dann wie folgt aus:

Ergebnis der dynamisch erzeugten Worddatei
Ergebnis der dynamisch erzeugten Worddatei

Wenn Ihnen die Lösung weitergeholfen hat, würde ich mich über ein „Like” oder einen Kommentar sehr freuen. Danke!

 

Facebook Kommentare:

20 Comments

  • Stefan
    19. Januar 2013 - 22:01 | Permalink

    Klappt Super!
    Gibt es auch die Möglichkeit eine Grafik auszutauschen?

    • 22. Januar 2013 - 10:03 | Permalink

      Ja, die gibt es. Diese Möglichkeit ist aber wesentlich aufwendiger. Wenn es statische Bilder sind, würde ich die Bilder alle mal in Word rein kopieren und dann die langen Strings in PHP austauschen.

  • Astrid
    19. Juli 2013 - 09:47 | Permalink

    Hat mir sehr geholfen. Aber wie kann ich innerhalb von %text% noch Zeilenumbrüche mit übergeben? \r\n und chr(13).chr(10) haben irgendwie nicht funktioniert.

    • 19. Juli 2013 - 09:55 | Permalink

      Füge doch mal einen Text in eine statische Worddatei ein. In diesen Text baust du auch Umbrüche mit ein. Dann kannst du sehen, dass Word dafür andere Zeichenfolgen verwendet. Sorry, aber ich komme jetzt gerade nicht dazu, es selbst auszubropieren.

      • Astrid
        19. Juli 2013 - 11:35 | Permalink

        Hab es nach etlichem Probieren herausgefunden: Man muss pro Zeile chr(92).chr(10) anhängen.

  • Hookem
    26. September 2013 - 08:55 | Permalink

    Hallo,

    ist es igendwie möglich auch eine Tabelle zu erzeugen mit dem Script oben.

    Vielen Dank

    • 26. September 2013 - 09:56 | Permalink

      Klar. Erstelle dir doch mal eine Tabelle in Word, speichere die Datei im RTF-Format ab und schaue dir dann das Ergebnis in einem Editor an. Am besten fügst du in Word noch ein Hilfswort ein, nachdem du dann suchen kannst.

      Grüße
      Mathias

  • Nadine
    16. Januar 2014 - 08:01 | Permalink

    Hallo,
    wenn ich versuche, die Datei umzubenennen, erhalte ich nur eine dateiname.php.rtf anstatt der gewollten Dateiname.rtf.php. Mache ich was falsch oder gibt es einen Trick?
    Viele Grüße und danke!
    Nadine

    • 16. Januar 2014 - 09:47 | Permalink

      Hallo Nadine,
      ich weiß jetzt nicht genau wo es bei dir hängt. Aber speichere deine Worddatei in Office im RTF-Format ab. Dann öffnest du die Datei mit einem Texteditor. Kopiere den Office-Code und füge ihn in eine beliebige PHP-Datei. Hast du das gemeint? Wenn nicht, poste doch bitte ein wenig Code.

      Grüße
      Mathias

  • Trom
    16. Februar 2015 - 19:57 | Permalink

    Hallo

    Das ist sehr gut erklärt, vielen Dank!
    Ist es auch möglich das Dokument auf dem Server zu speichern so das der Nutzer das Dokument nach dem Bearbeiten gleich wieder auf dem Server speichern kann?

    Gruss
    Trom

    • 16. Februar 2015 - 20:04 | Permalink

      Man kann zwar die Worddatei auch auf dem Server speichern, aber vom Browser aus nicht mehr bearbeiten. Vor dem Öffnen wird die Datei erst heruntergeladen. Die geänderte Datei liegt dann lokal gespeichert.
      Es gibt noch die Möglichkeit in einem „lokalen“ Netzwerk die Festplatte als Laufwerk einzubinden. Dann kann man auf die Datei verlinken, öffnen und speichern. Dazu muss der Browser jedoch auch erweitert werden, da der Browser nicht auf Dateien auf der Festplatte zugreifen darf.

      • Trom
        21. Februar 2015 - 13:02 | Permalink

        Ok, vielen Dank.
        Wir arbeiten mit einem CRM bei dem dies geht.
        Daher hat es mich interresiert wie die das machen, leider finde ich nichts im Internet…..

  • Andreas Vogt
    25. Februar 2015 - 10:37 | Permalink

    Nettes Tool, jedoch zeigt Word beim Öffnen nicht den Inhalt, sondern auch alle (RTF) Formatierungstags an…?
    Woran könnte das liegen?

    • 13. Mai 2015 - 10:57 | Permalink

      Das liegt bestimmt daran, dass Formatierungstags auskommentiert sind oder PHP-Tags mit in die Datei geschrieben worden sind. Wie sieht denn die erzeugte Datei in einem Editor aus? Diese Datei am besten mal mit einer original Worddatei vergleichen.

  • Meier
    30. März 2015 - 11:54 | Permalink

    Hallo zusammen,

    tolle Erklärung zum Drucken in Word. Danke!

    Mit dieser Methode kann ich einzelne Bereiche (Textmarken) in meinem Worddokument ansprechen und entsprechend füllen.

    Ist es auch möglich, eine Tabelle damit anzusprechen und neue Tabellenzeilen je nach Anzahl der Datensätze in einer SQL-Datenbank zu erzeugen?

    Danke im Voraus für die Bemühungen
    Gruß
    Meier

    • 13. Mai 2015 - 10:54 | Permalink

      Ja, klar. Am besten erstellt man ein Tabelle mit Werten in Office, speichert diese in RTF ab und schaut sich den Code in einem Editor an. Dann kopiert man sich nur den Teil der Tabellenzeile raus. Diese Zeile kann man dann beliebig oft in PHP aneinander hängen.

      Einfacher wäre es jedoch, HTML abzuspeichern und der Datei die Endung .doc zu vergeben. Word kann auch HTML.

  • Adrian
    12. Mai 2015 - 13:42 | Permalink

    Super cooles Script. Doch habe ich immer das Problem mit den Umlauten habe UTF8 Windows 1250 unde ISO-8859-1 probiert immer das selbe. Kann mi jemdna helfen? Wäre echt Cool.

    Danke schon im Voraus.

    LG Adrian

    • 13. Mai 2015 - 10:50 | Permalink

      Versuche den Inhalt mal mit utf8_decode() zu bearbeiten und dann in Office zu öffnen. Ansonsten sollte immer alles in UTF-8 codiert sein. Ist dein Skript auch in UTF-8 abgespeichert?

  • Hinterlasse eine Antwort

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

    Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>