web-dev-qa-db-fra.com

Comment forcer un téléchargement pdf automatiquement?

Existe-t-il un moyen de forcer le gestionnaire de téléchargement de l'utilisateur à démarrer un téléchargement pour .PDF au lieu d'afficher le .PDF dans une nouvelle fenêtre/onglet?

34
Heinrich

utilisez l'attribut download à l'intérieur de votre balise <a>

<a href="content/file.pdf" download > pdf link </a>
<a href="content/file.doc" download > doc link </a> 

32
Abouasy

Définissez Content-Disposition dans votre en-tête HttpResponse:

Content-Disposition = 'attachment; filename=filename.pdf'
30
Bird

Cela doit être fait côté serveur. Vous ne pouvez pas faire cela du côté client. 

La procédure à suivre dépend de la langue du serveur en question. 

PHP:

header('Content-Disposition: attachment; filename="' . $filename . '"');

Java:

response.setHeader("Content-Disposition", "attachment; filename=\"" + filename + "\"");

.NET: 

Response.AddHeader("Content-Disposition", "attachment; filename=\"" + filename + "\"");

Si aucun code côté serveur ne diffuse le fichier PDF, vous devez le configurer au niveau du serveur Web. Dans Apache HTTPD, par exemple, vous pouvez placer/développer un fichier .htaccess à la racine du dossier PDF avec l'entrée suivante:

<Files *.pdf>
    Header set Content-Disposition attachment
</Files>

ou le configurer globalement dans le fichier httpd.conf. Une approche similaire existe pour IIS avec le fichier web.config.

14
BalusC

Pour IIS:

Placez tous les fichiers que vous voulez forcer à télécharger dans leur propre dossier.

Ensuite, dans IIS, allez dans ce dossier et double-cliquez sur En-tête de réponse HTTP.

Ajouter un nouvel en-tête avec les informations suivantes:

Nom: Content-disposition

Valeur: Attachement

Tous les fichiers de ce dossier, lorsqu’ils sont utilisés, doivent afficher la boîte de dialogue Enregistrer sous pour le navigateur approprié.

8
Justin Emlay

Pour ce faire, vous devez envoyer des en-têtes HTTP (Content-disposition). Vous ne pouvez pas faire cela du côté client.

4
Jacob Relkin
<?php
header('Content-disposition: attachment; filename=filename.pdf');
header('Content-type: application/pdf');
readfile('path/to/filename.pdf');
3
jarnesjo

.htaccess solution:

AddType application/octet-stream .pdf
2
Alex

Oui, cela peut être fait dans la page JSP ... En donnant un lien de téléchargement dans une page JSP sur laquelle va la nouvelle page de script ... et téléchargez le fichier PDF comme suit

Code de téléchargement.JSP: -

<a href='downloadPdf.jsp?file=FILE.pdf' >Download PDF File</a>

downloadPdf.JSP code: - 

<%@ page import="Java.util.*,Java.io.*"%>               

<%

  File f = new File ("E:/PDFfiles/Downloads/" + request.getParameter("file") );
  response.setContentType ("application/pdf");
  response.setHeader ("Content-Disposition", "attachment; filename=""+request.getParameter("file")+""");
  String name = f.getName().substring(f.getName().lastIndexOf("/") + 1,f.getName().length());
  InputStream in = new FileInputStream(f);
  ServletOutputStream outs = response.getOutputStream();


  int bit = 256;
  int i = 0;
  try {
  while ((bit) >= 0) {
  bit = in.read();
  outs.write(bit);
                     }
       } 
        catch (IOException ioe) {
                ioe.printStackTrace(System.out);
            }
   outs.flush();
   outs.close();
   in.close();   
 %>

Source: http://bloggerplugnplay.blogspot.in/2012/05/how-to-create-force-download-link-for.html

2
Code Spy

De vb asp net code trouvé sur Internet, j’ai créé cette simple page c.download.aspx. Vous pouvez l’utiliser avec l’URL du fichier passé en tant que paramètre "f" de chaîne de requête. (/folder/download.aspx?f=/folder1/example.pdf).

<!DOCTYPE html>
<html>
<head><title></title>
<script runat="server">
    void Page_Load(object sender, EventArgs e)
    {

        String strRequest = "";
        try
        {
            strRequest = Request.QueryString["f"].ToString();
        }
        catch
        { }

        if (strRequest.Length > 0)
        {
            String path = Server.MapPath(strRequest);
            System.IO.FileInfo File = new System.IO.FileInfo(path);
            if (File.Exists)
            {
                Response.Clear();
                Response.AddHeader("Content-Disposition", "attachment; filename=" + File.Name);
                Response.AddHeader("Content-Length", File.Length.ToString());
                Response.ContentType = "application/octet-stream";
                Response.WriteFile(File.FullName);
                Response.End();
            };
        }
    }
</script>
</head>
<body></body>
</html>
0
Leonardo Danza
    <?php
    // required for IE, otherwise Content-disposition is ignored   
     if(ini_get('zlib.output_compression'))
      ini_set('zlib.output_compression', 'Off');
    }
$reader = fopen($filename, "r");
$contents = fread($reader, filesize($filename));
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename='.basename($filename));
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header('Pragma: public');
    header('Content-Length: ' . filesize($filename));
    ob_end_clean();
    echo $contents;
0
Levi Hackwith