Is it possible to display an RTF file inside a web page using PHP?

僤鯓⒐⒋嵵緔 提交于 2019-11-26 16:36:01

问题


I have an RTF file that I want to display inside a web page after tags have been replaced with user input.

I would like to be able to display the RTF file without having to convert it to something before displaying it.

Every time I try it now it gives me the popup open/save box even though I am telling it to display it inline with:

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

echo $output;

回答1:


Most browsers won't reliably display RTF content. It IS possible to parse the RTF into HTML, and display the HTML content on your web page however.

You need some kind of program to parse RTF and convert it to HTML. I'm assuming it has to be free. I do not know of any reliable free RTF parsing or RTF to HTML libraries in PHP.

I recommend you use a command-line conversion program like RTF2HTML: http://sageshome.net/?w=downloads/soft/RTF2HTML.html

You would need to download and install this program on your webserver, allow the user to upload the file to a temp directory, and then call the command line application from PHP with 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);

Then, parse the results as HTML and display them. Not a bad strategy. Note that you will probably need to remove the head, body and possibly other tags if you're going to display the content inside another web page.




回答2:


You might want to check out https://github.com/tbluemel/rtf.js for client-side RTF rendering. It's still in its early stages but it renders even embedded graphics. Support for rendering embedded WMF artwork is still very very limited, though, and requires browser support for the tag.




回答3:


You needed an RTF to HTML converter written in PHP. I think this page contains your solution:

http://www.websofia.com/2014/05/a-working-rtf-to-html-converter-in-php/




回答4:


First: you've got your content-type wrong. for RTF it's text/rtf

Second: you'll only be able to display in-line this type of content, which can be rendered by the web browser. RTF is not one of these. So you won't be able to display it in-line without converting it, or without some plug-in for the browser. Of course conversion might be on-the-fly.




回答5:


Web pages can only contain HTML. You would need a browser plugin like flash to display other file types. See Scribd for example.




回答6:


This isn't exactly an answer to your question, but one thing you may want to do is remove the "filename=mark.rtf" from the header. I've had browsers treat something as a download if I include "filename" in the header, even if the "Content-Disposition" is "inline".




回答7:


You can't just output a file from within PHP code. You need to extract the data from it, then print the contents inline.

The php function 'file_get_contents' may do what you need. The functions manual is here: http://us2.php.net/filegetcontents

A sample usage is here:

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


来源:https://stackoverflow.com/questions/678192/is-it-possible-to-display-an-rtf-file-inside-a-web-page-using-php

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!