如何为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
相关产品推荐
相关产品推荐

