RTF in HTML mit PHP

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

  • #16
    Hi,
    das Skript muss angepasst werden, da es für die Verwendung auf der Kommandozeile geschrieben wurde.

    Ich habe das mal gemacht, allerdings nicht getestet.
    Der Aufruf müsste dann so lauten:
    Code:
    rtf2htm.php?rtf=input_file.rtf&html=output_file.html
    Sollen Absätze in <P>-Paragraphs überführt werden, muss man das ganze so aufrufen:
    Code:
    rtf2htm.php?rtf=input_file.rtf&html=output_file.html&par=1
    Das Teil ist recht wild programmiert. Egal. Die eigentliche Arbeit mach das Skript in den Include-Dateien die jeweils mit require eingebunden werden und $input ändern. Wild! Spaghetti-Code at it´s best! Naja, da könnte man aber was draus machen. Vielleicht ne schöne Klasse schreiben. Vielleicht setze ich mal ran, wenn ich Zeit habe.

    Ersetze mal die rtf2htm.php durch folgendes Skript.


    PHP-Code:
    <?
    /*
    #    This program is free software; you can redistribute it and/or modify
    #    it under the terms of the GNU General Public License as published by
    #    the Free Software Foundation; either version 2 of the License, or
    #    (at your option) any later version.
    #
    #    This program is distributed in the hope that it will be useful,
    #    but WITHOUT ANY WARRANTY; without even the implied warranty of
    #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    #    GNU General Public License for more details.
    #
    #    You should have received a copy of the GNU General Public License
    #    along with this program; if not, write to the Free Software
    #    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
    #
    #    (C) Martin Mevald, 2002, 2003, 2004
    #    [email]martinmv@penguin.cz[/email]
    #    [url]http://www.penguin.cz/~martinmv/[/url]
    */

    $par_is_p=0;
    $no_small_footnotes=0;
    $count=0;

    if ($_GET['par']) {
        $par_is_p=1;
        $count++;
        }

    if ($_GET['nosmall']) {
        $no_small_footnotes=1;
        $count++;
        }

    if (($argc-$count)!=3) {
    echo "Usage:   rtf2htm.php?rtf=input_file.rtf&html=output_file.html[&par=1][&nosmall=1]\n";
    echo "&par=1 - translate all paragraphs as \"p\" html command\n";
    echo "&nosmall=1 - footnotes: font size as normal text\n\n";
    exit; 



    @$fd=fopen($_GET['rtf'],"r");

    if ($fd==NULL) {
    echo "File ".$_GET['rtf']." not found.\n\n";
    exit;

    }

    $input = fread ($fd,filesize($_GET['rtf']);

    fclose ($fd);

    require("rtfimages_correc.php");

    $input = $output;

    require("rtfimages.php");

    /*$output = $input;*/

    require("rtftohtm.php");

    $input=$output;
    require("htmlparser.php");

    $input=$output;
    require("small_meta.php");


    @$fd=fopen($_GET['html'],"wb");

    if ($fd==NULL) {
    echo "I can't write to file ".$_GET['html'].".\n\n";
    exit;
    }

    $text="<!DOCTYPE html public \"-//w3c//dtd html 4.0 transitional//cs\">
    <html>
    <head>
    <meta HTTP-Equiv=\"Content-Type\" CONTENT=\"text/html; charset=iso-8859-2\">
    </head>
    <body text=\"#000000\" bgcolor=\"#FFFFFF\">
    <font face=\"Verdana, Helvetica CE, Arial CE, Helvetica, Arial\">
    <font size=\"2\">

    ";

    fwrite($fd,$text);
    fwrite($fd,$output);

    $text="
    </body>
    </html>";

    fwrite($fd,$text);


    fclose($fd);
    ?>
    Alles ohne Gewähr.
    Ich denke, also bin ich.
    Manche sind trotzdem!

    Kommentar


    • #17
      Vielen Dank !!! Es klappt!!!
      ich werd es nur noch ein wenig umproggen, dass ich meine Variable (Inhalt aus DB) dierekt an eine Funktion übergebe.
      Also ohne es ich eine Datei zu schreiben;

      Kommentar


      • #18
        Original geschrieben von Baumschule1234
        Vielen Dank !!! Es klappt!!!
        Prima, dann hab ich ja ´nen Betatester gefunden. Ok, dann werd ich da mal ne Klasse oder einfache Funktion draus bauen.
        Ich denke, also bin ich.
        Manche sind trotzdem!

        Kommentar


        • #19
          sag bescheid wenn du fertig bist...

          Kommentar


          • #20
            Hab noch ein Fehler entdeckt....
            bei 3. Auftruf der Funktion zum Umwandeln spinnt er rum:

            Hier lasse ich einfach mal den selber RTF-Code 10 mal in einer Schleife umwandeln...
            PHP-Code:
            <?
            include('rtftohtml.php');
            for($i=0;$i<10;$i++)
            {
               $input="{\rtf1\ansi\ansicpg1252\deff0\deftab720{\fonttbl{\f0\fswiss MS Sans Serif;}{\f1\froman\fcharset2 Symbol;}{\f2\fswiss Arial;}{\f3\fswiss Arial;}{\f4\fswiss\fcharset1 MS Sans Serif;}} {\colortbl\red0\green0\blue0;} \deflang1031\horzdoc{\*\fchars }{\*\lchars }\pard\plain\f2\fs20 Zuschnitt/Nut/Stufenfalz \par } ";
               $input= rtf2html($input);
               echo("OUTPUT:<br>$input");
            }
            ?>
            Und hier die Funktion:
            PHP-Code:
            function rtf2html($input)
            {
               require(
            "rtf2htm/rtfimages_correc.php");
               
            $output $input;
               
            $input $output;
               require(
            "rtf2htm/rtfimages.php");
               
            $output $input;
               require(
            "rtf2htm/rtftohtm.php");
               
            $input=$output;
               require(
            "rtf2htm/htmlparser.php");
               return(
            $input);

            Das ganze funktionier 2 mal;und beim 3. Durchlauf das hier:

            Fatal error: Cannot redeclare rtfpicturesearch() (previously declared in C:\Server\www\Auftragsverwaltung\rtf2htm\rtfimages.php:28) in C:\Server\www\Auftragsverwaltung\rtf2htm\rtfimages.php on line 27


            Kann mir dea einer erklären??

            Kommentar


            • #21
              Du mußt deinen Code umschreiben. Du kannst eine Funktion logischerweise nur ein definieren, und das tust du offenbar in einem der includes. Funktionsdefinitionen aus den Includes rausholen und in eins stecken, das nur einmal aufgerufen wird.

              Normalerweise gibts für den fall include_once(), aber das wird dir hier nicht helfen, da du wahrscheinlich ja Code aus den includes direkt ausführen mußt.

              Kommentar


              • #22
                Hab Geduld. Ich bin gerade dabei die Klasse fertig zu machen. Ich poste dann einen Link zum Download.
                Ich denke, also bin ich.
                Manche sind trotzdem!

                Kommentar


                • #23
                  Oh Mann! Was hab ich mir da nur eingebrockt. Den Quellcode von Mevald in eine ordentliche Klasse zu bringen bedeutet eigentlich einen komplette rewrite des Codes. 5 Millionnen globale Variablen. Ich bin am Wochenende fast wahnsinnig geworden.
                  @Baumschule1234: Die Klasse wird noch etwas auf sich warten lassen. Sorry!
                  Ich denke, also bin ich.
                  Manche sind trotzdem!

                  Kommentar


                  • #24
                    Ja, iss schon ok; lass dir nur Zeit.
                    Sag mir dann aber bitte bescheid (schick mir ne PM)

                    Danke für deine Bemühungen.....

                    Kommentar


                    • #25
                      Hallo,
                      wie schauts denn aus mit der Class ??? So langsam wird es ziemlich dringend bei mir... Ich brauch irgend ne Funktion die auch die Sonderzeichen beachtet....

                      Kommentar


                      • #26
                        Sorry,
                        das wird die nächsten Wochen nix. Ich bin mit Arbeit ziemlich zu.
                        Ich denke, also bin ich.
                        Manche sind trotzdem!

                        Kommentar


                        • #27
                          mhm, schade...

                          Kennt sonst keiner Möglichkeiten wie ich das mit den Sonderzeichen geregelt bekomme??? Evt. mit ereg-repalce???

                          Bitte, ich bin für jeden Tip dankbar!!!!

                          Kommentar


                          • #28
                            Umlaute für rtfclass.php

                            in der classe die function flusSpecial einfach wie folgt erweitern mit den bekannten Umlauten

                            function flushSpecial( $special) {

                            if( strlen( $special) == 2) {
                            if( $this->wantXML) {
                            $this->out .= "<special value=\"".$special."\"/>";
                            } else {
                            switch( $special) {
                            // Sonderzeichen
                            case "e4": $this->out .= "ä"; break; // ä
                            case "c4": $this->out .= "Ä";break; // Ä
                            case "f6": $this->out .= "ö"; break; // ö
                            case "d6": $this->out .= "Ö"; break; // Ö
                            case "fc": $this->out .= "ü"; break; // ü
                            case "dc": $this->out .= "Ü"; break; // Ü
                            case "df": $this->out .= "ß"; break; // ß
                            case "80": $this->out .= "&euro;"; break; // euro
                            case "b0": $this->out .= "&deg;"; break; // grad
                            case "b5": $this->out .= "&micro;"; break; // micro
                            case "a7": $this->out .= "&sect;"; break; // pargraph
                            case "c1": $this->out .= "&Aacute;"; break;
                            case "e1": $this->out .= "&aacute;"; break;
                            case "c0": $this->out .= "&Agrave;"; break;
                            case "e0": $this->out .= "&agrave;"; break;
                            case "c9": $this->out .= "&Eacute;"; break;
                            case "e9": $this->out .= "&eacute;"; break;
                            case "c8": $this->out .= "&Egrave;"; break;
                            case "e8": $this->out .= "&egrave;"; break;
                            case "cd": $this->out .= "&Iacute;"; break;
                            case "ed": $this->out .= "&iacute;"; break;
                            case "cc": $this->out .= "&Igrave;"; break;
                            case "ec": $this->out .= "&igrave;"; break;
                            case "d3": $this->out .= "&Oacute;"; break;
                            case "f3": $this->out .= "&oacute;"; break;
                            case "d2": $this->out .= "&Ograve;"; break;
                            case "f2": $this->out .= "&ograve;"; break;
                            case "da": $this->out .= "&Uacute;"; break;
                            case "fa": $this->out .= "&uacute;"; break;
                            case "d9": $this->out .= "&Ugrave;"; break;
                            case "f9": $this->out .= "&ugrave;"; break;
                            case "80": $this->out .= "€"; break; // euro
                            case "d1": $this->out .= "&Ntilde;"; break;
                            case "f1": $this->out .= "&ntilde;"; break;
                            case "c7": $this->out .= "&Ccedil;"; break;
                            case "e7": $this->out .= "&ccedil;"; break;
                            case "dc": $this->out .= "&Uuml;"; break;
                            case "fc": $this->out .= "&uuml;"; break;
                            case "bf": $this->out .= "&#191;"; break;
                            case "a1": $this->out .= "&#161;"; break;
                            case "b7": $this->out .= "&middot;"; break;
                            case "a9": $this->out .= "&copy;"; break;
                            case "ae": $this->out .= "&reg;"; break;
                            case "ba": $this->out .= "&ordm;"; break;
                            case "aa": $this->out .= "&ordf;"; break;
                            case "b2": $this->out .= "&sup2;"; break; // hoch2
                            case "b3": $this->out .= "&sup3;"; break; // hoch3

                            }
                            // $this->out .= "$special"; // HTM Zeichentabelle unter: http://selfhtml.teamone.de/html/referenz/zeichen.htm
                            }

                            Kommentar


                            • #29
                              Original geschrieben von hand
                              Nimm das Skript "rtfclass.php"
                              und füge ganz am Ende vor dem ?> folgenden Code ein:
                              Code:
                              $InpRTF = "input.rtf"; // Definiere hier den RTF-Filename
                              if (file_exists($InpRTF)) {
                              	$fp = fopen($InpRTF,"r"); 
                              	while (!feof($fp)) { 
                              		$rtf .= fgets($fp, 4096);
                              	}
                              	fclose($fp); 
                              	// $r = new rtf( stripslashes($rtf)); // entweder diese Zeile
                              	$r = new rtf($rtf); // oder diese Zeile verwenden
                              	$r->output("html"); // hier kannst Du auch XML angeben
                              	$r->parse();
                              	if( count( $r->err) == 0) {
                              		echo $r->out;
                              	}
                              } else {
                              	print "Inputfile: <strong>$InpRTF</strong> nicht gefunden.";
                              }
                              Entweder funktioniert die Zeile
                              $r = new rtf( stripslashes($rtf));
                              oder
                              $r = new rtf($rtf);

                              Im Original war die erste angegeben, hat aber bei mir nicht gefunzt, deshalb habe ich das stripslashes entfernt.
                              Bis auf Umlaute funktioniert die Angelegenheit. Hatte heute auch den ersten Kontakt mit dieser RTF2HTML-Klasse.

                              Viel Glück
                              hallo,
                              auch wenn das letzt posting in diesem thema schon etwas her is, muss ich hier noch was reinschreiben.
                              die klasse funktioniert soweit. nur gibt mir das script leider nur die erste zeile des rtf dokuments aus. hab auch den quellcode der klasse überflogen, bin aber bis jetzt noch nicht dahinter gekommen woran es liegt.

                              vielleicht hat ja noch jemand nen tip, ich mach mich erstmal weiter auf die suche

                              mfg
                              agentor

                              Kommentar


                              • #30
                                weil ich da gerade was vonwegen "rtfimages.php" lese - kann das script etwa auch bilddaten aus RTFs korrekt konvertieren?

                                Kommentar

                                Lädt...
                                X