2009-03-24 4 views
12

Ich habe eine RTF-Datei, die ich in einer Webseite anzeigen möchte, nachdem die Tags durch Benutzereingaben ersetzt wurden.Ist es möglich, eine RTF-Datei in einer Webseite mit PHP anzuzeigen?

Ich würde gerne in der Lage sein, die RTF-Datei anzuzeigen, ohne sie vor der Anzeige in etwas zu konvertieren.

Jedes Mal, wenn ich es jetzt versuchen, es mir das Popup öffnen/speichern Box gibt, obwohl ich es sage es anzuzeigen inline mit:

header("Content-type: application/msword"); 
header("Content-Disposition: inline; filename=mark.rtf"); 
header("Content-length: " . strlen($output)); 

echo $output; 
+0

Jeder schlägt vor, dass dies nicht möglich ist, aber ich verstehe, was Mark hinterher will. Manchmal zeigt der Browser ein PDF- oder Word-Dokument an, das in den Browser eingebettet ist. Nicht sicher, warum es manchmal so ist. Ich dachte, inline/attachment war das einzige, was dieses Verhalten kontrollierte. –

+0

Wird der Benutzer MS Word immer installiert haben? –

+0

GENAU !!!! Du verstehst, wonach ich suche. Ich kann nicht garantieren, dass der Benutzer Word installiert hat. Deshalb wollte ich es inline darstellen. Ich denke, ich muss es in etwas anderes wie JPG umwandeln. Letztendlich muss ich es in PDF umwandeln, aber das ist ein anderes Problem. – Mark

Antwort

7

Die meisten Browser zeigen RTF-Inhalte nicht zuverlässig an. Es ist möglich, das RTF in HTML zu analysieren und den HTML-Inhalt auf Ihrer Webseite anzuzeigen.

Sie benötigen eine Art von Programm, um RTF zu analysieren und in HTML zu konvertieren. Ich gehe davon aus, dass es frei sein muss. Ich kenne kein zuverlässiges kostenloses RTF-Parsing oder RTF für HTML-Bibliotheken in PHP.

Ich empfehle Ihnen, verwenden Sie eine Befehlszeilenkonvertierungsprogramm wie RTF2HTML: http://sageshome.net/?w=downloads/soft/RTF2HTML.html

Sie würden dieses Programm auf Ihrem Webserver müssen herunterladen und installieren, kann der Benutzer die Datei in ein temporäres Verzeichnis zu laden, und dann rufen die Kommandozeilen-Anwendung von PHP mit shell_exec():

$html_output_path = '/path/for/processing/files/' 
$html_output_filename = $username . $timestamp; 
if (is_uploaded_file($_FILES['userfile']['tmp_name']) 
{ 
    shell_exec('rtf2html ' . 
    escapeshellarg($_FILES['userfile']['tmp_name']) . " " . 
    $html_output_path . $html_output_filename); 
} 
$html_to_display = file_get_contents($html_output_path . 
    $html_output_filename); 

Dann die Ergebnisse als HTML analysieren und anzeigen. Keine schlechte Strategie. Beachten Sie, dass Sie wahrscheinlich die Kopf-, Körper- und möglicherweise andere Tags entfernen müssen, wenn Sie den Inhalt auf einer anderen Webseite anzeigen möchten.

+2

Was ist mit der (verrückt ich weiß) Anforderung: "Ich möchte in der Lage sein, die RTF-Datei anzuzeigen, ohne es in etwas konvertieren, bevor es angezeigt wird." ? –

+3

Ja, ich habe die Anforderung. Anstatt ihm nur zu sagen, dass er SOL ist, dachte ich, ich würde ihm sagen, dass er SOL ist, während er eine Lösung anbietet, die eine Chance hat zu arbeiten. Ich nahm an, dass er einfach nicht selbst einen RTF-Parser implementieren möchte. Auf diese Weise muss er nicht. – danieltalsky

-2

können Sie nicht nur eine Datei aus PHP-Code ausgegeben . Sie müssen die Daten daraus extrahieren und dann die Inhalte inline ausdrucken.

Die PHP-Funktion 'file_get_contents' kann tun, was Sie brauchen. Die Funktionen Handbuch ist hier: http://us2.php.net/filegetcontents

Eine Probe Nutzung ist hier:

$contents = file_get_contents('yourfile.rtf'); 
+0

tut dies die gleiche Sache wie die Verwendung von fread(); Es gibt den gesamten RTF-Code anstelle des tatsächlichen RTF-Dokuments aus. kann ich sogar ein RTF-Dokument auf einer Webseite anzeigen oder muss ich es zuerst in etwas anderes umwandeln? – Mark

+0

Soweit ich weiß, müssen Sie zuerst den Inhalt herausholen. Ansonsten weiß der Browser nicht, was er damit machen soll. –

+0

Ja, das wird gerade nicht funktionieren. Wenn Sie die Ergebnisse dieses Aufrufs auf dem Bildschirm drucken, wird der Benutzer eine Reihe von RTF-Escape-Sequenzen sehen, die nicht wie das erwartete Dokument aussehen. – danieltalsky

1

Webseiten nur HTML enthalten. Sie benötigen ein Browser-Plugin wie Flash, um andere Dateitypen anzuzeigen. Siehe zum Beispiel Scribd.

+0

Ein Nitpick: Sie haben meistens Recht, aber die meisten Browser sind auch in der Lage, XML (die meiste Zeit) und natürlich reinen Text zu rendern. –

+0

Plus, mit einem Acrobat-Plugin können Browser PDF anzeigen. –

2

Erstens: Sie haben Ihren Inhaltstyp falsch. Für RTF ist es text/rtf

Zweitens: Sie werden nur in der Lage sein, diese Art von Inhalten anzuzeigen, die vom Webbrowser gerendert werden können. RTF gehört nicht dazu. Sie können es also nicht in der Zeile anzeigen, ohne es zu konvertieren oder ohne ein Plug-in für den Browser. Natürlich könnte die Konvertierung im laufenden Betrieb erfolgen.

+0

+1 für "Korrekte RTF-Inhalt-Typ es ist Text/RTF" –

0

Dies ist nicht genau eine Antwort auf Ihre Frage, aber eine Sache, die Sie vielleicht tun möchten, ist die "filename = mark.rtf" aus der Kopfzeile entfernen. Ich habe Browser etwas als Download behandeln, wenn ich "Dateiname" in die Kopfzeile einfügen, auch wenn die "Content-Disposition" "Inline" ist.

4

Vielleicht möchten https://github.com/tbluemel/rtf.js auszuchecken für die clientseitige RTF-Rendering.Es ist noch in den frühen Stadien, aber es macht sogar eingebettete Grafiken. Die Unterstützung für das Rendern eingebetteter WMF-Grafiken ist jedoch immer noch sehr eingeschränkt und erfordert Browserunterstützung für das Tag.