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

如何在PHP中动态向PDF添加表格或二维码(电子签章需求)

问题

我有一份需多轮审批的规则类PDF文件,需要完成两个操作:

  • 在指定位置添加二维码作为电子签章;
  • 在PDF最后内容之后添加一个包含文本和二维码的无框表格(示例:若PDF最后内容结束于高度200的位置,新内容需置于高度210的位置)。

使用TCPDF时,writeHtml会将生成的HTML置于页面顶部,writeHTMLCell和MultiCell则需要指定具体的x、y坐标;尝试mPDF也遇到同样问题,且mPDF的Overwrite方法仅能覆盖自身生成的内容。

写入HTML前的PHP代码如下:

$pageCount = PDF::setSourceFile($file);
$template = PDF::importPage($i);
$size = PDF::getTemplateSize($template);
PDF::AddPage($size['orientation'], array($size['width'], $size['height']));
PDF::useTemplate($template);

// After this, I need to call writeHtml, writeHTMLCell, or MultiCell, but none of those met what I need.
// Or placing an image with PDF::Image also need to define the x and y
...
// PDF::SetX()
// PDF::SetY()
// PDF::Image($qrPath, null, null, 12, 12, 'PNG');
// PDF::WriteHTML(view('document-requests.approver.stamp', ['qr' => $qrPath]), true, false, true, false, '');
PDF::Output($file, 'F');
解决方案

针对TCPDF的实现方式

  1. 定位内容插入位置
    导入模板后,若已知原内容结束的Y坐标(比如示例中的200),直接通过SetY()将光标定位到目标位置(如210);若未知坐标,可通过解析原PDF内容边界(或提前记录生成原PDF时的内容高度)来确定插入点。
  2. 添加指定位置的二维码
    明确签章的精确坐标后,设置光标位置再插入图片:
    // 设置二维码的精确坐标(示例x=100,y=150)
    PDF::SetX(100);
    PDF::SetY(150);
    PDF::Image($qrPath, null, null, 12, 12, 'PNG');
    
  3. 在内容末尾添加无框表格
    定位到原内容下方后,写入无框表格的HTML:
    // 定位到原内容下方210的位置
    PDF::SetY(210);
    // 生成无框表格HTML
    $tableHtml = '<table border="0"><tr><td>审批人:XXX</td><td><img src="' . $qrPath . '" width="12" height="12"></td></tr></table>';
    // 写入HTML(已定位光标,不会从顶部开始)
    PDF::writeHTML($tableHtml, true, false, true, false, '');
    

针对mPDF的实现方式

mPDF导入外部PDF后无法自动识别内容末尾,需手动定位坐标:

  1. 导入页面并定位光标:
    $mpdf->SetImportUse();
    $pageCount = $mpdf->SetSourceFile($file);
    $template = $mpdf->ImportPage($i);
    $size = $mpdf->GetTemplateSize($template);
    $mpdf->AddPage($size['orientation'], [$size['width'], $size['height']]);
    $mpdf->UseTemplate($template);
    // 定位到原内容下方210的位置
    $mpdf->SetY(210);
    
  2. 添加二维码和表格:
    // 添加指定位置的二维码
    $mpdf->SetXY(100, 150);
    $mpdf->Image($qrPath, '', '', 12, 12);
    // 添加无框表格
    $tableHtml = '<table style="border:0;"><tr><td>审批记录:已完成</td><td><img src="' . $qrPath . '" width="12" height="12"></td></tr></table>';
    $mpdf->WriteHTML($tableHtml);
    
    注意:mPDF的Overwrite方法仅支持修改自身生成的内容,导入外部PDF后只能通过坐标定位新增内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 17:40:26