如何通过PHP将PDF文件以JSON格式发送至AJAX应用
PHP端将PDF封装为JSON返回的实现方案
核心逻辑是将cURL获取到的二进制PDF内容做Base64编码后放入JSON结构,避免原始二进制字符破坏JSON格式,前端拿到编码内容后解码即可正常使用PDF。
完整PHP实现代码
<?php // 初始化cURL请求远程PDF资源 $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "填写远程PDF的实际请求地址"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 核心配置:将响应内容存入变量而非直接输出 curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // 自动跟随重定向 curl_setopt($ch, CURLOPT_ENCODING, ""); // 自动处理gzip等压缩响应 // 如需携带请求头、Cookie、POST参数,在此处补充对应curl配置即可 $pdfRawContent = curl_exec($ch); $requestError = curl_error($ch); curl_close($ch); // 请求异常处理 if ($requestError) { header('Content-Type: application/json'); echo json_encode([ 'code' => 500, 'message' => '远程PDF资源请求失败', 'data' => null ]); exit; } // 对二进制PDF内容做Base64编码,消除不可见字符对JSON格式的影响 $base64Pdf = base64_encode($pdfRawContent); // 输出标准JSON格式响应 header('Content-Type: application/json'); echo json_encode([ 'code' => 200, 'message' => 'success', 'data' => [ 'file_name' => 'document.pdf', // 可自定义返回给前端的文件名 'mime_type' => 'application/pdf', 'content' => $base64Pdf ] ]); exit; ?>
关键注意事项
- 绝对不能直接把原始二进制PDF内容拼接进JSON:二进制流包含大量不可见控制字符,会直接导致JSON格式损坏,前端无法正常解析。
- 必须开启cURL的
CURLOPT_RETURNTRANSFER配置,否则PDF内容会被直接输出到响应体,无法被PHP变量接收做后续处理。 - 输出JSON前确保没有任何额外输出:包括PHP的BOM头、调试打印内容、PHP报错信息,否则会导致前端拿到的响应不是合法JSON格式。
- 如果请求的PDF体积较大,建议适当调大PHP的
memory_limit配置,避免内存不足报错。
前端对接说明
你已经完成前端代码准备的情况下,只需从返回的JSON中取出data.content字段,拼接前缀data:application/pdf;base64,后转为Blob对象,即可按照你之前准备的逻辑实现PDF的预览或下载,和常规HTTP请求下载PDF的效果完全一致。
内容的提问来源于stack exchange,提问作者Čamo
相关产品推荐
相关产品推荐

