Подтвердить что ты не робот

Можно ли отображать RTF файл внутри веб-страницы с помощью PHP?

У меня есть файл RTF, который я хочу отображать на веб-странице после того, как теги были заменены на пользовательский ввод.

Я хотел бы иметь возможность отображать RTF файл, не преобразовывая его во что-то перед его отображением.

Каждый раз, когда я пытаюсь это сделать, он дает мне всплывающее окно open/save, хотя я говорю ему, чтобы он отображал его в строке:

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

echo $output;
4b9b3361

Ответ 1

В большинстве браузеров не будет отображаться RTF-контент. Возможно проанализировать RTF в HTML и отобразить содержимое HTML на вашей веб-странице.

Вам нужна какая-то программа для разбора RTF и преобразования ее в HTML. Я предполагаю, что это должно быть бесплатным. Я не знаю ни одного надежного бесплатного анализа RTF или RTF для HTML-библиотек в PHP.

Я рекомендую вам использовать программу преобразования командной строки, такую ​​как RTF2HTML: http://sageshome.net/?w=downloads/soft/RTF2HTML.html

Вам нужно будет загрузить и установить эту программу на своем веб-сервере, чтобы пользователь мог загрузить файл в каталог temp, а затем вызвать приложение командной строки из PHP с помощью 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);

Затем проанализируйте результаты как HTML и покажите их. Неплохая стратегия. Обратите внимание, что вам, вероятно, придется удалить голову, тело и, возможно, другие теги, если вы собираетесь отображать содержимое на другой веб-странице.

Ответ 2

Возможно, вы захотите проверить https://github.com/tbluemel/rtf.js для рендеринга RTF на стороне клиента. Он все еще находится на ранних стадиях, но он отображает даже встроенную графику. Тем не менее поддержка рендеринга встроенных изображений WMF все еще очень ограничена и требует поддержки браузера для тега.

Ответ 3

Во-первых: у вас неправильный тип содержимого. для RTF это text/rtf

Во-вторых: вы сможете отображать только этот тип контента, который может отображаться в веб-браузере. RTF не является одним из них. Таким образом, вы не сможете отображать его в режиме онлайн без его преобразования или без какого-либо подключаемого модуля для браузера. Конечно, преобразование может быть "на лету".

Ответ 5

Веб-страницы могут содержать только HTML. Для отображения других типов файлов вам понадобится плагин браузера, например flash. См. Scribd, например.

Ответ 6

Это не совсем ответ на ваш вопрос, но одна вещь, которую вы можете захотеть, - удалить из заголовка "filename = mark.rtf". У меня были браузеры, которые рассматривали что-то как загрузку, если я включаю "имя файла" в заголовок, даже если "Content-Disposition" является "inline".

Ответ 7

Вы не можете просто выводить файл из PHP-кода. Вам нужно извлечь данные из него, а затем распечатать содержимое inline.

Функция php 'file_get_contents' может делать то, что вам нужно. Руководство по функциям находится здесь: http://us2.php.net/filegetcontents

Пример использования здесь:

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