我有一个RTF文件,我希望在用户输入替换标签后在网页中显示该文件。
我希望能够显示RTF文件,而不必在显示之前将其转换为某些内容。
每次我尝试它现在它给我弹出打开/保存框,即使我告诉它显示内联:
header("Content-type: application/msword");
header("Content-Disposition: inline; filename=mark.rtf");
header("Content-length: " . strlen($output));
echo $output;
答案 0 :(得分:8)
大多数浏览器无法可靠地显示RTF内容。可以将RTF解析为HTML,然后在您的网页上显示HTML内容。
您需要某种程序来解析RTF并将其转换为HTML。我假设它必须是免费的。我不知道在PHP中有任何可靠的免费RTF解析或RTF到HTML库。
我建议您使用命令行转换程序,如RTF2HTML:http://sageshome.net/?w=downloads/soft/RTF2HTML.html
您需要在您的网络服务器上下载并安装此程序,允许用户将文件上传到临时目录,然后使用shell_exec()从PHP调用命令行应用程序:
$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);
然后,将结果解析为HTML并显示它们。不是一个坏策略。请注意,如果要在其他网页内显示内容,则可能需要删除头部,正文和其他可能的标记。
答案 1 :(得分:4)
您可能需要查看https://github.com/tbluemel/rtf.js以获取客户端RTF呈现。它仍然处于早期阶段,但它甚至呈现嵌入式图形。但是,对渲染嵌入式WMF图稿的支持仍然非常有限,并且需要浏览器支持标记。
答案 2 :(得分:3)
您需要一个用PHP编写的RTF到HTML转换器。我认为此页面包含您的解决方案:
http://www.websofia.com/2014/05/a-working-rtf-to-html-converter-in-php/
答案 3 :(得分:2)
首先:你的内容类型错了。对于RTF,它是 text/rtf
第二:你只能在线显示这种类型的内容,这些内容可以通过网络浏览器呈现。 RTF不是其中之一。因此,如果没有转换它,或者没有浏览器的插件,您将无法在线显示它。当然转换可能是即时的。
答案 4 :(得分:1)
网页只能包含HTML。你需要一个像flash这样的浏览器插件来显示其他文件类型。例如,请参阅Scribd。
答案 5 :(得分:0)
这不是您问题的答案,但您可能想要做的一件事是从标题中删除“filename = mark.rtf”。如果我在标题中包含“filename”,即使“Content-Disposition”是“inline”,我也有浏览器将某些内容视为下载内容。
答案 6 :(得分:-2)
您不能只从PHP代码中输出文件。您需要从中提取数据,然后内联打印内容。
php函数'file_get_contents'可以满足你的需要。功能手册在这里:http://us2.php.net/filegetcontents
示例用法如下:
$contents = file_get_contents('yourfile.rtf');