Javascript 使用jquery下载PDF

Javascript 使用jquery下载PDF,javascript,jquery,ajax,Javascript,Jquery,Ajax,类似于,但在这里似乎不起作用 我需要向服务器发送一个请求,有效负载为名称/值对。服务器通过发送PDF文件进行响应 用户需要知道的是,单击页面上的pdf按钮后,他们会得到浏览器默认行为(即保存或查看) 所以,这个电话很简单(我想) 这就是服务器需要完成的所有工作并返回output.pdf 看起来它工作得很好。以下是响应标题: Connection:keep-alive Content-Disposition:attachment; filename="output.pdf" Content-Len

类似于,但在这里似乎不起作用

我需要向服务器发送一个请求,有效负载为名称/值对。服务器通过发送PDF文件进行响应

用户需要知道的是,单击页面上的pdf按钮后,他们会得到浏览器默认行为(即保存或查看)

所以,这个电话很简单(我想)

这就是服务器需要完成的所有工作并返回output.pdf

看起来它工作得很好。以下是响应标题:

Connection:keep-alive
Content-Disposition:attachment; filename="output.pdf"
Content-Length:17896
Content-Type:application/pdf
Date:Thu, 03 Oct 2013 04:19:06 GMT
Server:nginx
而且,如果我看一下Chrome开发工具中的响应,它在我看来确实像一个17k的pdf


最后一个障碍是浏览器(Chrome或FF)什么也没做,我想我错过了“现在将此响应作为可下载文件处理”这句话,这是我第一次回答自己的问题,所以,接下来

这里有一个关于这个主题的JQuery论坛帖子

这似乎不起作用,而且永远不会起作用的原因是,这些标题永远不会以浏览器可以响应的方式到达浏览器-AJAX结果会在没有浏览器干预的情况下传递给调用脚本

真的很有道理

仍然对是否有人有更好的解决方案感兴趣,但到目前为止,我正在使用JQuery在运行时生成一个隐藏表单,然后启动一个.submit()


这很有效。

如果您想保存/打开文件,您可以选择使用php。见下文:

首先,使文件名“download.php”包含以下代码:

$filename = $_GET['fname']; 
header('Pragma: public');
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/octet-stream');

header('Content-Disposition: attachment; filename="'. basename($filename) . '";');
header('Content-Transfer-Encoding: binary');
header('Content-Length: ' . filesize($filename));   

readfile($filename);

$fp=fopen($filename,"rb");


if(!feof($fp)){
  print(fread($fp,1024*8));

  flush();
  ob_flush();
  if(connection_aborted){

  }
}else{
 echo 'File has been downloaded.';
}
exit;
然后,调用download.php:

<a href="download.php?fname=sample.pdf">Sample file</a>

此代码可用于下载任何文件类型

注意:始终注意路径和权限问题

希望它有用


干杯,

您想通过点击按钮下载pdf吗?在这里,你可以使用HTML5,只需设置锚定标签
a
,url为pdf位置,并添加属性
download
,谢谢Satinder,但这不处理有效负载数据,我还有一两个IE8用户
<a href="download.php?fname=sample.pdf">Sample file</a>