Télécharger PDF

Résolu/Fermé
Kopernicus - 30 déc. 2002 à 00:45
 Mouradif - 2 juil. 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.
@@@
A voir également:

18 réponses

Bobinours Messages postés 2898 Date d'inscription jeudi 26 avril 2001 Statut Membre Dernière intervention 21 mars 2013 504
2 janv. 2003 à 06:14
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 =-
1
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
0
Eaulive Messages postés 27064 Date d'inscription jeudi 18 avril 2002 Statut Modérateur Dernière intervention 23 juin 2015 290
30 déc. 2002 à 06:57
À 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.
0
ipl Messages postés 5723 Date d'inscription lundi 8 octobre 2001 Statut Contributeur sécurité Dernière intervention 14 avril 2012 585
30 déc. 2002 à 09:48
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
0
Eaulive Messages postés 27064 Date d'inscription jeudi 18 avril 2002 Statut Modérateur Dernière intervention 23 juin 2015 290
30 déc. 2002 à 18:05
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ipl Messages postés 5723 Date d'inscription lundi 8 octobre 2001 Statut Contributeur sécurité Dernière intervention 14 avril 2012 585
30 déc. 2002 à 18:11
Rebonsoir à tous,

Enfin CCM en ligne ! :-)

@12C4
Ipl
0
Eaulive Messages postés 27064 Date d'inscription jeudi 18 avril 2002 Statut Modérateur Dernière intervention 23 juin 2015 290
30 déc. 2002 à 18:12
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.
0
ipl Messages postés 5723 Date d'inscription lundi 8 octobre 2001 Statut Contributeur sécurité Dernière intervention 14 avril 2012 585
31 déc. 2002 à 00:12
Hello Eaulive,

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

@12C4
Ipl
0
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.
@@@
0
ipl Messages postés 5723 Date d'inscription lundi 8 octobre 2001 Statut Contributeur sécurité Dernière intervention 14 avril 2012 585
31 déc. 2002 à 10:53
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
0
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.
@++
0
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 ?

@++
0
... PS : Sebsauvage aurait peut-être une solution; il a une rubrique sur le sujet dans son site.

@++
0
Bobinours Messages postés 2898 Date d'inscription jeudi 26 avril 2001 Statut Membre Dernière intervention 21 mars 2013 504
2 janv. 2003 à 16:32
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 =-
0
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 659
6 janv. 2003 à 11:05
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).
0
Bobinours Messages postés 2898 Date d'inscription jeudi 26 avril 2001 Statut Membre Dernière intervention 21 mars 2013 504
6 janv. 2003 à 11:57
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 =-
0
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 659
7 janv. 2003 à 10:04
Autant pour moi !
Je n'ai jamais lu la RFC jusqu'au bout :-.
0
Bobinours Messages postés 2898 Date d'inscription jeudi 26 avril 2001 Statut Membre Dernière intervention 21 mars 2013 504
7 janv. 2003 à 10:25
Je te rassure, moi non plus ;-)

-= Bobinours - http://bobin.underlands.org =-
0
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.
@++
0
Bobinours Messages postés 2898 Date d'inscription jeudi 26 avril 2001 Statut Membre Dernière intervention 21 mars 2013 504
6 janv. 2003 à 19:32
Je préfère nettement ça, kopernicus, qui semble correspondre à la notation que j'indiquais en PHP.

-= Bobinours - http://bobin.underlands.org =-
0
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
0
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;
}
?>
0