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

如何在PHP/CodeIgniter中使用MPDF生成多份PDF并打包为Zip下载

在CodeIgniter中用MPDF生成多份PDF并打包Zip下载的正确实现

现有代码的核心问题

  • 错误地将HTML模板内容而非生成的PDF二进制数据添加到了Zip包中
  • 调用Output('xxx.pdf', 'F')仅将PDF保存到服务器,但后续未读取该文件,反而直接使用了HTML变量

修正方案(推荐:直接获取PDF二进制内容,减少IO操作)

无需先将PDF保存到服务器,直接获取MPDF生成的二进制内容并添加到Zip:

// 加载CodeIgniter的Zip类
$this->load->library('zip');

// 循环处理每个订单(示例逻辑,根据实际业务调整)
foreach ($orders as $order) {
    // 加载视图生成PDF对应的HTML内容
    $html = $this->load->view('download_invoice', $finalAr, true);
    
    // 初始化MPDF实例,指定临时目录
    $mpdf = new \Mpdf\Mpdf(['tempDir' => __DIR__ . '/../../tmp']);
    $mpdf->debug = true;
    $mpdf->WriteHTML($html);
    
    // 使用'S'参数获取PDF的二进制字符串内容(不保存到文件)
    $pdfBinaryContent = $mpdf->Output('Invoice_' . $order['orderId'] . '.pdf', 'S');
    
    // 将PDF二进制数据添加到Zip包
    $this->zip->add_data('Invoice_' . $order['orderId'] . '.pdf', $pdfBinaryContent);
}

// 生成Zip包并触发浏览器下载
$this->zip->download('invoices_backup.zip');

备选方案(需保留服务器上的PDF文件)

如果需要在服务器留存生成的PDF文件,可先保存再读取内容添加到Zip:

$this->load->library('zip');
$tempSaveDir = __DIR__ . '/../../tmp/';
// 确保目录存在且有写入权限
if (!is_dir($tempSaveDir)) {
    mkdir($tempSaveDir, 0755, true);
}

foreach ($orders as $order) {
    $html = $this->load->view('download_invoice', $finalAr, true);
    $mpdf = new \Mpdf\Mpdf(['tempDir' => $tempSaveDir]);
    $mpdf->debug = true;
    $mpdf->WriteHTML($html);
    
    $pdfFilename = 'Invoice_' . $order['orderId'] . '.pdf';
    $fullSavePath = $tempSaveDir . $pdfFilename;
    
    // 将PDF保存到服务器临时目录
    $mpdf->Output($fullSavePath, 'F');
    
    // 读取生成的PDF文件并添加到Zip
    if (file_exists($fullSavePath)) {
        $this->zip->add_data($pdfFilename, file_get_contents($fullSavePath));
        // 可选:删除临时PDF文件,节省服务器空间
        unlink($fullSavePath);
    }
}

$this->zip->download('invoices_backup.zip');

注意事项

  • 确保MPDF的tempDir及临时文件保存目录拥有写入权限,否则会生成PDF失败
  • 若处理大量或大体积PDF,需调整PHP的memory_limit配置,避免内存溢出
  • CodeIgniter的Zip类会自动处理二进制内容的编码,无需额外转换

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 10:15:56