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
相关文章:
tp6 合成两个pdf文件(附加pdf或者替换pdf)
最近在做项目有个需求,项目中需要根据设置的html合同模板自动生成PDF合同供客户下载签署,并根据回传的已签署合同尾页来替换原来未签署合同的尾页,合成新的已签署合同文本。 读取两个PDF文件并合成的 具体代码记录如下: use set…...
工作:三菱PLC防止程序存储器爆满方法
工作:三菱PLC防止程序存储器爆满方法 一、防止程序存储器爆满方法1、编程时,添加行注释时,记得要选“外围”,这样不会占用PLC程序存储器内存;2、选择“外围”的注释,前面会有个*星号,方便检查 二…...
jmeter 获取唯一全局变量及多线程读写的问题
一、jmeter 获取唯一ID号全局变量 在JMeter中获取唯一ID号并设置为全局变量,可以通过以下几种方法实现: 使用JMeter内置的UUID函数: JMeter提供了一个内置的函数__UUID,可以生成一个随机的UUID,这个UUID是全局唯一的。…...
掌握 Spring Boot 中的缓存:技术和最佳实践
缓存是一种用于将经常访问的数据临时存储在更快的存储层(通常在内存中)中的技术,以便可以更快地满足未来对该数据的请求,从而提高应用程序的性能和效率。在 Spring Boot 中,缓存是一种简单而强大的方法,可以…...
动手学深度学习10.5. 多头注意力-笔记练习(PyTorch)
本节课程地址:多头注意力代码_哔哩哔哩_bilibili 本节教材地址:10.5. 多头注意力 — 动手学深度学习 2.0.0 documentation 本节开源代码:...>d2l-zh>pytorch>chapter_multilayer-perceptrons>multihead-attention.ipynb 多头注…...
13 设计模式之外观模式(家庭影院案例)
一、什么是外观模式? 1.定义 在日常生活中,许多人喜欢通过遥控器来控制家中的电视、音响、DVD 播放器等设备。虽然这些设备各自独立工作,但遥控器提供了一个简洁的界面,让用户可以轻松地操作多个设备。而这一设计理念正是 外观模…...
单片机学习笔记 12. 定时/计数器_定时
更多单片机学习笔记:单片机学习笔记 1. 点亮一个LED灯单片机学习笔记 2. LED灯闪烁单片机学习笔记 3. LED灯流水灯单片机学习笔记 4. 蜂鸣器滴~滴~滴~单片机学习笔记 5. 数码管静态显示单片机学习笔记 6. 数码管动态显示单片机学习笔记 7. 独立键盘单片机学习笔记 8…...
Web安全基础实践
实践目标 (1)理解常用网络攻击技术的基本原理。(2)Webgoat实践下相关实验。 WebGoat WebGoat是由著名的OWASP负责维护的一个漏洞百出的J2EE Web应用程序,这些漏洞并非程序中的bug,而是故意设计用来讲授We…...
Zookeeper集群数据是如何同步的?
大家好,我是锋哥。今天分享关于【Zookeeper集群数据是如何同步的?】面试题。希望对大家有帮助; Zookeeper集群数据是如何同步的? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Zookeeper集群中的数据同步是通过一种称为ZAB(Zo…...
SpringCloud框架学习(第六部分:Sentinel实现熔断与限流)
目录 十四、SpringCloud Alibaba Sentinel实现熔断与限流 1.简介 2.作用 3.下载安装 4.微服务 8401 整合 Sentinel 入门案例 5.流控规则 (1)基本介绍 (2)流控模式 Ⅰ. 直接 Ⅱ. 关联 Ⅲ. 链路 (3࿰…...
动态规划-----路径问题
动态规划-----路径问题 下降最小路径和1:状态表示2:状态转移方程3 初始化4 填表顺序5 返回值6 代码实现 总结: 下降最小路径和 1:状态表示 假设:用dp[i][j]表示:到达[i,j]的最小路径 2:状态转…...
Rust循环引用与多线程并发
循环引用与自引用 循环引用的概念 循环引用指的是两个或多个对象之间相互持有对方的引用。在 Rust 中,由于所有权和生命周期的严格约束,直接创建循环引用通常会导致编译失败。例如: // 错误的循环引用示例 struct Node {next: Option<B…...
东方隐侠网安瞭望台第8期
谷歌应用商店贷款应用中的 SpyLoan 恶意软件影响 800 万安卓用户 迈克菲实验室的新研究发现,谷歌应用商店中有十多个恶意安卓应用被下载量总计超过 800 万次,这些应用包含名为 SpyLoan 的恶意软件。安全研究员费尔南多・鲁伊斯上周发布的分析报告称&…...
底部导航栏新增功能按键
场景需求: 在底部导航栏添加power案件,单击息屏,长按 关机 如下实现图 借此需求,需要掌握技能: 底部导航栏如何实现新增、修改、删除底部导航栏流程对底部导航栏部分样式如何修改。 比如放不下、顺序排列、坑点如…...
C++ 之弦上舞:string 类与多样字符串操作的优雅旋律
string 类的重要性及与 C 语言字符串对比 在 C 语言中,字符串是以 \0 结尾的字符集合,操作字符串需借助 C 标准库的 str 系列函数,但这些函数与字符串分离,不符合 OOP 思想,且底层空间管理易出错。而在 C 中࿰…...
centos8:Could not resolve host: mirrorlist.centos.org
【1】错误消息: [rootcentos211 redis-7.0.15]# yum update CentOS Stream 8 - AppStream …...
Linux 定时任务 命令解释 定时任务格式详解
目录 时间命令 修改时间和日期 定时任务格式 定时任务执行 查看定时任务进程 重启定时任务 时间命令 #查看时间 [rootlocalhost ~]# date 2021年 07月 23日 星期五 14:38:19 CST --------------------------------------- [rootlocalhost ~]# date %F 2021-07-23 -----…...
aws(学习笔记第十五课) 如何从灾难中恢复(recover)
aws(学习笔记第十五课) 如何从灾难中恢复 学习内容: 使用CloudWatch对服务器进行监视与恢复区域(region),可用区(available zone)和子网(subnet)使用自动扩展(AutoScalingGroup) 1. 使用CloudWatch对服务器进行监视与恢复 整体架构 这里模拟Jenkins Se…...
github webhooks 实现网站自动更新
本文目录 Github Webhooks 介绍Webhooks 工作原理配置与验证应用云服务器通过 Webhook 自动部署网站实现复制私钥编写 webhook 接口Github 仓库配置 webhook以服务的形式运行 app.py Github Webhooks 介绍 Webhooks是GitHub提供的一种通知方式,当GitHub上发生特定事…...
【C语言】递归的内存占用过程
递归 递归是函数调用自身的一种编程技术。在C语言中,递归的实现会占用内存栈(Call Stack),每次递归调用都会在栈上分配一个新的 “栈帧(Stack Frame)”,用于存储本次调用的函数局部变量、返回地…...
3步快速搭建微信小程序商城:巴爷商城开源项目实战指南
3步快速搭建微信小程序商城:巴爷商城开源项目实战指南 【免费下载链接】wechat_mall_applet A real mall wechat applet 项目地址: https://gitcode.com/gh_mirrors/we/wechat_mall_applet 还在为开发微信小程序商城而烦恼吗?🤔 今天我…...
Postman登录接口响应为空?HTTP响应体未刷出的三层根因分析
1. 这不是Postman的问题,是接口通信链路上某个环节“失语”了你用Postman调后端登录接口,请求发出去了,状态码也回来了(比如200),但响应体里空空如也——没有JSON数据、没有token字段、甚至Response标签页里…...
【限时解密】某上市医美集团未公开的AI Agent知识图谱:覆盖1,843种肤质-成分-疗程关联规则
更多请点击: https://codechina.net 第一章:AI Agent在美容行业应用的范式革命 传统美容服务长期受限于人工经验依赖、个性化响应延迟与跨渠道数据割裂三大瓶颈。AI Agent 的兴起正从根本上重构行业服务逻辑——它不再仅是辅助工具,而是具备…...
7个实用技巧让你快速掌握Sabaki围棋软件:从零基础到高手复盘
7个实用技巧让你快速掌握Sabaki围棋软件:从零基础到高手复盘 【免费下载链接】Sabaki An elegant Go board and SGF editor for a more civilized age. 项目地址: https://gitcode.com/gh_mirrors/sa/Sabaki Sabaki是一款优雅的围棋棋盘和SGF编辑器ÿ…...
速学linux命令教程
概述:用户使用shell跟内核交互,Linux中有很多命令,不同的命令有不同的功能。多个命令合起来可以完成一个大的功能。命令很多我们不可能记得每条命令的用法。 所以,我们必须有一种方法来快速知道一个命令是如何使用的,…...
为什么我总是想很多,却很难开始做?
为什么我总是想很多,却很难开始做? 有一种人,脑子从来停不下来。 走路在想,洗澡在想,睡前还在想。 想人生方向,想技术路线,想项目结构,想商业模式,想内容选题,…...
Windows虚拟机完美运行macOS:OSX-Hyper-V终极实践指南
Windows虚拟机完美运行macOS:OSX-Hyper-V终极实践指南 【免费下载链接】OSX-Hyper-V OpenCore configuration for running macOS on Windows Hyper-V. 项目地址: https://gitcode.com/gh_mirrors/os/OSX-Hyper-V 你是否曾经梦想在一台Windows电脑上同时拥有m…...
linux基础命令有哪些? linux基础命令使用方法
本期介绍linux基础命令的使用1、用who命令显示当前Linux系统的用户名2、使用下列命令显示有关计算机系统信息:uname(显示操作系统的名称),uname –n(显示系统域名),uname –p(显示CPU 的名称)3、使用passwd命令修改用whoami命令找到的用户名和…...
ComfyUI-Custom-Scripts自动完成终极指南:如何快速提升AI绘画提示词效率
ComfyUI-Custom-Scripts自动完成终极指南:如何快速提升AI绘画提示词效率 【免费下载链接】ComfyUI-Custom-Scripts Enhancements & experiments for ComfyUI, mostly focusing on UI features 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI-Custom-Sc…...
通过curl命令快速测试Taotoken大模型聚合接口的连通性
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 通过curl命令快速测试Taotoken大模型聚合接口的连通性 在接入大模型服务时,直接使用curl命令进行接口测试是一种高效且…...
