Comment rendre un fichier PDF téléchargeable dans un lien HTML ?

Je donne le lien d'un fichier pdf sur ma page web pour le téléchargement, comme ci-dessous

<a href="myfile.pdf">Download Brochure</a>

Le problème est que, lorsque l'utilisateur clique sur ce lien, alors

  • Si l'utilisateur a installé Adobe Acrobat, le fichier s'ouvre dans la même fenêtre du navigateur avec Adobe Reader.
  • Si Adobe Acrobat n'est pas installé, une fenêtre pop-up s'affiche pour permettre à l'utilisateur de télécharger le fichier.

Mais je veux que l'utilisateur soit toujours invité à télécharger le fichier, qu'Adobe Acrobat soit installé ou non.

Veuillez me dire comment je peux faire cela ?

Solution

Au lieu de créer un lien vers le fichier .PDF, faites plutôt quelque chose comme

<a href="pdf_server.php?file=pdffilename">Download my eBook</a>

qui affiche un en-tête personnalisé, ouvre le PDF (sécurité binaire) et imprime les données dans le navigateur de l'utilisateur, qui peut ensuite choisir d'enregistrer le PDF malgré les paramètres de son navigateur. Le fichier pdf_server.php devrait ressembler à ceci :

header("Content-Type: application/octet-stream");

$file = $_GET["file"] .".pdf";
header("Content-Disposition: attachment; filename=" . urlencode($file));   
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");
header("Content-Description: File Transfer");            
header("Content-Length: " . filesize($file));
flush(); // this doesn't really matter.
$fp = fopen($file, "r");
while (!feof($fp))
{
    echo fread($fp, 65536);
    flush(); // this is essential for large downloads
} 
fclose($fp); 

PS : et bien sûr, effectuez quelques contrôles de bon sens sur la variable "file&quot ; pour empêcher les gens de voler vos fichiers, par exemple, n'acceptez pas les extensions de fichiers, refusez les barres obliques, ajoutez .pdf à la valeur.

Commentaires (12)

C'est la clé :

header("Content-Type: application/octet-stream");

Content-type application/x-pdf-document ou application/pdf est envoyé lors de l'envoi d'un fichier PDF. Adobe Reader définit généralement le gestionnaire pour ce type MIME afin que le navigateur transmette le document à Adobe Reader lorsque l'un des types MIME PDF est reçu.

Commentaires (0)

Dans une application Ruby on Rails (notamment avec quelque chose comme la gemme Prawn et le plugin Prawnto Rails), vous pouvez accomplir cette tâche un peu plus simplement qu'avec un script complet (comme l'exemple PHP précédent).

Dans votre contrôleur :

def index

 respond_to do |format|
   format.html # Your HTML view
   format.pdf { render :layout => false }
 end
end

La partie render :layout => false indique au navigateur d'ouvrir l'invite "Would you like to download this file?&quot ; au lieu d'essayer de rendre le PDF. Vous pourrez alors créer un lien vers le fichier normalement : http://mysite.com/myawesomepdf.pdf

Commentaires (3)