2009-03-24 6 views
12

Tengo un archivo RTF que quiero mostrar dentro de una página web después de que las etiquetas hayan sido reemplazadas por las entradas del usuario.¿Es posible visualizar un archivo RTF dentro de una página web usando PHP?

Me gustaría poder mostrar el archivo RTF sin tener que convertirlo a algo antes de mostrarlo.

Cada vez que intento ahora me da la ventana emergente abierta/caja a pesar de que la estoy contando para mostrarla en línea con ahorrar:

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

echo $output; 
+0

Todo el mundo está sugiriendo que esto no es posible, pero entiendo lo que Mark está buscando. En ocasiones, el navegador mostrará un documento PDF o Word en línea, incrustado en el navegador. No estoy seguro de por qué a veces lo hace. Pensé en línea/archivo adjunto era lo único que controlaba este comportamiento. –

+0

¿El usuario tendrá MS Word instalado siempre? –

+0

EXACTAMENTE !!!! Tú entiendes lo que estoy buscando. No puedo garantizar que el usuario tenga Word instalado. Es por eso que quería mostrarlo en línea. Supongo que tendré que convertirlo a algo más como JPG. En última instancia, tendré que convertirlo a PDF, pero ese es un problema diferente. – Mark

Respuesta

7

La mayoría de los navegadores no mostrarán de forma confiable el contenido RTF. Sin embargo, es posible analizar el RTF en HTML y mostrar el contenido HTML en su página web.

Necesita algún tipo de programa para analizar RTF y convertirlo a HTML. Supongo que tiene que ser gratis. No conozco ningún análisis RTF gratuito confiable o librerías RTF a HTML en PHP.

le recomiendo que utilice un programa de conversión de línea de comandos como RTF2HTML: http://sageshome.net/?w=downloads/soft/RTF2HTML.html

Usted tendría que descargar e instalar este programa en su servidor web, acceder al usuario a cargar el archivo en un directorio temporal, y luego llamar la aplicación de línea de comandos de PHP con 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); 

a continuación, analizar los resultados como HTML y mostrarlos. No es una mala estrategia Tenga en cuenta que probablemente necesite quitar la cabeza, el cuerpo y posiblemente otras etiquetas si va a mostrar el contenido dentro de otra página web.

+2

¿Qué pasa con el (loco que sé) requisito: "Me gustaría poder mostrar el archivo RTF sin tener que convertirlo a algo antes de mostrarlo". ? –

+3

Sí, tengo el requisito. En lugar de solo decirle que es SOL, como lo hizo otro, pensé que le diría que era SOL y que al mismo tiempo le daría una solución que podría funcionar. Supuse que simplemente no quería tener que implementar un analizador RTF. De esta manera, él no tiene que hacerlo. – danieltalsky

-2

no se puede simplemente imprimir un archivo desde dentro del código PHP . Debe extraer los datos del mismo e imprimir los contenidos en línea.

La función php 'file_get_contents' puede hacer lo que necesita. El manual de funciones está aquí: http://us2.php.net/filegetcontents

el uso de una muestra está aquí:

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

haciendo esto hace lo mismo que usar fread(); da como resultado todo el código rtf en lugar del documento rtf real. ¿Puedo mostrar un documento RTF en una página web o necesito convertirlo primero en algo diferente? – Mark

+0

Por lo que sé, primero necesita obtener el contenido. De lo contrario, el navegador no sabe qué hacer con él. –

+0

Sí, esto simplemente no funcionará. Si imprime los resultados de esta llamada a la pantalla, el usuario verá un montón de secuencias de escape RTF, que no se parecerán al documento que están esperando. – danieltalsky

1

páginas web sólo pueden contener HTML. Necesitará un complemento de navegador como flash para mostrar otros tipos de archivos. Ver Scribd por ejemplo.

+0

Un nitpick: en general tienes razón, pero la mayoría de los navegadores también pueden procesar XML (la mayoría de las veces) y, por supuesto, texto sin formato. –

+0

Plus, con un complemento acrobat los navegadores pueden mostrar pdf. –

2

Primero: tiene su tipo de contenido incorrecto. para RTF es text/rtf

Segundo: solo podrá visualizar en línea este tipo de contenido, que puede representar el navegador web. RTF no es uno de estos. Por lo tanto, no podrá mostrarlo en línea sin convertirlo o sin algún complemento para el navegador. Por supuesto, la conversión puede ser sobre la marcha.

+0

+1 para "Corregir el tipo de contenido RTF es texto/rtf" –

0

Esto no es exactamente una respuesta a su pregunta, pero una cosa que puede querer hacer es eliminar el "nombre de archivo = mark.rtf" del encabezado. He tenido navegadores que tratan algo como una descarga si incluyo "nombre de archivo" en el encabezado, incluso si el "Contenido-Disposición" está "en línea".

4

Es posible que desee echa un vistazo a https://github.com/tbluemel/rtf.js del lado del cliente para la prestación RTF.Todavía está en sus primeras etapas pero rinde incluso gráficos incrustados. Sin embargo, el soporte para renderizar ilustraciones WMF incrustadas es muy muy limitado y requiere compatibilidad con el navegador para la etiqueta.

Cuestiones relacionadas