最近在做一个项目,需要开发电子签章的功能,也就是电子合同,下面:
具体思路:利用PDF合成,将所需要的文字,图片,合成到PDF里面。
首先下载 Fpdi 库:
https://gitee.com/meiyouzhanghao/fpdi
放到 extend 里面:
具体代码示例:
<?php namespace app\index\controller; use app\BaseController; use Fpdi\Fpdi; class IndexController extends BaseController { public function index() { return redirect('/index'); } /** * test */ public function test() { // $this->create(); // 生成PDF $this->sign(); }
/** * sign */ public function sign() { $pdf = new Fpdi(); $pdf->AddGBFont(); $file = public_path() . '/pdf/test.pdf'; // 获取页数 $pageCount = $pdf->setSourceFile($file); //遍历所有页面 for ($pageNo = 1; $pageNo <= $pageCount; $pageNo++) { //导入页面 $templateId = $pdf->importPage($pageNo); //获取导入页面的大小 $size = $pdf->getTemplateSize($templateId); //创建页面(横向或纵向取决于导入的页面大小) if ($size['width'] > $size['height']) { $pdf->AddPage('L', array($size['width'], $size['height'])); } else { $pdf->AddPage('P', array($size['width'], $size['height'])); } if ($pageNo == $pageCount) { $imgFile = public_path() . '/pdf/mine.png'; // 图片的 X坐标 Y坐标 宽度 高度 $pdf->Image($imgFile, 95, 85, 50, 50, 'png'); } if ($pageNo == $pageCount) { $signFile = public_path() . '/pdf/sign.png'; $pdf->Image($signFile, 95, 132, 40, 40, 'png'); } $pdf->SetFont('GB', '', 10); if ($pageNo == 1) { // X坐标 Y坐标 $pdf->Text(90, 98, iconv("UTF-8", "gbk", '8')); $pdf->Text(111, 98, iconv("UTF-8", "gbk", '12')); $pdf->Text(142, 98, iconv("UTF-8", "gbk", '2023')); $pdf->Text(164, 98, iconv("UTF-8", "gbk", '12')); $pdf->Text(39, 109, iconv("UTF-8", "gbk", '20')); } if ($pageNo == 2) { $pdf->Text(66, 98, iconv("UTF-8", "gbk", '刘备')); $pdf->Text(66, 109, iconv("UTF-8", "gbk", '330108192238333333')); $pdf->Text(66, 142, iconv("UTF-8", "gbk", '赵子龙')); $pdf->Text(66, 153, iconv("UTF-8", "gbk", '云南职培教育科技有限公司')); } // 水印背景 // $pdf->SetTextColor(211, 211, 211); // $txt = iconv("UTF-8", "gbk", '张三 330192238333333 张三 330192238333333 张三 330192238333333 张三 330192238333333 张三 330192238333333 张三 330192238333333'); // for ($i=2; $i<6; $i++) { // $pdf->RotatedText(15, $i*50, $txt, 30); // } //使用导入的页面 $pdf->useTemplate($templateId); } $pdf->Output('F', 'pdf/results.pdf'); die(); } /** * create */ public function create() { $pdf = new Fpdi(); $pdf->AddGBFont(); $pdf->AddPage(); $pdf->SetFont('GB', '', 10); $txt = <<<EOF 甲方:宇宙有点帅科技有限公司 乙方: 身份证号: 欢迎使用 FPDI 1.5.4! 据报道,目前,天文学家最新发明一种方法“透视”早期宇宙的迷雾,这样便于探测到宇宙早期恒星和星系释放的光线。 观察这些宇宙初期恒星诞生是科学家长期以来的一个目标,因为这将有助于解释宇宙是如何从大爆炸后的虚无境地演变成 138 亿年后现今观察到的复杂宇宙,现在这将是詹姆斯·韦伯太空望远镜和平方公里阵列射电望远镜(SKA)的主要勘测任务之一。 但是詹姆斯·韦伯太空望远镜观测的是红外波长范围,而新一代陆基 SKA 望远镜(预计 2024 年前后完工,真正投入使用将在 2030 年),将通过射电电波研究早期宇宙。 对于当前正在使用的射电望远镜而言,其技术挑战在于通过厚密氢云探测到恒星信号,氢云能更好地吸收光线,从而阻挡人们的观测视野。射电信号失真也会成为干扰因素,因此,探测宇宙初期恒星是现代射电宇宙学面临的重大挑战之一。 例如:天文学家试图探测比银河系信号微弱 10 万倍的系外信号,目前,英国剑桥大学研究人员最新开发一种数学方法,可使他们“透视”原始星云和其他宇宙噪声信号。因此,这将使他们避免由射电望远镜引起信号失真的不利影响。 该观点是宇宙氢分析射电实验(REACH)的一部分,这将允许天文学家通过与氢云的相互作用来观察宇宙初期的恒星,就像我们通过观察雾中阴影来推断景观一样。希望它能提高射电望远镜观测宇宙演变关键时期的质量和可靠性,预计宇宙氢分析射电实验的第一次观测将于今年晚些时候进行。 该研究报告负责人、剑桥大学卡文迪什实验室埃洛伊·德莱拉·阿西多(Eloy de Lera Acedo)博士说:“在宇宙第一批恒星形成的时候,宇宙基本上空荡荡的,主要由氢和氦构成,在引力作用下,这些元素最终聚集在一起,形成了适合核聚变的条件,这将促进第一批恒星的诞生,但是它们被所谓的中性氢云包围,中性氢云能较好地吸收光线,所以人们很难直接探测或者观察氢云后方的光线。” 2018 年,另一支研究小组发表研究结果,暗示可能探测到宇宙最早的光,但当时他们无法重复该实验结果,从而让他们相信最初的研究结果可能源自望远镜的干扰。阿西多博士说:“最初的研究结果需要新的物理学理论进行解释,因为氢气的温度应该比我们理解的宇宙温度阈值低很多,或者无法解释的背景辐射温度升高,可能是众所周知的宇宙微波背景辐射所致,如果我们能确认之前实验中发现的光信号来自于宇宙第一批恒星,那么这项研究的意义将非常巨大。” 为了研究宇宙发展的这段时期,通常被称为“宇宙黎明”,天文学家使用了 21 厘米长信号线,这是早期宇宙氢原子电磁辐射信号,他们寻找一种射电信号,能测量对比氢辐射和氢雾背景辐射之间的差异。 该方法是由阿西多博士和同事使用贝叶斯统计法来探测望远镜干扰和宇宙噪音信号,这样信号就被分离开来,要做到这一点,需要不同领域的最新技术进行验证。 据悉,目前位于南非卡鲁射电保护区的平方公里阵列射电望远镜项目已完成,该地区因具有优越的天空射电观测条件而被选中,这里远离人为制造的射频干扰,例如:电视和调频无线电信号等。 基于对宇宙微波背景辐射(CMB)的研究分析,人们已较深入地理解大爆炸和宇宙初期状况,但是宇宙第一束光线的形成时间仍是宇宙探索史上一个未揭晓的谜团。目前这项最新研究发表在近期出版的《自然天文学杂志》上。 EOF; $pdf->Write(10, iconv("UTF-8", "gbk", $txt)); $pdf->Output('F', 'pdf/test.pdf'); } }
打完收工!
标签:iconv,UTF,pageNo,示例,Text,gbk,---,thinkphp,pdf From: https://www.cnblogs.com/e0yu/p/17891121.html