Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
RTF in HTML mit PHP [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
RTF in HTML mit PHP


 
Maikel
14-01-2002, 11:02 
 
OK Leute, anscheinend bin ich blind wie ein Maulwurf, aber ich weiss, dass es geht. Ich habe den ganzen verdammten Morgen danach gesucht, aber ich habe verdammtnochmal nix gefunden! Aber es geht bestimmt: RTF-Files mit PHP in HTML umwandeln!!

Ich erbitte Eure Hilfe, bevor ich noch verzweifle!!!

Euer Kurz-Vorm-Verzweifeln Maikel

 
hand
14-01-2002, 11:08 
 
A simple php based rtf to html converter
http://phpclasses.upperdesign.com/browse.html/package/119

 
Maikel
14-01-2002, 12:46 
 
Danke für den Tipp, ich habe mia das Script mal angeschaut, und komme damit irgendwie überhaupt nicht zurecht!
Was genau muss ich denn nun machen, damit mein rtf-file in html umgewandelt wird?

mfg
Maikel

 
hand
14-01-2002, 16:15 
 
Nimm das Skript "rtfclass.php"
und füge ganz am Ende vor dem ?> folgenden Code ein:

$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

 
Maikel
14-01-2002, 17:07 
 
OK, habe ich gemacht, aber es kommt immer noch der selbe Fehler, wie ich ihn auch schon vorher hatte:

Warning: Undefined variable: rtf in c:/server/start.php on line 614

Warning: Undefined index: fonttbl_want_fcharset in c:/server/start.php on line 385

Warning: Undefined index: fonttbl_current_read in c:/server/start.php on line 402


misstdreck vadammter!

 
hand
14-01-2002, 17:33 
 
Hole dir das Skript über einen anderen Weg:
http://guru.josefine.at/~mfischer/developing/php/rtf/rtfclass.phps

Ich habe das Skript so genommen wie es ist, als "rtfclass.php" abgelegt und am Ende was ich oben gepostet hinzugefügt und es läuft. Mach das bitte auch so.

Probiers bitte nochmal, dauert ja nicht lange, eine Sache von zwei Minuten.

Wenn der Fehler noch immer auftritt
$InpRTF = "input.rtf";
$rtf = ""; // Füge diese Zeile bitte noch ein
if (file_exists($InpRTF)) {

Probiere es dann mit dieser Änderung.

Beim nächsten mal Poste bitte neben der Fehlermeldung auch die Zeile die beanstandet wird, damit ich mich orientieren kann.

 
Maikel
16-01-2002, 12:12 
 
Danke für Deine Hilfe, aber ich habe jetzt eine andere Lösung gefunden :-)
Ich benutze einfach martha18 um die rtf-Datei in HTML umzuwandeln. Das klappt ganz gut. Jetz muß ich nur noch einen PHP-Befehl finden, der es mir erlaubt .com Dateien auszuführen. :-/

Also, noch mal vielen Dank für Deine Bemühung!

Mit besten Grüßen...
Maikel

 
hand
16-01-2002, 13:29 
 
10.2. Wie kann ich ein externes Programm von PHP aus starten?
http://www.koehntopp.de/php/open_exec.html#php-externes-programm

`dir *.*`;

 
inside3k
09-01-2004, 01:12 
 
hallo, hat einer das script noch? unter der angegebenen url kann ich es nicht mehr finden, kommt andauernd 404.
brauche es dringend!

danke und grüße

inside3k

 
Baumschule1234
05-07-2004, 17:39 
 
Mal ne andere Frage; ich muss auch Rtf Code als HTML darstellen.
Mein RTF Text kommt aber nicht aus einer Datei sondern aus einem Datenbankfeld....Wie kann ich das jetzt machen??? Ich hab nämlich keine Lust erst eine Datei zu erstellen....

 
cst
07-07-2004, 09:20 
 
Original geschrieben von Baumschule1234
Mal ne andere Frage; ich muss auch Rtf Code als HTML darstellen.
Mein RTF Text kommt aber nicht aus einer Datei sondern aus einem Datenbankfeld....Wie kann ich das jetzt machen??? Ich hab nämlich keine Lust erst eine Datei zu erstellen....

Hmmm... ok!
Folgende Annahmen:
1. Gehen wir davon aus du hast eine mysql Datenbank.
2. Die Daten liegen in der Tabelle `rtf` mit den Feldern id (int) und rtfcontent (text).
3. Du liest den Datensatz mit der ID 1 aus
4. Der Code den hand gepostet hat ist korrekt.


$dbhost = 'meinserver.meinedomain.tld'; // hier dein Host rein
$dbname = 'meinedatenbank'; // naja ist klar oder
$dbuser = 'ich';
$dbpass = 'geheim';

// Datenbankverbindung aufbauen
$db = mysql_connect($dbhost, $dbuser, $dbpass)
or die("Keine Verbindung zum Datenbank-Sever");

mysql_select_db($dbname)
or die("Keine Verbindung zur Datenbank");

// Ersten Datensatz auslesen
$sql = 'SELECT `rtfcontent` FROM `rtf` WHERE id = 1';
$result = mysql_query($sql);
if ($arrRTF = mysql_fetch_array($result)) {

// Ok, wir haben den Datensatz gefunden

// $r = new rtf( stripslashes($arrRTF['rtfcontent'])); // entweder diese Zeile
$r = new rtf($arrRTF['rtfcontent']); // oder diese Zeile verwenden
$r->output("html"); // hier kannst Du auch XML angeben
$r->parse();
if( count( $r->err) == 0) {
echo $r->out;
}
} else {
echo 'Datensatz nicht gefunden.';
}

Ich hab´s natürlich nicht getestet, sollte aber eigentlich ok sein.
Der Punkt ist ja nur irgendwie den Inhalt des RTF-Dokuments zu bekommen. Der steht nach unserer Datenbankabfrage in $arrRTF['rtfcontent']. Das übergibst Du an den Constructor der Klasse rtf ($r = new rtf($arrRTF['rtfcontent']); Der Rest entspricht ja dem was hand gepostet hat.
Klar?

-christoph-

 
pekka
07-07-2004, 10:05 
 
Original geschrieben von Maikel
Danke für Deine Hilfe, aber ich habe jetzt eine andere Lösung gefunden :-)
Ich benutze einfach martha18 um die rtf-Datei in HTML umzuwandeln. Das klappt ganz gut.

Martha18? Wer ist das? Ist das der Nickname deiner Freundin?
;)

 
Baumschule1234
07-07-2004, 16:42 
 
Erst mal Danke @ cst;

Aber ich habe da noch ein Problem; Gibt es noch eine andere RTFClass ???
Die, die hier verlink funktioniert zwar, aber sie entfernt Sonderzeichen und "übersieht manche" Formatierungsangaben...

 
cst
08-07-2004, 12:37 
 
Original geschrieben von Baumschule1234
Aber ich habe da noch ein Problem; Gibt es noch eine andere RTFClass ???
Die, die hier verlink funktioniert zwar, aber sie entfernt Sonderzeichen und "übersieht manche" Formatierungsangaben... [/B]

Schau Dir mal das Teil an:
http://www.gnu.org/directory/webauth/htmlconvert/rtf2html.html

 
Baumschule1234
09-07-2004, 12:04 
 
Aha, wenn mir jetzt noch mal einer ein Beispiel posten würde....

So richtig versteh ich das nämlich nicht...

 
cst
09-07-2004, 12:53 
 
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:

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:

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.



<?
/*
# 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
# martinmv@penguin.cz
# http://www.penguin.cz/~martinmv/
*/

$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.

 
Baumschule1234
09-07-2004, 13:46 
 
Vielen Dank !!! Es klappt!!! :D
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;

 
cst
09-07-2004, 14:08 
 
Original geschrieben von Baumschule1234
Vielen Dank !!! Es klappt!!! :D

Prima, dann hab ich ja ´nen Betatester gefunden. Ok, dann werd ich da mal ne Klasse oder einfache Funktion draus bauen.

 
Baumschule1234
09-07-2004, 14:35 
 
sag bescheid wenn du fertig bist...

 
Baumschule1234
09-07-2004, 17:27 
 
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...

<?
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:

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

 
pekka
09-07-2004, 18:56 
 
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.

 
cst
10-07-2004, 19:33 
 
Hab Geduld. Ich bin gerade dabei die Klasse fertig zu machen. Ich poste dann einen Link zum Download.

 
cst
12-07-2004, 07:58 
 
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!

 
Baumschule1234
20-07-2004, 10:07 
 
Ja, iss schon ok; lass dir nur Zeit.
Sag mir dann aber bitte bescheid (schick mir ne PM)

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

 
Baumschule1234
26-08-2004, 15:13 
 
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....

 
cst
26-08-2004, 15:15 
 
Sorry,
das wird die nächsten Wochen nix. Ich bin mit Arbeit ziemlich zu.

 
Baumschule1234
26-08-2004, 15:39 
 
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!!!!

 
Juncker
16-12-2006, 08:24 
 
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 .= "¿"; break;
case "a1": $this->out .= "¡"; 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
}

 
agentor
19-06-2007, 11:04 
 
Original geschrieben von hand
Nimm das Skript "rtfclass.php"
und füge ganz am Ende vor dem ?> folgenden Code ein:

$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

 
phobia
06-08-2007, 16:10 
 
weil ich da gerade was vonwegen "rtfimages.php" lese - kann das script etwa auch bilddaten aus RTFs korrekt konvertieren?


Alle Zeitangaben in WEZ +2. Es ist jetzt 19:43 Uhr.