使用 jquery 下载 PDF

Download PDF with jquery

本文关键字:PDF 下载 jquery 使用      更新时间:2023-09-26

类似于POST到服务器,接收PDF,交付给用户w/jQuery但这似乎在这里不起作用...

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

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

所以,电话很简单(我认为)

 $.ajax({
  url:"http://blah.com/etc",
  data:{filename:'output.pdf', foo:'foo', bar:'bar', baz:'baz'},
  type:"POST"
 });

这就是服务器完成其工作并返回输出所需的全部内容.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)什么都不做,我想我错过了"现在将此响应作为可下载文件处理"的位

如果你想保存/打开文件,你可以使用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;

然后,调用您的下载.php:

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

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

附言始终小心路径和权限问题。

希望有用...

干杯

我第一次回答我自己的问题,所以,这里是...

这里有一个关于这个主题的JQuery论坛帖子 http://forum.jquery.com/topic/download-file-from-jquery-post

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

真的很有道理。

仍然对有人有更好的解决方案感兴趣,但截至目前,我正在使用 JQuery 在运行时生成一个隐藏表单,然后触发 .submit()

这是有效的。