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

如何为MPDF生成的PDF添加基于.pfx文件的数字签名?

使用mPDF基于.pfx文件添加数字签名的方案

没问题,不用切换到TCPDF,mPDF本身就支持基于.pfx证书的数字签名,我给你梳理下具体步骤和注意事项:

  • 先确认基础条件
    首先确保你用的是mPDF 7.x及以上版本(旧版本签名功能有限,建议升级到最新稳定版),同时PHP的openssl扩展必须开启(在php.ini里检查extension=openssl是否被注释,没开启的话打开并重启服务)。另外准备好你的.pfx证书文件和对应的密码。

  • 核心代码实现
    下面是完整的示例代码,你可以根据自己的需求调整:

    // 引入mPDF类(如果用composer的话自动加载,否则手动引入)
    require_once __DIR__ . '/vendor/autoload.php';
    
    // 初始化mPDF实例
    $mpdf = new \Mpdf\Mpdf();
    
    // 写入PDF内容(这里替换成你自己的HTML或文本内容)
    $mpdf->WriteHTML('<div style="padding:20px;"><h2>这是一份已数字签名的文档</h2><p>签名基于.pfx证书生成</p></div>');
    
    // 配置签名参数
    $signatureConfig = [
        // .pfx证书的路径(绝对路径更稳妥,避免路径问题)
        'signature' => '/var/www/html/your-cert.pfx',
        // pfx证书的密码
        'signaturePassword' => 'your-cert-password',
        // 签名的位置信息(可选)
        'location' => '北京市朝阳区',
        // 联系人信息(可选)
        'contactInfo' => 'contact@example.com',
        // 签署原因(可选)
        'reason' => '确认文档内容真实有效',
        // 是否显示可见的签名区域
        'visible' => true,
        // 可见签名的位置和样式配置
        'visibleSignatureOptions' => [
            'x' => 50, // 签名区域的X坐标(毫米)
            'y' => 50, // 签名区域的Y坐标(毫米)
            'w' => 180, // 签名区域宽度
            'h' => 60, // 签名区域高度
            // 签名区域内显示的文本,支持{date}和{time}变量
            'text' => '文档已签署\n签署时间:{date} {time}'
        ]
    ];
    
    // 执行签名操作
    $mpdf->Sign($signatureConfig);
    
    // 输出PDF,'D'表示下载,'F'表示保存到服务器,'I'表示在浏览器打开
    $mpdf->Output('signed-document.pdf', 'D');
    
  • 常见问题提醒

    • 如果出现证书读取失败的错误,先检查.pfx文件的路径是否正确,服务器是否有读取该文件的权限
    • 若签名后PDF显示“签名无效”,可能是.pfx证书本身有问题(比如过期、未被信任),可以先在本地用PDF阅读器验证证书有效性
    • 可见签名的坐标需要根据你的PDF页面尺寸调整,默认mPDF页面是A4(210×297毫米)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:36:55