You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Chrome加载PDF出现Failed to load pdf document错误问题咨询

Chrome加载PHP输出PDF提示「Failed to load pdf document」排查方案

常见错误原因

  • 输出前存在多余内容:PHP代码中<?php标签前的空格/换行、提前输出的调试信息、PHP报错内容都会混入PDF二进制流,破坏文件结构
  • CURL请求异常未处理:当CURL请求超时、目标地址报错、返回非PDF内容时,直接输出错误信息会导致文件格式非法
  • HTTP头设置不完整/提前发送:仅设置Content-Type: application/pdf不够,缺少Content-Length头、或者头信息因为提前输出内容发送失败,都会导致浏览器解析失败
  • 自定义输出函数破坏内容:你代码中使用的e()如果是自定义输出函数,可能存在HTML转义、追加调试内容等逻辑,损坏PDF二进制数据

对应解决方案

第一步:优化输出逻辑,清理多余内容

在输出PDF前清空所有缓冲区内容,同时确保没有提前输出的内容,修改代码如下:

<?php
// 注意<?php前不要有任何空格、换行、BOM头
$s = curl_init(); 
curl_setopt($s,CURLOPT_URL,$url); 
curl_setopt($s,CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($s,CURLOPT_RETURNTRANSFER,true); 
curl_setopt($s,CURLOPT_POSTFIELDS,http_build_query($t)); 
$r = curl_exec($s); 
$curlError = curl_errno($s) ? curl_error($s) : '';
curl_close($s);

// 先校验CURL请求是否正常
if ($curlError) {
    die('PDF获取失败:' . $curlError);
}
// 校验返回内容是否为合法PDF(PDF文件开头固定为%PDF-标识)
if (strpos($r, '%PDF-') !== 0) {
    die('上游接口返回内容不是合法PDF');
}

// 清空所有之前的输出内容,避免多余字符混入
ob_end_clean();

// 完整设置HTTP头
header('Content-Type: application/pdf');
header('Content-Length: ' . strlen($r));
// 如需让浏览器直接预览而不是下载,添加以下头
header('Content-Disposition: inline; filename="preview.pdf"');

// 直接输出原始PDF内容,不要使用自定义e()函数,避免内容被转义
echo $r;
// 终止后续所有输出,避免多余内容追加
exit;

第二步:排查自定义输出函数逻辑

如果你需要保留e()函数,先确认该函数的实现逻辑,确保它不会对输入内容做任何转义、格式化、追加额外内容的操作,否则直接替换为原生echo即可。

第三步:验证内容合法性

如果修改后还是报错,可以将返回的PDF内容写入本地文件测试:

file_put_contents('test.pdf', $r);

如果本地打开test.pdf正常,说明输出阶段还有多余内容,可以打开浏览器F12网络面板,查看该请求的响应内容,检查开头和结尾是否有多余的空格、换行、报错信息。如果本地也打不开,说明上游$url接口返回的内容本身就有问题,需要排查上游接口逻辑。

内容的提问来源于stack exchange,提问作者yu quan john tan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.18 08:36:04