【发布时间】:2017-08-15 06:31:31
【问题描述】:
我正在访问 API 以下载/查看采购订单的 PDF。
API 正在返回看似原始的 PDF 数据,开始:
%PDF-1.2
%����
4 0 obj
<<
/E 12282
/H [1239 144]
/L 12655
/Linearized 1
/N 1
/O 7
/T 12527
我正在努力寻找一种方法将其转换为可下载的 PDF 或在浏览器中呈现 PDF。
我正在使用 PHP,我尝试过回显响应,这只是完整地显示原始 PDF - 正如您所期望的那样。
我也尝试在 echo 之前定义标题:
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-Type: application/pdf");
header("Content-Disposition: attachment; filename=purchase.pdf");
header("Content-Transfer-Encoding: binary");
这确实会生成下载,但是当您打开它时,我会收到“无法加载 pdf 文档”错误。
我已经寻找一种方法来做到这一点,但找不到任何接近我遇到的问题的方法。我需要用 TCPDF 之类的东西来解析这个响应,还是我错过了一些非常明显的东西?
更新:
使用下面的代码,我可以将文件保存到服务器,如果我下载它,它会打开并且正如我所期望的那样,但我仍然无法在浏览器中提供它。
$data = $results->body;
$destination = '../pos/'.$id.'.pdf';
$file = fopen($destination, "w+");
fputs($file, $data);
fclose($file);
$filename = $id.'.pdf';
header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-Disposition: attachment; filename=$filename");
header("Content-Type: application/pdf");
header("Content-Transfer-Encoding: binary");
readfile($destination);
【问题讨论】:
-
你能提供将二进制流保存到驱动器的PHP代码吗?它看起来像损坏的二进制 PDF 流。例如。确保保存时流的末尾没有空格(不要将关闭 PHP 标记放入 PHP 脚本并使用
file_put_content)。尝试在readfile($destination)之后添加exit()。