Можно ли отобразить файл RTF внутри веб-страницы с помощью PHP? - PullRequest
13 голосов
/ 24 марта 2009

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

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

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

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

echo $output;

Ответы [ 7 ]

8 голосов
/ 24 марта 2009

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

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

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

Вам потребуется загрузить и установить эту программу на свой веб-сервер, разрешить пользователю загружать файл во временный каталог, а затем вызвать приложение командной строки из 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 и отобразите их. Неплохая стратегия. Обратите внимание, что вам, вероятно, потребуется удалить заголовок, тело и, возможно, другие теги, если вы собираетесь отображать контент на другой веб-странице.

4 голосов
/ 18 сентября 2015

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

3 голосов
/ 15 сентября 2014

Вам нужен конвертер RTF в HTML, написанный на PHP. Я думаю, что эта страница содержит ваше решение:

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

2 голосов
/ 24 марта 2009

Во-первых: вы неправильно указали тип контента. для RTF это text/rtf

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

1 голос
/ 24 марта 2009

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

0 голосов
/ 13 сентября 2011

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

0 голосов
/ 24 марта 2009

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

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

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

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