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

如何使用MPDF将两个已生成的PDF文件合并为单个PDF文件?

用mPDF合并多个生成的PDF文件

嘿,好消息!mPDF本身就支持合并PDF文件,不用额外依赖其他工具。针对你的场景,我给你两种可行的方案:

方案1:先生成单个PDF,再合并成一个文件

如果你已经生成了两个独立的PDF文件(就像你现在的代码那样),可以用下面的代码把它们合并:

// 先定义要合并的PDF文件路径列表
$pdf_files = [
    ROOT . '/app/webroot/Service_Invoices/' . DS . 'ISE-00000014Y18.pdf',
    ROOT . '/app/webroot/Service_Invoices/' . DS . 'ISE-00000005Y18.pdf'
];

// 初始化一个新的mPDF实例作为合并后的容器
$mergedMpdf = new \mPDF('utf-8', 'A4', '', '', 5, 5, 36, 10, 5, 4);

foreach ($pdf_files as $file) {
    // 加载源PDF文件
    $pageCount = $mergedMpdf->SetSourceFile($file);
    
    // 导入该PDF的所有页面并添加到合并后的PDF中
    for ($i = 1; $i <= $pageCount; $i++) {
        $templateId = $mergedMpdf->ImportPage($i);
        $mergedMpdf->UseTemplate($templateId);
        
        // 如果不是当前PDF的最后一页,添加新页面避免内容重叠
        if ($i < $pageCount) {
            $mergedMpdf->AddPage();
        }
    }
    
    // 每个源PDF之间添加分页(可选,根据需求调整)
    if ($file !== end($pdf_files)) {
        $mergedMpdf->AddPage();
    }
}

// 输出合并后的PDF('F'表示保存到文件,'I'表示直接在浏览器打开)
$mergedFileName = 'merged_invoices.pdf';
$mergedFilePath = ROOT . '/app/webroot/Service_Invoices/' . DS . $mergedFileName;
$mergedMpdf->Output($mergedFilePath, 'F');

方案2:直接生成时合并(更高效,无需生成单个文件)

如果你不需要保留单个的PDF文件,可以直接在循环中把所有内容添加到同一个mPDF实例里,一步生成合并后的文件,这样更节省IO操作:

$invoice_nos = ['0'=>'ISE-00000014Y18','1'=>'ISE-00000005Y18'];

// 初始化一个mPDF实例
$mpdf = new \mPDF('utf-8', 'A4' ,'','',5,5,36,10,5,4);

foreach ($invoice_nos as $key => $invoice_no) {
    $html = 'Invoice No - '.$invoice_no;
    
    // 写入当前发票的HTML内容
    $mpdf->WriteHTML($html, 2);
    
    // 如果不是最后一个发票,添加新页面分隔
    if ($key !== array_key_last($invoice_nos)) {
        $mpdf->AddPage();
    }
}

// 输出合并后的PDF
$mergedFileName = 'merged_invoices.pdf';
$mergedFilePath = ROOT . '/app/webroot/Service_Invoices/' . DS . $mergedFileName;
$mpdf->Output($mergedFilePath, 'F');

关键方法说明

  • SetSourceFile($file):加载要合并的源PDF文件,返回该PDF的总页数。
  • ImportPage($pageNumber):导入指定页码的页面,返回模板ID。
  • UseTemplate($templateId):把导入的页面模板添加到当前mPDF实例中。
  • AddPage():添加新的空白页面,用于分隔不同的内容或PDF文件。

根据你的需求选择合适的方案就好啦!

内容的提问来源于stack exchange,提问作者Ajay Krishna Dutta

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:20:54