pdf v/s usabilidad II
Hace un tiempo escribí sobre un problema de usabilidad detectado por Jacob Nielsen en su AlertBox de este 29 de Agosto y solucionado por Sybren Stüvel, en donde prometi la traducción al español de su articulo.
Como lo prometido es deuda, he aquí el articulo originalmente llamado “Offerring PDFs that download” que pueden encontrar en su idioma original bajo esta URL
Cuando abres un PDF en la misma ventana del navegador donde estabas navegando, la mayoría de las personas se confunden. Ellos están usando un navegador y solo esperan que cumpla su función primaria, navegar. Para solucionar esto mucho de los sitios que usan PDF’s los abren en una nueva ventana, lo que produce solo mas confusión y molestia.
Un navegador común solo es capaz de abrir un pequeño grupo de tipos de archivo: HTML, CSS, XML y algunas imágenes. Si intentas abrir algún tipo de archivo no soportado, te preguntara si deseas salvarlo a tu disco duro, o si deseas abrirlo con una aplicación correspondiente.
La forma ideal de mostrar un archivo PDF es esa, preguntar al usuario si desea guardarlo, o si desea abrirlo con su visor de PDF predeterminado.
Desafortunadamente, la gran mayoría de los usuarios tiene como visor de PDF’s predeterminado el Adobe Acrobat Reader, que instala por defecto un plugin en el navegador, lo que causa el molesto efecto de los PDF’s-que-se-abren-en-la-misma-ventana-del-navegador. Por suerte hay una manera realmente simple de prevenirlo.
Cada archivo que es abierto en respuesta a una HTTP request (petición al servidor) esta contenido en una “HTTP response” (respuesta del servidor). Simple, ¿cierto? Esta HTTP response contiene la información que le dirá al navegador que tipo de archivo estamos abriendo, cuando fue modificado, que peso tiene, etc. Para prevenir que Adobe Acrobat Reader abra nuestro PDF directamente en la ventana del navegador, agregaremos la siguiente información HTTP* a la respuesta: (*El articulo original cita a esto como HTTP header, o encabezado HTTP)
Content-disposition: Attachment
¿Pero como haremos eso?
Sobre esto es lo que trata la siguiente sección.
APACHE 2.
En Apache 2, esto es realmente trivial y simple. Solo necesitas introducir en un archivo .htaccess la siguiente línea de código, y guardarlo en el mismo directorio donde estén los PDF’s, y listo.
SetEnvIf Request_URI “\.pdf$” requested_pdf=pdf
Header add Content-Dispositión “Attachment” env=requested_pdf
PHP
Si lo que usas es un servidor PHP, puedes escribir un archivo PHP que incluya el PDF y lo muestre en tu navegador. La mejor manera de usar este script PHP es llamarlo (llamarlo se refiere al acto comunicativo de petición de información, no de identificación) de la siguiente manera: ‘mypdfscript.php/archivo.pdf’. El servidor web entenderá inmedíatamente que estas llamando al archivo ‘mypdfscript.pdf’, pero el navegador creerá que esta descargando el archivo ‘archivo.pdf’, y lo guardara bajo ese nombre. De otro modo bajara el archivo PDF como ‘mypdfscript.php’.
< ?php
$pdf = $_SERVER['PATH_INFO'];if(preg_match('/^\/[a-zA-Z0-9_\-]+.pdf$/', $pdf) == 0) {
print "Illegal name: $pdf";
return;
}header('Content-type: application/pdf');
header('Content-disposition: Attachment; filename=' . $pdf);
readfile('path_to_pdfs' . $pdf);
?>
¿Servidor obsoleto?
Si su servidor no sabe como llamar la sentencia ‘mypdfscript.php/somefile.pdf’, y necesita usar un ‘get variable’, puede intentarlo con este código:
< ?php
$pdf = $_GET['pdf'];
if(preg_match('/^\/[a-zA-Z0-9_\-]+.pdf$/', $pdf) == 0) {
print "Illegal name: $pdf";
return;
}header('Content-type: application/pdf');
header('Content-disposition: Attachment; filename=' . $pdf);
readfile('path_to_pdfs' . $pdf);
?>
Publicfile
Publicfile es un servidor web, pequeño y simple. Kenji Rikitake puso a disposición un parche para la versión 0.52, la ultima versión a la fecha.
Este parche agrega el encabezado correcto a la petición HTTP, en este caso para los PDF’s.
Descargar el parche: filetype.c.diff
¿Quieres más?
Si conoces alguna otra forma de agregar encabezados HTTP a la respuesta cuando preguntamos por archivos PDF, no dudes en ponerte en contacto, y esta será agregada a esta página.
October 26th, 2005 at 12:12 pm
Excelente Pablito, me he enfuricido con mi querido PowerBook más de una vez esperando a la tortuga que es el plugin de Adobe Reader cuando he clickeado sin querer un PDF. Muy útil el tip, lo tendré en cuenta para aplicacarlo cuando corresponda.
October 26th, 2005 at 10:12 pm
más vale tarde que nunca :P
October 28th, 2005 at 10:18 pm
Excelente articulo
December 21st, 2005 at 6:07 pm
como se abre un pdf desde un servidor que yo he creado en java pero que todavia no muestra pdf solo html…. necesito el codigo urgente
porfavor si me lo puedes enviar ami correo te lo agradeceria
bye gracias de antemano
December 21st, 2005 at 9:56 pm
Joanna lo siento, pero yo no soy santa-codigo que regala soluciones para navidad, me parece un poco patudo tu comentario, ya que este blog no esta para solucionar problemas de cada persona que me pregunte algo, de hecho la idea es proporcionar guias para que cada uno aprenda y desarrolle sus propias soluciones y compartirlas, no para pedir soluciones a problemas que no has podido resolver de manera “urgente”.
December 21st, 2005 at 10:29 pm
y esa de donde salio?
August 3rd, 2006 at 3:18 pm
Muy bueno tu artículo, he! Ahora, quiero preguntarte, si conoces alguna forma de deshabilitar las opciones de “Save”, “Save As…” y “Print..” de un documento PDF ? …o algún sitio que me diera luces al respecto?
November 15th, 2006 at 9:01 am
Hola..
Saben como puedo convertir cualquier tipo de archivo al formato pdf con php?..
gracias..
November 15th, 2006 at 9:21 am
Hola isa, checando en google es la mejor opcion, el primer resultado es: http://www.sitepoint.com/article/generate-pdfs-php
October 27th, 2007 at 10:28 am
Estimado Pablo:
Regularmente envio Boletines informativos a nuestras oficinas en otros países y lo puedo hacer en html o bien en pdf files agregando a veces dentro del archivo pdf vinculos a url para envio de documentos y incluso acceso a archivos de video. En html puedo agregar slides de fotografías pero en acrobat me siento limitado a hacerlo, me podrias -por favor- orientar para encontrar una solución para agregar slides de fotos, ya sea desde adobe photo album u otra aplicación, pero que pueda ir dentro del mismo archivo pdf que transmito.