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

Laravel中合并Base64格式PDF及解决合并报错问题

解决Webklex\PDFMerger合并Base64解码PDF内容报错问题

问题根源

报错提示Could not locate PDF on '%PDF-1.3\r\n%????.......,核心原因是addPDF()方法默认接收文件路径作为参数,你直接传入了解码后的PDF二进制内容,组件误将二进制内容当作文件路径去查找,因此抛出找不到文件的异常。另外,多余的mb_convert_encoding调用会破坏PDF二进制文件结构,也是潜在问题。

解决方案:通过临时文件中转处理

将Base64解码后的PDF二进制内容写入临时文件,再用临时文件路径传入addPDF方法,具体代码如下:

use Webklex\PDFMerger\Facades\PDFMergerFacade as PDFMerger;

// 解码Base64格式的PDF内容
$pdfContent1 = base64_decode($resp_1);
$pdfContent2 = base64_decode($resp_2);

// 定义临时文件路径,建议存在storage目录下
$tempFile1 = storage_path('temp/pdf_temp_1.pdf');
$tempFile2 = storage_path('temp/pdf_temp_2.pdf');

// 确保临时目录存在
if (!is_dir(storage_path('temp'))) {
    mkdir(storage_path('temp'), 0755, true);
}

// 将二进制内容写入临时文件
file_put_contents($tempFile1, $pdfContent1);
file_put_contents($tempFile2, $pdfContent2);

// 初始化PDF合并器并添加临时文件
$merger = PDFMerger::init();
$merger->addPDF($tempFile1, 'all');
$merger->addPDF($tempFile2, 'all');

// 合并并保存最终PDF
$merger->merge();
$mergedFilePath = public_path('storage/merged.pdf');
$merger->save($mergedFilePath);

// 合并完成后清理临时文件(可选)
unlink($tempFile1);
unlink($tempFile2);

关键修改说明

  • 移除mb_convert_encoding:PDF是二进制文件,不需要进行字符编码转换,转码会损坏文件结构。
  • 临时文件中转:利用临时文件将二进制内容转换为组件支持的文件路径参数,符合addPDF方法的设计预期。
  • 临时目录检查:提前创建临时目录,避免因目录不存在导致文件写入失败。
  • 临时文件清理:合并完成后删除临时文件,避免占用服务器存储空间。

内容的提问来源于stack exchange,提问作者DeveloperX

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 06:37:04