如何自动强制下载PDF格式?

时间:2010-04-08 09:05:34

标签: pdf download

有没有办法强制用户的下载管理器开始下载.PDF而不是在新的窗口/标签中显示.PDF?

10 个答案:

答案 0 :(得分:35)

使用<a>标记

中的下载属性

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

答案 1 :(得分:31)

在HttpResponse标头中设置Content-Disposition:

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

答案 2 :(得分:14)

这需要在服务器端完成。你不能在客户端这样做。

如何操作取决于所讨论的服务器端语言。

PHP:

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

爪哇:

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

.NET:

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

如果没有任何服务器端代码可以流式传输PDF文件,那么您需要在网络服务器级别进行配置。在例如Apache HTTPD中,您可以使用以下条目在PDF文件夹的根目录中放置/展开.htaccess文件:

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

或在httpd.conf文件中全局配置它。对于具有web.config文件的IIS,存在类似的方法。

答案 3 :(得分:8)

对于IIS:

将您要强制下载的所有文件放在自己的文件夹中。

然后在IIS中转到该文件夹​​并双击HTTP Response Headers。

使用以下信息添加新标头:

名称: 内容处置

值: 附件

访问该文件夹中的所有文件时,应提示相应浏览器的“另存为”对话框。

答案 4 :(得分:4)

您需要发送HTTP标头(Content-disposition)才能执行此操作。你不能在客户端这样做。

答案 5 :(得分:3)

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

答案 6 :(得分:2)

.htaccess解决方案:

AddType application/octet-stream .pdf

答案 7 :(得分:2)

是的,可以在JSP页面中完成...通过在一个JSP页面中提供下载链接到新脚本页面...并按如下方式下载PDF文件

DownloadPage.JSP代码: -

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

downloadPdf.JSP代码: -

<%@ 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();   
 %>

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

答案 8 :(得分:0)

    <?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;

答案 9 :(得分:0)

从互联网上找到的vb asp网络代码我做了这个简单的c#download.aspx页面。 您可以使用文件网址传递为&#34; f&#34;查询字符串参数。 (/folder/download.aspx?f=/folder1/example.pdf)。

SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "/usr/local/share/cmake-3.5/Modules")