当前位置: 首页 > news >正文

tp6 合成两个pdf文件(附加pdf或者替换pdf)

最近在做项目有个需求,项目中需要根据设置的html合同模板自动生成PDF合同供客户下载签署,并根据回传的已签署合同尾页来替换原来未签署合同的尾页,合成新的已签署合同文本。

读取两个PDF文件并合成的 具体代码记录如下:

use setasign\Fpdi\Fpdi;
use think\Image;/** 读取pdf文件 并合成pdf页面* $filename: 原始pdf文件* $type: 生成pdf的类型  I:直接预览PDF文件  F:PDF文件保存到本地  S:返回PDF文件流  D:直接下载PDF文件* $add_filePath: 附件文件路径  可为图片或者pdf页面* $add_type:add 添加新的pdf页面   edit 替换最后一页pdf文件* $newfilename: 生成的新文件名  如果不存在默认替换原始文件*/
function readPDF($filename, $type='I', $add_filePath='', $add_type='add', $newfilename=''){// 加载现有的PDF文件$pdf = new FPDI();$pageCount = $pdf->setSourceFile($filename);//unlink($filename);//删除生成的初始pdf文件for ($pageNo = 1; $pageNo <= $pageCount; $pageNo++) {// 导入页面$templateId = $pdf->importPage($pageNo);$size = $pdf->getTemplatesize($templateId);$pdf->AddPage($size['orientation'], [$size['width'], $size['height']]);// 填充页面$pdf->useTemplate($templateId);//  $add_filePath = 'storage/business/seal/img/zhang.png';if($add_filePath){//需要合成图片 替换最后一页的pdf页面if ($pageNo == $pageCount && $add_type=='edit') {//210 297//替换最后一页PDF页面
//                $a = getimagesize($add_filePath);$pdf->Image($add_filePath, 0, 0, $size['width'], $size['height']); //}}}if( $add_type=='add'){//附加PDF文件if($add_filePath) {//需要合成图片 新加一个页面$pdf->AddPage();//新添加页面// 填充页面$pdf->Image($add_filePath, 0, 0, $size['width'], $size['height']); //}}if($newfilename){$filename = $newfilename;}// 保存PDF$pdfContent = $pdf->Output($filename, $type, true);//I:直接预览PDF文件、 D:直接下载PDF文件  F:PDF文件保存到本地  S:返回PDF文件流if ($type == 'S') {$pdfContent = base64_encode($pdfContent);return $pdfContent;}if($type == 'I'){exit;}return '';
}

配置:

1、加载包文件:

composer require setasign/fpdi

http://www.lryc.cn/news/496810.html

相关文章:

  • 工作:三菱PLC防止程序存储器爆满方法
  • jmeter 获取唯一全局变量及多线程读写的问题
  • 掌握 Spring Boot 中的缓存:技术和最佳实践
  • 动手学深度学习10.5. 多头注意力-笔记练习(PyTorch)
  • 13 设计模式之外观模式(家庭影院案例)
  • 单片机学习笔记 12. 定时/计数器_定时
  • Web安全基础实践
  • Zookeeper集群数据是如何同步的?
  • SpringCloud框架学习(第六部分:Sentinel实现熔断与限流)
  • 动态规划-----路径问题
  • Rust循环引用与多线程并发
  • 东方隐侠网安瞭望台第8期
  • 底部导航栏新增功能按键
  • C++ 之弦上舞:string 类与多样字符串操作的优雅旋律
  • centos8:Could not resolve host: mirrorlist.centos.org
  • Linux 定时任务 命令解释 定时任务格式详解
  • aws(学习笔记第十五课) 如何从灾难中恢复(recover)
  • github webhooks 实现网站自动更新
  • 【C语言】递归的内存占用过程
  • 365天深度学习训练营-第P6周:VGG-16算法-Pytorch实现人脸识别
  • 企业AI助理在数据分析与决策中扮演的角色
  • 洛谷 B2029:大象喝水 ← 圆柱体体积
  • go每日一题:mock打桩、defer、recovery、panic的调用顺序
  • STM32F103 HSE时钟倍频以及设置频率函数(新手向,本人也是新手)
  • renderExtraFooter 添加本周,本月,本年
  • SprinBoot整合KafKa的使用(详解)
  • 【机器学习】CatBoost 模型实践:回归与分类的全流程解析
  • PyTorch 实现动态输入
  • 【Linux相关】查看conda路径和conda和cudnn版本、安装cudnn、cuDNN无需登录官方下载链接
  • 基于Java Springboot环境保护生活App且微信小程序