14

我有一个 RTF 文件,我想在标签被用户输入替换后显示在网页中。

我希望能够显示 RTF 文件,而不必在显示之前将其转换为某些东西。

每次我现在尝试它时,它都会给我弹出打开/保存框,即使我告诉它内联显示它:

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

echo $output;
4

7 回答 7

8

大多数浏览器不能可靠地显示 RTF 内容。可以将 RTF 解析为 HTML,然后在您的网页上显示 HTML 内容。

您需要某种程序来解析 RTF 并将其转换为 HTML。我假设它必须是免费的。我不知道任何可靠的免费 RTF 解析或 RTF 到 PHP 中的 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 并显示出来。不错的策略。请注意,如果您要在另一个网页中显示内容,您可能需要删除 head、body 和可能的其他标签。

于 2009-03-24T16:57:27.050 回答
4

您可能想查看https://github.com/tbluemel/rtf.js以了解客户端 RTF 渲染。它仍处于早期阶段,但它甚至可以渲染嵌入式图形。但是,对渲染嵌入式 WMF 图稿的支持仍然非常有限,并且需要浏览器支持该标签。

于 2015-09-18T13:41:44.547 回答
3

您需要一个用 PHP 编写的 RTF 到 HTML 转换器。我认为此页面包含您的解决方案:

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

于 2014-09-15T08:52:47.860 回答
2

首先:您的内容类型错误。对于 RTF 它是text/rtf

第二:您将只能内嵌显示这种类型的内容,这些内容可以由 Web 浏览器呈现。RTF 不是其中之一。因此,如果不进行转换,或者没有浏览器的某些插件,您将无法在线显示它。当然,转换可能是即时的。

于 2009-03-24T16:50:56.877 回答
1

网页只能包含 HTML。您需要一个像 flash 这样的浏览器插件来显示其他文件类型。例如,参见Scribd 。

于 2009-03-24T16:50:32.200 回答
0

这不完全是您问题的答案,但您可能想要做的一件事是从标题中删除“filename=mark.rtf”。如果我在标题中包含“文件名”,即使“内容处置”是“内联”,浏览器也会将某些内容视为下载。

于 2011-09-13T12:52:16.347 回答
-3

您不能只从 PHP 代码中输出文件。您需要从中提取数据,然后内联打印内容。

php 函数 'file_get_contents' 可以满足您的需要。功能手册在这里:http ://us2.php.net/filegetcontents

示例用法在这里:

$contents = file_get_contents('yourfile.rtf');
于 2009-03-24T16:34:49.710 回答