web-dev-qa-db-fra.com

Lier un PDF en tant que document téléchargeable

Comment puis-je ajouter un lien vers un PDF dans le contenu, afin qu'il soit téléchargé plutôt que ouvert dans les fenêtres du navigateur? (J'ai téléchargé le PDF dans la médiathèque et je peux insérer le lien mais je ne trouve pas d'option pour empêcher son ouverture dans la fenêtre du navigateur.).

Merci,

Lucy

5
Lucy

vous pouvez essayer d’ajouter ceci à votre .htaccess:

<FilesMatch "\.(?i:pdf)$">
    # Force File Download
    ForceType application/octet-stream
    Header set Content-Disposition attachment
</FilesMatch>
10
Sébastien Méric

En fait, cela dépend entièrement du navigateur. Certains navigateurs ouvriront un PDF dans la fenêtre à l'aide d'un lecteur intégré PDF (la plupart utilisent le plug-in Adobe, Google Chrome étant le sien). Si le plug-in est manquant, le navigateur tentera à la place de télécharger le fichier.

Votre pari le plus sûr est d'ajouter des instructions sur la page pour que l'utilisateur clique avec le bouton droit de la souris et sélectionne "Enregistrer sous".

Si vous craignez que les utilisateurs ne puissent pas revenir à la page après avoir cliqué sur un lien, ajoutez target="_blank" au lien, ce qui obligera le navigateur à ouvrir le lien dans un nouvel onglet ou une nouvelle fenêtre. Parfois, cela peut également suffire à déclencher un téléchargement.

Par exemple: <a href="http://site.url/document.pdf" target="_blank">Download PDF</a>.

2
EAMann

Un PDF sera enregistré avec le type mime de application/pdf. Ainsi, si votre thème a un fichier de modèle application.php ou pdf.php qui force le téléchargement (ou Si vous recherchez le type mime dans votre modèle attachment.php, vous pouvez forcer le téléchargement.

Un fichier pdf.php construit de la sorte dans votre thème devrait faire l'affaire:

<?php  if (have_posts()) : while (have_posts()) : the_post();

$pdf_title = $post->post_title;
$uploads_dir = wp_upload_dir();
$attachment_src = get_post_meta( $post->ID, '_wp_attached_file', true );
$pdf_src = path_join( $uploads_dir['path'], $attachment_src );


 header("Pragma: public"); // required
 header("Expires: 0");
 header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
 header("Cache-Control: private",false); // required for certain browsers 
 header("Content-Type: application/pdf");
 header("Content-Disposition: attachment; filename=\"".$pdf_title."\";" );
 header("Content-Transfer-Encoding: binary");
 header("Content-Length: ".filesize($pdf_src));
 ob_clean();
 flush();
 readfile("$pdf_src");


endwhile; endif;

?>

(Édition: je dois noter que pour que cela fonctionne, lorsque vous insérez le fichier dans votre message via l'éditeur de média, vous devez sélectionner URL du message plutôt que URL du fichier dans le champ URL du lien avant de l'insérer dans votre message. Un lien vers un nom de fichier suivra les préférences du navigateur, mais en vous connectant au lien WP, vous pouvez contrôler son comportement.)

2
goldenapples