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

Laravel 8中如何合并两份PDF文件为单个可下载文件?

TCPDF场景下双PDF合并实现方案

TCPDF本身未内置PDF合并能力,你可以搭配同生态的FPDI扩展完成需求,无需更换现有生成逻辑,具体实现步骤如下:

前置依赖安装

通过composer安装FPDI的TCPDF适配版本:

composer require setasign/fpdi

核心实现逻辑

  • 第一步:将你已有的TCPDF动态生成逻辑输出为PDF字符串,无需落盘存储:
// 这里是你原有生成TCPDF的业务逻辑,生成$tcpdf实例后执行以下代码获取内容
$generatedPdf = $tcpdf->Output('', 'S');
  • 第二步:接收并校验用户上传的PDF文件,过滤非法后缀、超限大小的文件,获取上传文件的内容/临时路径。
  • 第三步:初始化FPDI实例,依次导入两份PDF的所有页面后输出下载:
use setasign\Fpdi\Tcpdf\Fpdi;
use setasign\Fpdi\PdfParser\StreamReader;

// 初始化合并用实例
$mergedPdf = new Fpdi();

// 导入动态生成的PDF
$pageCount = $mergedPdf->setSourceFile(StreamReader::createByString($generatedPdf));
for ($i = 1; $i <= $pageCount; $i++) {
    $template = $mergedPdf->importPage($i);
    $mergedPdf->AddPage();
    $mergedPdf->useTemplate($template);
}

// 导入用户上传的PDF,这里示例用文件路径,也可以用StreamReader读字符串
$uploadPageCount = $mergedPdf->setSourceFile($yourUploadedPdfTempPath);
for ($i = 1; $i <= $uploadPageCount; $i++) {
    $template = $mergedPdf->importPage($i);
    $mergedPdf->AddPage();
    $mergedPdf->useTemplate($template);
}

// 直接输出合并后的PDF供用户下载
$mergedPdf->Output('merged_form.pdf', 'D');

注意事项

  • FPDI免费版仅支持兼容PDF 1.4及以下版本的文件,若用户上传高版本或加密的PDF,可提前做格式转码预处理,或使用FPDI商业版支持高版本解析。
  • 所有用户上传的PDF必须做安全校验,避免恶意文件注入风险。
  • 原有TCPDF生成的自定义排版、水印、页边距等格式不会在合并过程中丢失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 14:24:00