我有一个脚本可以合并2个文档,然后在浏览器中显示最终文档。
适用于Firefox,Opera和IE。但它在Chrome中不起作用。 Chrome仅显示加载,并在加载的1/4处停止。
代码:
exec("pdftk A=$pdfin B=$tmpfname cat B1 A output $tmpfoutput");
$data = file_get_contents($tmpfoutput);
header("Content-type: application/pdf");
header("Content-disposition: inline;filename=GeneratedPdf.pdf");
header('Content-Transfer-Encoding: binary');
header('Content-Length: ' . filesize($tmpfoutput));
header('Accept-Ranges: bytes');
echo $data;
我被告知它之前在Chrome中也有效,所以我认为最后一个版本只会出现问题。
感谢您的帮助。
答案 0 :(得分:3)
通过附加Accept-Ranges: bytes
,您的脚本会告诉浏览器它将接受范围请求,即请求部分响应的多个请求。您的脚本显然不支持范围请求,因为它一次生成并提供数据。
要修正错误,请移除header('Accept-Ranges: bytes');
如果您的PDF文件通常很大,那么更加用户友好的解决方案是在您的脚本中实际实现范围请求。可能的情况是您的服务器已经有一个处理范围请求的高效例程,因此明智的选择是将PDF文件保存到可公开访问的目录,然后在生成PDF后将请求302重定向到此URL。确保网址不可取,例如通过使用UUID。并在某些时候删除PDF文件,例如使用cronjob。