.rtf + Bilder: So geht's! und Header-Frage

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • .rtf + Bilder: So geht's! und Header-Frage

    Hallo!

    Ich hab hier ein kleines Script für alle die gerne ein .rtf-File generieren möchten und da Bilder reinsetzen wollen:

    PHP-Code:
    <?
    //    RTF lesen
    //    ---------
        
        include('tpl_class.php');
        
    // Template einlesen
        $tpl=new template;
        $tpl->read_file("testdoc.rtf");

    // Bild öffnen    
        $b=fopen("upl_bild.jpg","rb");

    // Bild-Informationen lesen
        $imgData=getimagesize("upl_bild.jpg");
        
    // RTF-Kommando für neues Bild anlegen
        $neubildPre="{\\*\\shppict{\\pict \\jpegblip \\picw".$imgData[0]." \\pich".$imgData[1]." \\wbmbitspixel24 ";

    // Bilddaten in Variable lesen
        while (!feof($b)) {
            $neubild.= fgets($b);
        }

    // Binäre Bild-Daten in Hex umwandeln
        $hex=bin2hex($neubild);

    // RTF-Bilddaten zusammensetzen
        $bildDat=$neubildPre.$hex."}}";
        
    // Bild in RTF-Template einsetzen
        $tpl->replace("bild",$bildDat);

    // RTF-Datei auf Platte schreiben
        $inh=$tpl->sendToVar();
        $f=fopen("lala.rtf","w");
        $fp=fputs($f,$inh,strlen($inh));
        fclose($f);
        
    ?>
    Das ganze funktioniert folgendermassen: Ich habe ein Word-Dokument angelegt, in das ich meine Template-Variablen reingeschrieben habe. Dann wurde das Word-Dokument als RTF-Datei gespeichert. Dieses RTF-File ist dann mein Template.

    Ich habe eine kleine Template-Klasse geschrieben die nichts weiter macht, als das angegebene .rtf-Dokument einzulesen und dann den Platzhalter in dem Dokument, der "bild" heisst durch das wirkliche Bild zu ersetzen. Funktioniert einwandfrei.

    Jetzt habe ich trotzdem eine Frage. Wie man sieht, speichere ich das neue .rtf-File am Schluss auf der Platte ab. Ich hätte aber gerne, dass ich das Teil nicht speichern muss und dass einfach Word aufgemacht wird und das .rtf angezeigt wird. Ich habe das mit folgenden Befehlen probiert:

    PHP-Code:
        header("Content-type: application/rtf");
        echo 
    $inh
    Wobei in $inh das gesamte RTF gespeichert ist.
    Geht aber nicht, ich bekomme nur die ganzen RTF-Befehle angezeigt, nicht das eigentliche Dokument. Wie kann ich das bewerkstelligen?

    Vielen Dank

    Gruss

    Yezariel
    mens agitat molem

  • #2
    Hat keiner eine Idee für das header-Problem?

    Ich wäre echt sehr dankbar für einen Tipp...

    Gruss

    Yezariel
    mens agitat molem

    Kommentar


    • #3
      ich kenne die klasse zwar nciht, aber vielleicht ist dir das dennoch eine hilfe.

      eine bilddatei ist immer BINÄR

      also macht es wenig sinn, diese zeilenweise einzulesen.
      mache es mal mit fread.

      PHP-Code:
      // Bilddaten in Variable lesen
          
      while (!feof($b)) {
              
      $neubild.= fread($b);
          } 
      INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


      Kommentar


      • #4
        Ahoi!

        Komischerweise hat das unter PHP 4.3 kein Problem gemacht. Ich habe hier zu Hause allerdings PHP 4.2.2 und da musste ich das fread dann nehmen, allerdings mit der zusätzlichen Angabe der Filesize.

        Das war aber nicht mein eigentliches Problem. Ich wollte ja das mit den header-Sachen wissen. Hat sich jetzt aber auch erledigt weil ich's selbst rausgefunden hab.

        Danke!

        Gruss

        Yeza
        mens agitat molem

        Kommentar


        • #5
          klappt das jetzt perfekt mit der rtf-erzeugung?
          wäre nämlich daran interessiert...
          INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


          Kommentar


          • #6
            Jep, das klappt.

            Hier nochmal das komplette Scriptchen.

            PHP-Code:
            <?
            //    RTF lesen
            //    ---------
                
                
            //    RTF-Template einlesen
                $tplHandle=fopen('rtf_file.rtf','r');
                $tpl=fread($tplHandle,filesize('rtf_file.rtf'));
                fclose($tplHandle);
                
            //    Bild einlesen
                $b=fopen("test.jpg","rb");
                $imgData=getimagesize("test.jpg");
                
            //    RTF-Komandos für Bild
                $neubildPre="{\\*\\shppict{\\pict \\jpegblip \\picw".$imgData[0]." \\pich".$imgData[1]." \\wbmbitspixel24 ";
                while (!feof($b)) {
                    $neubild.= fread($b, filesize("test.jpg"));
                }
                
            //    Binär-Daten in Hex-Daten wandeln
                $hex=bin2hex($neubild);
                
            //    RTF-Ausgabe aufbereiten
                $bildDat=$neubildPre.$hex."}}";
                
            //    Den Platzhalter %bild% im Template durch die Bild-Daten ersetzen
                $tpl=ereg_replace("%bild%",$bildDat,$tpl);
                
                header("Content-type: application/rtf");
                header("Content-Disposition: attachment; filename=lala.rtf");
                echo $tpl;
            ?>
            Wie gesagt: Vorher ein RTF-File anlegen in dem die Template-Variablen drinstehen. Die kann man dann einfach ersetzen. Und das mit dem Bild klappt so auch. Was für ein Amok bis das so weit war.

            Gruss

            Yezariel
            mens agitat molem

            Kommentar


            • #7
              wird das bild jetzt auch in der rtf gespeichert?

              wie muss die var im rtf aussehen?

              du siehtst, ich bin neugierig ...
              INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


              Kommentar


              • #8
                @yezariel

                schieb doch bitte mal ein ZIP mit Source und Demo File hoch (wenn möglich bitte ins Code-Schnipsel Forum)

                merci
                berni

                php-Entwicklung | ebiz-consult.de
                PHP-Webhosting für PHP Entwickler | ebiz-webhosting.de
                die PHP Marktplatz-Software | ebiz-trader.de

                Kommentar


                • #9
                  Hui!

                  Da hab ich aber was gebaut, was? Cool!

                  Bin ja froh wenn's Leuten hilft. Ich schieb's gleich ins Code-Schnippsel Forum.

                  @Abraxax: Die Var im RTF-Dokument kannst du eigentlich frei wählen. Mach einfach eine Word-Datei auf, schreib irgendwo z.B. den String %bild% rein und speichere das ganze dann als RTF. Dann das ganze mit dem PHP-Script einlesen und per ereg_replace oder was auch immer du nehmen möchtest, den String "%bild%" durch den generierten RTF-Bild-String ersetzen. Fertig.

                  Gruss

                  Yezariel.
                  mens agitat molem

                  Kommentar


                  • #10
                    alles klar. das ist ja einfach...

                    Bin ja froh wenn's Leuten hilft. Ich schieb's gleich ins Code-Schnippsel Forum.
                    ja mache das. nach rtf sind schon ein paar fragen gewesen. du hast dich ja elegant um die erzeugung eines komplettes rtf gedrück, da du einfach ein template erstellt hast...
                    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                    Kommentar


                    • #11
                      Naja, ich habe mich nicht wirklich gedrückt. Ich hatte einfach das Problem, dass der Kunde der das Script bekommt, Word-Dokumente hat, die er gerne mit Inhalten aus einer Datenbank füllen will. Das Problem war halt, wenn ich einfach die Word-Dokumente in HTML nachgebaut habe und die HTML-Files als normale Templates genommen und dann wieder als .doc ausgegeben habe, wurden eingesetzte Bilder nicht mehr angezeigt, sobald das Word-Dokument auf der Festplatte des Users abgespeichert wurde und die Internet Verbindung nicht mehr da war. Ist klar. Das Bild war ja nur durch ein img-Tag eingebaut und der Link funktioniert dann ja nicht mehr. Also brauchte ich eine Methode, wie ich die Bilddaten fest mit der Datei verankere. Und die einzige Möglichkeit sah ich in RTF-Files...

                      Natürlich könnte man das bestimmt eleganter mit PDF's lösen. Aber es waren halt Word-Dokumente gewünscht... und der Kunde ist ja König.

                      Das Code-Schnippsel ist übrigens oben...

                      Gruss

                      Yezariel
                      mens agitat molem

                      Kommentar


                      • #12
                        echt genial das ding ...
                        INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                        Kommentar


                        • #13


                          Danke für die Blumen.

                          Gruss

                          Yezariel
                          mens agitat molem

                          Kommentar


                          • #14
                            Kann mir jemadn sagen, wo ich das Code-Schnippsel finde?
                            Irgendwie find ich's nicht.

                            Danke
                            Drillmill

                            Kommentar


                            • #15
                              ganz einfach suchen nach rtf im CS-Forum....

                              naja aber hier der link...

                              http://www.php-resource.de/forum/sho...&highlight=rtf
                              Für Rechtschreibfehler übernehme ich keine Haftung!

                              Kommentar

                              Lädt...
                              X