PHP 对PDF文件实现数字签名 |
您所在的位置:网站首页 › pdf添加手写签名怎么加 › PHP 对PDF文件实现数字签名 |
PHP通过TCPDF库对生成的PDF文件进行数字签名。 效果如下: 这个是因为签名证书不在可信任证书列表中。 目录 准备数字证书 1.申请数字证书 2.自签名证书 安装TCPDF 证书签名 设置证书路径 设置证书信息 设置文档签名 设置签名外观 图像签名外观 空签名外观 完整代码 总结 准备数字证书 1.申请数字证书可以申请数字证书也可使用ssl证书,通过向CA机构或服务器平台申请获得。 申请后的证书文件,如果有crt文件,即可直接使用创建数字签名。 若没有,可通过命令获取crt文件。 如通过ssl证书签名 证书目录如下: 通过IIS下的pfx文件获得crt证书 附带有密码文件,创建crt需要密码。 命令如下: openssl pkcs12 -in fullchain.pfx -out tcpdf.crt -nodes命令行输入后,需要填写密码(没有密码直接回车), 之后就可得到数字签名所需的证书文件。 2.自签名证书可以创建自签名证书。 Tcpdf中自签名证书命令如下: 创建自签名: openssl req -x509 -nodes -days 365000 -newkey rsa:1024 -keyout tcpdf.crt -out tcpdf.crt过程如下: 需要输入一些证书信息。 附带两条转成其他格式的命令。 将crt导出到p12: openssl pkcs12 -export -in tcpdf.crt -out tcpdf.p12将pfx证书转换为pem: openssl pkcs12 -in tcpdf.pfx -out tcpdf.crt -nodes下载证书到项目目录中,以备程序使用。 安装TCPDF安装命令 composer require tecnickcom/tcpdf 证书签名 设置证书路径必须file开头接根目录下文件路径。 $certificate = 'file://common/tcpdf.crt'; 设置证书信息 $info = array( 'Name' => '测试数字签名', 'Location' => '北京', 'Reason' => '测试数字签名', 'ContactInfo' => 'http://new.solveset.com', ); 设置文档签名 $pdf->setSignature($certificate, $certificate, '123456yjl', '', 2, $info); 设置签名外观 图像签名外观 // 创建签名内容(图像和/或文本) $pdf->Image('common/southeast.jpg', 180, 70, 15, 15, 'JPG'); // 定义签名外观的活动区域 $pdf->setSignatureAppearance(180, 70, 15, 15); 空签名外观 $pdf->addEmptySignatureAppearance(180, 90, 15, 15); 完整代码 $pdf = new \TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); // 设置文档信息 $pdfName = '测试文档'; $pdf->SetCreator($pdfName); $pdf->SetAuthor('YJL'); $pdf->SetTitle($pdfName); $pdf->SetSubject($pdfName); //设置字体 stsongstdlight支持中文 $pdf->SetFont('stsongstdlight', '', 10); // 设置图片比例因子 $pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); // 设置自动分页 距离底部多少进行分页 $pdf->SetAutoPageBreak(true, PDF_MARGIN_BOTTOM); // 第一页 $pdf->AddPage(); $html = ' 购销合同 购销合同(供方)(以下简称乙方): 经协商同意,根据中华人民共和国经济法的规定,订立合同如下: 一、 产品名称、商标、型号、厂家、数量、价格、供货时间: 二、 质量要求技术标准、供方对质量负责的条件和期限:按技术协议 三、 交(提)货地点、方式:使用快递 四、 运输方式及到达站港和费用负担:送货上门、供方负担 五、 合理损耗及计算方法:无 六、 包装标准、包装物的供应与回收:原包装、不回收。 七、 验收标准、方法及提出异议期限:按原厂技术标准验收,需方收到货后提出异议期限为十五天。 八、 结算方式及期限:货到验收合格、发票到后一周内付款。 九、 违约责任:如发生质量问题,需方将提出索赔。具体事宜协商解决。 十、 解决合同纠纷的方式:合同发生争议时,双方应协商解决,协商不成时,任何一方可向经济合同仲裁委员会申请仲裁,或直接向人民法院起诉。 十一、 其它事项:本合同一式两份,双方各执一份,经双方签字盖章有效,均有法律效力。
订立合同人: ' $pdf->writeHTMLCell(0, 0, '', '', $html, 0, 1, 0, true, '1', true); // 数字签名 // 设置证书路径 必须file开头接根目录下文件路径 $certificate = 'file://common/tcpdf.crt'; // 设置证书信息 $info = array( 'Name' => '测试数字签名', 'Location' => '北京', 'Reason' => '测试数字签名', 'ContactInfo' => 'http://new.solveset.com', ); // 设置文档签名 $pdf->setSignature($certificate, $certificate, '123456yjl', '', 2, $info); // 设置签名外观 // 创建签名内容(图像和/或文本) $pdf->Image('common/southeast.jpg', 180, 70, 15, 15, 'JPG'); // 定义签名外观的活动区域 $pdf->setSignatureAppearance(180, 70, 15, 15); // 设置空签名外观 $pdf->addEmptySignatureAppearance(180, 90, 15, 15); // 四种模式 I输出、D下载、F保存本地、S输出二进制字符串 $fileNewName = $fileDir . $filename; $pdf->Output( 'test.pdf', 'I'); 总结按照官网的示例,通过创建自签名证书结合自己的实际场景做了一个数字签名应用。 有一点要注意,只能添加一个数字签名,设置两个的话,第二个的位置会覆盖签名的坐标,导致第一个签名在第二个位置。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |