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!

 

[Gesamt:2    Durchschnitt: 4.5/5]

Facebook Kommentare:

52 Kommentare

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

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

    • 22. Januar 2013 - 10:03 | Direktlink

      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 | Direktlink

    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 | Direktlink

      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 | Direktlink

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

        • 19. Juli 2013 - 12:38 | Direktlink

          Danke für die Info! Schön, dass du es hinbekommen hast. 😉

        • Adrian
          13. Mai 2015 - 08:31 | Direktlink

          Und wie ganu muss ich das nun machen? Bei mir reagiert gar nichts.

          • Peter Nolte
            12. August 2016 - 07:59 | Direktlink

            $string=str_replace(„\r“,“\par“,$string);

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

    Hallo,

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

    Vielen Dank

    • 26. September 2013 - 09:56 | Direktlink

      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 | Direktlink

    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 | Direktlink

      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 | Direktlink

    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 | Direktlink

      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 | Direktlink

        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 | Direktlink

    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 | Direktlink

      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 | Direktlink

    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 | Direktlink

      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 | Direktlink

    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 | Direktlink

      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?

      • Foxxy
        4. August 2015 - 08:28 | Direktlink

        Leider funktioniert das mit den Umlauten wirklich nicht, UTF-8 steht ja schon im header(), aber auch utf8_decode() hilft leider gar nicht… Ich bin bisher auch auf noch keine weitere Idee gestoßen…
        Die Umlaute werden zwar angezeigt, jedoch in einer ganz anderen Schriftart.

        • 5. August 2015 - 06:16 | Direktlink

          Dann bleibt dir nichts anderes übrig, als nochmal alles durch zu gehen. Irgendow hat hat sich ein Fehler eingeschlichen…

          Sind deine Dateien in UTF-8 kodiert? Ist dein Text in UTF-8 kodiert? Hast du schon einmal in Word ein Umlaut eingefügt und dann geschaut, wie der Umlaut im Texteditor auschaut?

  • Jörg
    12. April 2016 - 08:54 | Direktlink

    Hallo,

    bei mir funktioniert das Beispiel leider nicht. Entweder öffnet sich nur ein leeres Test.doc oder ein neue Seite im Browser mit den „RTF-Dateiinfos“ sowie dem o.g. Programmiercode.

    Mir ist auch nicht klar, was unter der o.g. Anweisung zu verstehen ist. „Die umbenannte Datei können Sie mittels PHP einlesen“. Bedeutet dies, ich muss die Datei ‚wordfile.rtf.php‘ mittels PHP-Editor einlesen bzw. öffnen und anschließend den o.g. PHP-Code darunterschreiben oder benötige ich zwei Dateien eine ‚wordfile.rtf.php‘ und eine weitere xyz.php mit der ich die Datei ‚wordfile.rtf.php‘ öffne, die Platzhalter ersetze und als Test.doc ausgeben lasse.
    Wenn ich zwei Dateien benötige, müssen die in den gleichen Ordner auf dem Server.

    Beim Öffnen der Datei wordfile.rtf.php, die ich wie beschrieben angelegt habe, erhalte ich im PHP-Editor erst einmal den Inhalt der der Datei „wordfile.rtf.php“ angezeigt, mit dem der Editor offenbar nichts anfangen kann. Muss dieser gelöscht oder auskommentiert werden.

    Sorry für die vielen Fragen. Aber jeder fängt mal an.
    Danke.

    Gruß

    Jörg

    • 26. April 2016 - 08:32 | Direktlink

      Ja, du benötigts zwei Dateien. Die wordfile.rtf.php ist deine in Word erstellte Datei mit den Platzhaltern. Diese Datei legst du dann in den gleichen Ordner mit deiner Php-Datei, aus der du deine „Word-Datei“ einliest und verarbeitest.

  • Alex
    25. Mai 2016 - 19:03 | Direktlink

    Hallo,
    bei mir funktioniert es leider auch nicht es werden die Variablen in der Datei nicht ausgetauscht (d.h bei mir steht weiter %test% … ) in der Datei. ich benutze Apache/2.4.7 (Ubuntu) Server PHP Version ist 5.5.9-1ubuntu4.17.
    vielen dank

    • 25. Mai 2016 - 20:15 | Direktlink

      Hallo Alex,
      etwas mehr Infos wären nicht schlecht. Was hast du bisher gemacht?

      • Alex
        26. Mai 2016 - 20:21 | Direktlink

        Hallo Mathias,
        erstmal Danke für die schnelle Antwort.
        ich habe eine rtf datei mittels Libre Office erstellt welche so aussieht:

        %test%

        %date%

        %text%

        diese habe ich wie beschreiben in serviceschein.rtf.php umbenannt

        so sieht mein script aus :
        <?php
        $content = file_get_contents('serviceschein.rtf.php');

        $content = str_replace('‘, “, $content);

        $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);

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

        leider hat die doc welche automatisch heruntergeladen wird auch nur den folgenden Inhalt:
        %test%

        %date%

        %text%

        Vielen Dank

        • 27. Mai 2016 - 08:49 | Direktlink

          Öffne deine LibreOffice-Datei mal mit einem Texteditor (bspw. Notepad, Proton, etc.). Dann wirst du sehen, dass deine Variablennamen nicht mehr zusammenhängend sind. Korrigiere im Texteditor die Variablennamen und es sollte funktionieren.

          • Alex
            30. Mai 2016 - 10:58 | Direktlink

            Hey Super das hat geklappt ! Vielen Dank

  • Stefan
    29. Juni 2016 - 19:27 | Direktlink

    Hallo Matthias,

    vielen Dank für deinen Beitrag. Der hat mir sehr geholfen. Ich erzeuge auch schon schöne Word-Dokumente aus meiner PHP-Applikation. Jetzt möchte ich Bilder einfügen, die vom Benutzer hochgeladen werden. Im Word-Dokument sind die Daten der Bilder immer im HEX-Format hinterlegt. Hast du eine Idee, wie ich die Bilder automatisch in dieses Format umwandeln und dann in die Word-Datei schreiben kann?
    Vielen Dank schon jetzt!
    Stefan

  • Susi
    27. Juli 2016 - 06:55 | Direktlink

    Hallo Mathias,

    vielen Dank für das Tutorial. Bei mir klappt das super. Was ich super fände, wäre eine Art bedingte Formatierung. Das heißt, ich frage aus Datenbanken bestimmte Werte ab, die in das doc sollen, sind diese unter oder über einem gewissen Schwellwert, wäre es schön, wenn diese dann bspw. in roter Farbe erscheinen würden.

    Ist sowas auch möglich?
    Vielen Dank schon vorab!
    Liebe Grüße
    Susi

    • 27. Juli 2016 - 08:06 | Direktlink

      In diesem Fall müsstest du die Formatierung mit in deinen PHP-Code einfügen. Dann fragst du den Schwellwert in PHP ab und fügst die Formatierung mit ein. Markiere mal ein Wort in Word rot und schaue dir das im Editor an.

      • Susi
        27. Juli 2016 - 08:24 | Direktlink

        Danke für die schnelle Antwort! Das hat es gebracht!

        Allerdings habe ich das gleiche nun auch bei Diagrammen probiert: Werte für verschiedene Zeitpunkte sollen als Säulen in einem Diagramm erscheinen.
        Wenn ich zwei Dateien, bei denen ich lediglich den Wert eines Balkens geändert habe, im Texteditor miteinander vergleiche, dann sehe ich unzählige veränderte Zeilen mit einer schier unendlichen Auflistung von Hexadezimalzeichen. Ich hatte gehofft, dass man dann in dieses Feld auch nur ein %value1% eintragen und anschließend dieses durch einen Integer-Wert ersetzen kann.
        Gibt es auch hierfür eine einfache Lösung?

        Vielen Dank nochmals!

        • 27. Juli 2016 - 12:41 | Direktlink

          Das geht auch mit %value%. Wahrscheinlich hast du zu viel oder zu wenig ersetzt. Oder an der falschen Stelle.
          Eine andere Möglichkeit wäre, eine RTF-Datei zu erstellen. Die kann man auch mit Word öffnen. Der entscheidende Vorteil ist aber, dass du hier mit HTML arbeiten kannst.

          • Susi
            30. Juli 2016 - 16:38 | Direktlink

            Also wenn ich in einem Dokument ein Diagramm erstelle und dort die Werte für die Balken bearbeiten möchte, öffnet sich ein kleines Excel Fenster. In dieses gebe ich dann die Werte ein. Anstelle einer bspw. 3,5 habe ich dann %value123% eingegeben. Daraufhin verschwindet der Balken, weil es entsprechend keine Gleitkommazahl mehr ist.

            Speichere ich dies nun als .rtf und öffne das in einem Texteditor, dann finde ich weder „%value123% noch auch nur ein Prozentzeichen.

            Ich habe zwar dann in dem Dokument über 46.000 Zeilen Quellcode für das Diagramm, aber keine Variablen. Ich bin gern bereit das Dokument zu schicken zur Überprüfung..

          • 30. Juli 2016 - 20:08 | Direktlink

            Sorry, du hast Recht. Das funktioniert nicht mit Excel. Für Excel-Sheets müsstest du PHPExcel (https://phpexcel.codeplex.com/) verwenden. Die Doku findest du hier https://github.com/PHPOffice/PHPExcel/blob/develop/Documentation/markdown/Overview/01-Getting-Started.md

          • Susi
            2. August 2016 - 10:04 | Direktlink

            Hallo Mathias,

            das Excel Sheet wird doch da aber nur von Word intern genutzt. Auf das kann ich doch gar nicht zugreifen?! Wie soll ich denn da mit PHPExcel Werte ändern können?
            Ich komme auch nach Einlesen in die Doku an der Stelle irgendwie nicht weiter.

  • Bendikt
    27. Juli 2016 - 14:25 | Direktlink

    Hallo, vielen Dank!

    Leider klappt’s bei mir auch noch nicht:

    New Document

    <?php
    $TextInhalt = file_get_contents('Dokumente/KopfbogenOH.rtf.php');
    $TextInhalt = str_replace('‘, “, $TextInhalt);
    echo $TextInhalt;
    $_SESSION[‚TextInhalt‘] = $TextInhalt;
    ?>

    Serienbrief erstellen

    SerienbriefDrucken.php sieht so aus:

    Ich habe also Einlesen und doc-Erstellung getrennt, denn der Benutzer muß noch einiges einstellen, bevor das doc erstellt wird, und Die rtf-Datei wird, und header verträgt sich ja nicht mit zusätzlichem HTML-code. Also speichere ich den Text in der Session und erstelle das doc auf einer neuen Seite

    Das Einlesen klappt soweit, der Text wird mit echo auf der ersten Seite korrekt ausgegeben.
    Die zweite Seite erstellt auch ein doc, dieses ist jedoch vollkommen leer. Ich habe schon darauf geachtet, das rtf aus Word in utf-8 abzuspeichern. Wo könnte das Problem liegen?

    Danke und Grüße

    Ben

    • 27. Juli 2016 - 15:07 | Direktlink

      Das ist so schwierig zu sagen. Ich tippe aber mal auf den Umbruch. Die zweite Seite ist leer, da der Umbruch nicht richtig angehängt wird. Erstelle einmal in Word ein Dokument mit zwei Seiten und schaue dir es im Editor an.

      • Bendikt
        28. Juli 2016 - 08:08 | Direktlink

        Es kommt eigentlich kein Umbruch vor, und das Ergebnis ist ein vollkomen leeres, einseitiges Dokument. Im geggenwärtigen Stand habe ich noch nichts ersezt, das rtf-Dokument enthält Text und ein Bild (Logo).

        Hier noch mal der Code, diesmal hoffentlich unversehrt:
        (habe die Tagzeichen durch frnz. Gänsefüße › ersetzt)

        —–Datei Serienbrief.php——

        ‹!DOCTYPE HTML PUBLIC „-//W3C//DTD HTML 4.01 Transitional//EN“›
        ‹html›
        ‹head›
        ‹title›New Document‹/title›
        ‹meta http-equiv=“content-type“ content=“text/html“ charset=“utf8″›
        ‹/head›
        ‹body›
        ‹form action=“Serienbrief.php“›
        ‹?php
        $TextInhalt = file_get_contents(‚Dokumente/KopfbogenOH.rtf.php‘);
        $TextInhalt = str_replace(‚‹?php /*‘, “, $TextInhalt);
        $TextInhalt = str_replace(‚?›‘, “, $TextInhalt);
        echo $TextInhalt;
        $_SESSION[‚TextInhalt‘] = $TextInhalt;
        ?›
        ‹/form›
        ‹a href=“SerienbriefDrucken.php“›Serienbrief erstellen‹/a›
        ‹/body›
        ‹/html›

        ——-Datei SerienbriefDrucken.php——–

        ‹?php
        header(‚Content-Type: application/rtf;charset=utf-8‘);
        header(‚Content-Disposition: attachment; filename=“Test.doc“‚);
        print $_SESSION[‚TextInhalt‘];
        ?›

        • Bendikt
          28. Juli 2016 - 11:57 | Direktlink

          Sorry, ich hab‘ den Fehler gefunden – hatte nichts mit Deinem Script zu tun.
          Die zweite Seite „SerienbriefDrucken.php“ hat einfach die Session nicht aufgerufen.
          Normalerweise habe ich auf jeder Seite ein paar wichtige Funktionen includiert, darunter auch den Sessionstart. Die entsprechende require_once Zeile habe ich in der fraglichen Datei weggelassen, aus Angst sie könnte sich irgendwie mit den Headern beißen. An den Sessionstart habe ich gar nicht mehr gedacht.
          So hatte die zweite Seite gar keine Daten unter $_SESSION[‚TextInhalt‘].
          Nachdem ich diesem Fehler beseitigt hatte, klappt es jetzt auch mit dem Dokument.
          Danke noch mal für das tolle Script

        • Bendikt
          29. Juli 2016 - 13:32 | Direktlink

          Ich habe noch ein Problem in diesem Zusammenhang, das Du vielleicht lösen helfen kannst – mit rtf kenne ich mich nicht besonders aus und die Informationen im Internet sind sehr unübersichtlich…
          .
          Das Dokument enthält einen Briefkopf mit Logo. Der Bildbereich ist im Editor auch gut als dichter „Zeichenteppich“ zu erkennen. Bekanntlich sind Bilder in rtf recht speicherintensiv.
          Nun soll ein Serienbrief (in einem einzigen Dokument) erstellt werden – mehrmal der gleiche Text, mit Anpassungen für Adresse, Anrede etc, getrennt durch Seitenumbrüche.
          .
          Dazu gehört auch auf jedem neuen „Einzelbrief“ der Briefkopf, jedesmal mit dem gleichen Bild (Logo). Dadurch bläht sich die Dateigröße ins unermeßliche.
          .
          Nun die Frage:
          Kann man auch – innerhalb der rtf-Datei – ein an einer Stelle enthaltenes Bild mehrmals referenzieren? Also einen Dateiinternen „Verweis“ aus das Bild, daß es nochmals dargestellt werden soll?

  • Bendikt
    27. Juli 2016 - 14:28 | Direktlink

    Hallo, mein Kommenar wurde geschreddert, offenbar weil der code einen link (projektinterner Verweis) enthielt…

  • Paul
    23. Oktober 2016 - 11:33 | Direktlink

    Hallo zusammen,

    ich habe ein Problem. Mein Code:
    <?php
    function druck_offerte($offerten_nr,$freigabe_verkauf,$preisoff,$abfahrt,$anrede,$lastname,$firstname,$adress,$plz,$ort,$mail,$tel,$reisedatum,$route,$plaetze,$catering,$message,$message_dbb,$lok,$wagen,$mailtyp)
    {
    $content = file_get_contents('./wp-content/themes/twentytwelve-child/wordfile.rtf.php');
    //remove php tags
    $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);

    header(‚Content-Type: application/rtf;charset=utf-8‘);
    header(‚Content-Disposition: attachment; filename=“Test.doc“‚);
    print $content;
    }
    ?>

    Es wird nun der Inhalt der Webseite im Dokument angezeigt:

    DBB
    Dampf Bahn Bern
    Menü Springe zum Inhalt
    • Home
    • News
    o Aktualisierungen
    o Aus dem Fahrbetrieb
    • Verein
    o Geschichte
    o Statuten und Organigramm
    • Öffentliche Fahrten
    • Extra Fahrten/Charter
    • Technik / Infrastruktur
    o Rollmaterial
    o Depotwerkstätte
    o Projekte
    • Bildergalerie
    • Spenden
    • Frischdampf
    Was mache ich falsch?

    • 24. Oktober 2016 - 09:04 | Direktlink

      Vor dem print $content oder/und danach wird noch Inhalt ausgegeben. Versuche es bspw. mal mit einem exit; nach dem print $content; D.h. du musst die Stellen finden, wo noch weiterer Ausgaben erfolgen.

      • Paul
        24. Oktober 2016 - 14:22 | Direktlink

        Hallo MAthias,

        hat bestens geklappt. Vielen Dank.

  • Paul
    27. Oktober 2016 - 16:23 | Direktlink

    Hallo Mathias,
    Dank deinem Script und deinem Support kann ich wunderschöne Word-Dateien erstellen. Nun habe ich auch Bilder im Word Dokument: Statische Bilder funktionieren tadellos, bei den dynamischen habe ich noch ein Problem. Mit dem Code
    $fp = fopen („C:\\xampp\\htdocs\\Test\\Bild1.jpg“, „rb“);
    $str = fread ($fp, filesize(„C:\\xampp\\htdocs\\Test\\Bild1.jpg“));
    $data = chunk_split(base64_encode($str));
    $pic= „Content-Type: image/jpg\n“;
    $pic.= „Content-ID: \n“;
    $pic.= „Content-Transfer-Encoding: base64\n“;
    $pic.= „Content-Disposition: inline; filename=\“C:\\xampp\\htdocs\\Test\\Bild1.jpg\“\n\n“;
    $pic.= $data.“\n\n“;
    $content = iconv(„utf-8“, „iso-8859-1“, $content);
    $content = str_replace(‚%Bild1%‘, $pic, $content);
    erhalte ich den folgenden Output:

    Wir haben für Sie die folgende Zugskomposition reserviert:
    Content-Type: image/jpgContent-ID: Content-Transfer-Encoding: base64Content-Disposition: inline; filename=“C:.jpg“/9j/4AAQSkZJRgABAQEAAQABAAD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wAARCABwAJYDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3
    …….
    Hast Du einen Tipp wie ich diesen String als Bild darstellen kann?

    Besten Dank und viele Grüsse
    Paul

    • Paul
      28. Oktober 2016 - 11:15 | Direktlink

      Heureka ich hab’s. Zwar ein bisschen kompliziert, aber es funzt.
      1. In meinem Beispiel will ich bis zu 5 Bilder dynamisch einfügen.
      2. 1 leeres Bild erstellen (in meinem Beispiel Platzhalter).
      3. Im rtf-Dokument mit der Feldunktion IncludePicture ein Bild einfügen, in meinem Beispiel C:\xampp\htdocs\Test\Platzhalter1.jpg. Platzhalter.jpg mit %Platzhalter1%.jpg ersetzen. Es kommt der Fehler: Das verknüpfte Bild kann nicht angezeigt werden…………

      4. Grösse anpassen

      5. Speichern und Datei nach rtf.php umbenennen
      6. Dann im php
      $content = str_replace(‚%Platzhalter1%‘, ‚Bild1‘, $content);
      $content = str_replace(‚%Platzhalter2%‘, ‚Bild2‘, $content);
      $content = str_replace(‚%Platzhalter3%‘, ‚Bild3‘, $content);
      $content = str_replace(‚%Platzhalter4%‘, ‚Bild4‘, $content);
      $content = str_replace(‚%Platzhalter5%‘, ‚Platzhalter‘, $content); Hier kein Bild
      Et voila:

      Preis: CHF 3’500.00
      Wir haben für Sie die folgende Zugskomposition reserviert (kein fünftes Bild):

      (kann leider kein Bild angezeigt werden)

  • Schreibe einen Kommentar

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