Posez votre question Signaler

Télécharger PDF [Résolu]

Kopernicus - Dernière réponse le 2 jui 2008 à 20:27
Bonsoir,
Voil@, sur mon site, je souhaite faire télécharger des fichiers pdf. Quand on clique sur le lien, le fichier s'ouvre ds Acrobat Reader. Comment faire pour empêcher celui-ci de s'ouvrir avc le fichier et forcer l'affichage de la traditionnelle fenêtre de téléchargement du navigateur ?
A vos idées, merci.
@@@
Lire la suite 

Télécharger PDF »

22 réponses
Réponse
+1
moins plus
Arf, justement on parle de moi ;-)

Eaulive, c'est effectivement une configuration du navigateur, mais cela peut être forcé grace à l'entête HTTP.

Kopernicus : Ce n'est pas très compliqué si tu utilises un langage serveur. Voici comment faire avec PHP : http://www.php.net/manual/fr/function.header.php

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

/* ... output pdf file ... */
?>

En gros, il te faut faire un lien vers un fichier PHP qui envera un entête HTTP approprié à l'aide de la fonction HEADER() et dans lequel on ouvrira le fichier PDF et on PRINTera son contenu.

Le nom du fichier pourra être mis en paramètres du fichier d'URL pour rendre générique.
(Attention ! Dans ce cas il faut sécuriser pour ne par qu'on puisse télécharger n'importe quel fichier comme un fichier PHP ou un fichier avec des mots de passe...).

-= Bobinours - http://bobin.underlands.org =-
Mouradif - 2 jui 2008 à 20:27
Concernant la sécurité, le mieux est d'avoir soir une table dans la bdd soit un array qui recense les fichiers téléchargeables pour pouvoir faire un lien du style
<a href="telecharger.php?id=2">

dans le cas de Bases de données, il faudra donc dans "telecharger.php" récupérer le nom du fichier d'id $_GET['id'] (ici 2) pour l'utiliser dans header().

pour ce qui est des array, un truc du style
$pdf = array ( 
	"fichier1.pdf",
	"fichier2.pdf",
	...
	)

devrait suffire. Ensuite dans "telecharger.php" :
$id = $_GET['id'];
$filename = $pdf[$id];

Désolé pour le manque d'explications, c'est juste que je suis un peu pressé :p. Si vous trouvez que ce n'est pas assez explicite, envoyez moi un mp
Ajouter un commentaire
Réponse
+0
moins plus
À moins que je ne me gourge, ce sont les propriétés de ton navigateur qu'il faut revoir. Dans mon cas avec IE6, le document .pdf s'affiche dans la fenêtre de mon navigateur car acrobat reader est pris en charge par IE (ou l'inverse ;-), mais avec NS7, j'ai une fenêtre acrobat qui s'ouvre à part.

SLU ;-)

Si tu n'es pas sûr de comprendre la réponse,
ne pose pas la question...
Eaulive.
Ajouter un commentaire
Réponse
+0
moins plus
Bonjour Kopernicus, Eaulive, bonjour à tous,

Eaulive, si j'ai bien compris, Kopernicus ne veux pas que le pdf ouvre une fenêtre Acrobat Reader, ni dans IE ni à part, il voudrait, dans son cas, faire ouvrir la boîte de téléchargement.

Kopernicus, ta question m'interesse mais je ne sais pas répondre.. à part un clic droit et "enregistrer la cible sous..." ou enregistrer au format .zip.

@12C4
Ipl
Ajouter un commentaire
Réponse
+0
moins plus
Bonjour à vous deux.

Tu as raison Gérard, il était tard et j'avais mal compris ;-)

Pour la solution je n'en vois pas d'autre non plus pour l'instant.

Si tu n'es pas sûr de comprendre la réponse,
ne pose pas la question...
Eaulive.
Ajouter un commentaire
Réponse
+0
moins plus
Rebonsoir à tous,

Enfin CCM en ligne ! :-)

@12C4
Ipl
Ajouter un commentaire
Réponse
+0
moins plus
Ah bon, il était tombé???

Je viens juste d'arriver ;-)

Si tu n'es pas sûr de comprendre la réponse,
ne pose pas la question...
Eaulive.
Ajouter un commentaire
Réponse
+0
moins plus
Hello Eaulive,

Oui CCM est tombé entre 9h30 et 18h :-(

@12C4
Ipl
Ajouter un commentaire
Réponse
+0
moins plus
Bonjour à Eaulive, ipl et les autres
En effet, je ne souhaite pas que Acrobat s'ouvre. Mais je ne veux pas non plus recourir au clic droit car pas tjrs respecté. Je voulais aussi éviter la compression, mais apparemment il n'y a pas de solution pour empêcher ce Reader d'Acrobater. Donc je vais ziper.
Merci à tous.
@@@
Ajouter un commentaire
Réponse
+0
moins plus
Bonjour Kopernicus, bonjour à tous,

Je me souviens (trop vaguement) d'un fil de discussion semblable sur All-Html au sujet de fichiers Word à télécharger et non à ouvrir dans l'app !
Un membre (pilier) d'ALL-Html avait un programme développé par sa soc. qui faisait çà sans problème... çà c'était en fin 2001... je crois me souvenir que c'était un Canadien... il faudrait :
-demander à Bobinours si çà lui rappelle quelque chose
-faire quelques recherches sur le forum
-reposer la question là-bas
(j'avais aussi récupéré le programme sur mon disque dur, parmi les milliers d'autres prgrammes).

Kopernicus... as-tu grand besoin de cette fonction ? veux-tu déclancher une "procédure plus lourde" (telle que décrite ci-dessus) ?

@12C4
Ipl
Ajouter un commentaire
Réponse
+0
moins plus
Bonjour à tous
Je te remercie bcp ipl. Le pb ne se pose pas avc word : il ne s'execute pas avc les docs word, c'est la fenetre de téléchargement qui s'ouvre.
En fait, je n'ai pas envie de me casser la tete avc ça, je n'ai que 3 docs pdf, donc je les ai zipés.
Bonne année à tout le monde.
@++
Ajouter un commentaire
Réponse
+0
moins plus
Bonjour;

Je te remercie Bobinours. Malheureusement, je développe en ASP.
N'y aurait-il pas simplement un paramètre à rajouter dans la ligne de commande ?

@++
Ajouter un commentaire
Réponse
+0
moins plus
... PS : Sebsauvage aurait peut-être une solution; il a une rubrique sur le sujet dans son site.

@++
Ajouter un commentaire
Réponse
+0
moins plus
Je ne sais pas comment écrire dans le Header HTTP en ASP, mais c'est quasiment certain que c'est faisable. Pour le reste, le principe reste le même.

-= Bobinours - http://bobin.underlands.org =-
Ajouter un commentaire
Réponse
+0
moins plus
me v'là. Bonne année à tous.

Pour les PDF:

En envoyant le type MIME application/pdf (ce qui devrait en principe être utilisé pour les PDF), tu ne sais pas à l'avance comment se comportera le navigateur de l'internaute (ouverture directe du PDF dans le navigateur ou sauvegarde).

C'est pour cela qu'il est généralement préférable de choisir le type MIME application/octet-stream.
La grande majorité des navigateurs proposera de sauvegarder le fichier.


Et quand on ne peut pas avoir le contrôle des types MIME renvoyés par le serveur HTTP (ex: hébergeurs gratuits), mieux vaut le zipper (dans ce cas, la majorité des seveurs HTTP utilisent le type application/octet-stream, application/zip ou application/x-zip-compressed).
Ajouter un commentaire
Réponse
+0
moins plus
Salut sebsauvage,
Je ne suis pas tout à fait d'accord avec toi.

"application/octet-stream" est utilisé pour les fichiers dont on ne connait pas le format (à défaut d'être un flot de données).
Sous Mozilla, les fichier octet-steram sont enregistrés sans extension.

Alors qu'il existe le "Content-Disposition" prévu à cet effet ;-)

-= Bobinours - http://bobin.underlands.org =-
sebsauvage - 7 jan 2003 à 10:04
Autant pour moi !
Je n'ai jamais lu la RFC jusqu'au bout :-.
Bobinours - 7 jan 2003 à 10:25
Je te rassure, moi non plus ;-)

-= Bobinours - http://bobin.underlands.org =-
Ajouter un commentaire
Réponse
+0
moins plus
Bonjour à tous,

Pour info, voici une réponse que j'ai eue dans un autre forum (solution en-tête en asp) :

Response.AddHeader "content-disposition","attachment; filename=tonfichier.pdf"

NB : je n'ai pas vérifié...
Bonne journée.
@++
Ajouter un commentaire
Réponse
+0
moins plus
Je préfère nettement ça, kopernicus, qui semble correspondre à la notation que j'indiquais en PHP.

-= Bobinours - http://bobin.underlands.org =-
Ajouter un commentaire
Réponse
+0
moins plus
je suis tomber dessus par hazard et moi aussi j'en ai ch... avec les plugins senser nous faciliter la vie...

voici un script php...


+++++++++++++++++++++
<?php

$file = $_GET["file"];
download($file);
function download($file, $name = false, $type = false, $down = true) {
if(!file_exists($file)){
print "error";
exit;
}
if(!$name) $name = basename($file);
if($down) $type = "application/force-download";
else if(!$type) $type = "application/download";
$disp = $down ? "attachment" : "inline";
#header ("HTTP/1.0 204 No Content" );
header("Content-disposition: ".$disp."; filename=$name");
header("Content-length: ".filesize($file));
header("Content-type: ".$type);
header("Connection: close");
header("Expires: 0");

readfile($file);
exit;
}
?>
++++++++++++++++++++++++++

ca marche avec toutes les extensions

pour le faire fonctionner

http://www.monsite.com/download.php?file=monfichier.pdf

voilou....

a+ gio
riri974 - 24 jui 2007 à 18:59
je me suis permis de reprendre ton code et de rajoute une sécurité :

<?php
if(($_GET['type']=='pdf')||($_GET['type']=='zip'))
{
$file ="./".$_GET['file'].".".$_GET['type'];
download($file);
}
else
exit("type de fichier interdit");


function download($file, $name = false, $type = false, $down = true)
{
if(!file_exists($file)){
print "error";
exit;
}
if(!$name) $name = basename($file);
if($down) $type = "application/force-download";
else if(!$type) $type = "application/download";
$disp = $down ? "attachment" : "inline";
#header ("HTTP/1.0 204 No Content" );
header("Content-disposition: ".$disp."; filename=$name");
header("Content-length: ".filesize($file));
header("Content-type: ".$type);
header("Connection: close");
header("Expires: 0");

readfile($file);
exit;
}
?>
Ajouter un commentaire
Ce document intitulé « Télécharger PDF » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Windows 8 - À quoi s'attendre ?