2010-08-29 24 views
10

Tengo un enlace a un archivo PDF en mi página.HTML: force PDF download

Safari abre el archivo pdf directamente en el sitio web. Me gustaría descargarlo en su lugar.

He intentado agregar target="_blank" al elemento <a>, pero no funciona si las ventanas emergentes están deshabilitadas en la configuración del navegador.

¿Cómo puedo solucionar esto?

gracias

Respuesta

8

Para hacer esto, es necesario cambiar los encabezados de archivos .PDF.

Así, en su .htaccess, que tiene que hacer la siguiente manera:

AddType application/octet-stream .pdf 
+1

Uso content-disposition, no envíe un "no lo hago saber qué es esto "encabezado en lugar de" Esto es PDF " – Quentin

+0

Este método se describió en AskApache: http://www.askapache.com/htaccess/ultimate-htaccess-file-sample.html – shamittomar

+0

El autor de esa sentada e no parece estar afiliada a la Fundación Apache, por lo que el título huele un poco. Tiene bastante en eso con lo que estoy en desacuerdo también. – Quentin

8

Es necesario configurar el encabezado HTTP para Content-Dispositionattachment para este archivo.

Content-Disposition: attachment; filename=test.pdf 

Dependiendo del servidor web que esté utilizando la forma de configurar esto puede variar. Otra opción es tener un script del lado del servidor que transmita el pdf y configure este encabezado.

+0

¿y si tengo muchos archivos? – aneuryzm

+0

Pero no genera el archivo PDF ni lo pasa a través de un script del lado del servidor. Él solo está dando un enlace '' para descargarlo. – shamittomar

+0

Como dijo Darin, simplemente configura su servidor, pero depende del servidor que esté utilizando. http://www.thingy-ma-jig.co.uk/blog/06-08-2007/force-a-pdf-to-download por ejemplo. – Quentin

1

Deberá forzar dinámicamente los encabezados de adjuntos mediante un script del lado del servidor como PHP. Aquí hay un ejemplo usando PHP:

<?php 
header('Content-type: application/pdf'); 
header('Content-Disposition: attachment; filename="downloaded.pdf"'); 
readfile('original.pdf'); 
?> 

Editar:

$file = $_GET['file']; 
readfile($file."pdf"); // Before doing this, check whather the user have permission to download that file. 

llamar a la secuencia de comandos: download.php?file=document descargará document.pdf

+1

Es mejor utilizar la configuración del servidor si se trata de archivos estáticos. Es mas simple – Quentin

+1

¿Qué sucede si está en alojamiento compartido? – Youssef

+0

¿Hay algún servidor basado en Apache tan malo que no le permite establecer un encabezado de disposición de contenido con las directivas de configuración de Apache? – Quentin