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

java 在pdf中根据关键字位置插入图片(公章、签名等)

java 在pdf中根据关键字位置插入图片(公章、签名等)

1.使用依赖

		<dependency><groupId>com.itextpdf</groupId><artifactId>itext7-core</artifactId><version>7.1.12</version><type>pom</type></dependency>

2.工具类

import com.itextpdf.io.image.ImageData;
import com.itextpdf.io.image.ImageDataFactory;
import com.itextpdf.kernel.geom.Rectangle;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfPage;
import com.itextpdf.kernel.pdf.PdfReader;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.kernel.pdf.canvas.parser.PdfCanvasProcessor;
import com.itextpdf.kernel.pdf.canvas.parser.listener.IPdfTextLocation;
import com.itextpdf.kernel.pdf.canvas.parser.listener.RegexBasedLocationExtractionStrategy;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.Image;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;import java.io.File;
import java.util.Collection;/*** @author dume* @ClassName Pdf* @description: TODO* @date 2024年07月03日* @version: 1.0*/
public class PdfUtisl {private static Logger logger = LoggerFactory.getLogger(PdfUtisl.class);public static void main(String[] args)  throws Exception {String input = "D:\\te1.pdf";//通过指定pdf文件名,指定关键字,和指定的pdf文件的待处理页数做参数getKeyWordsLocation("D:\\te1.pdf","D:\\1.png","签名:", 50d,50d,0d,0d);}/*** 得到关键字位置插入图片* @param sourcePath 源文件* @param imagePath 图片位置* @param KEY_WORD 关键字* @param width 图片宽度* @param height 图片高度* @param x 相对关键字平移x轴距离* @param y 相对关键字平移y轴距离*/public static boolean getKeyWordsAndInsertImg(String sourcePath,String imagePath, String KEY_WORD,float width,float height,float x,float y) {try {//得到需要插入的图片ImageData imageData = ImageDataFactory.create(imagePath);//核心思路为对PdfDocument对象采用某种Strategy,这里使用RegexBasedLocationExtractionStrategyPdfReader pr = new PdfReader(sourcePath);//临时路径String UUID= UUIDUtils.createUUID();String tempPath = sourcePath.replace(".pdf","_"+UUID+".pdf");//生成新的PDF文件PdfDocument pd = new PdfDocument(pr, new PdfWriter(tempPath));Document document = new Document(pd);int pageCount = pd.getNumberOfPages();boolean insertFlag = false;//遍历每一页for(int i = 1; i <= pageCount; i++){PdfPage page = pd.getPage(i);//查找页中的匹配文字,并定位到位置。RegexBasedLocationExtractionStrategy strategy = new RegexBasedLocationExtractionStrategy(KEY_WORD);PdfCanvasProcessor processor = new PdfCanvasProcessor(strategy);processor.processPageContent(page);Collection<IPdfTextLocation> resultantLocations = strategy.getResultantLocations();//自定义结果处理if (!resultantLocations.isEmpty()) {for (IPdfTextLocation item : resultantLocations) {Rectangle boundRectangle = item.getRectangle();System.out.println(item.getText());System.out.println("关键字“" + KEY_WORD + "” 的坐标为 x: " + boundRectangle.getX() + "  ,y: " + boundRectangle.getY());Image image = new Image(imageData).scaleAbsolute(width, height).setFixedPosition(i, boundRectangle.getRight() + x, boundRectangle.getBottom()+y);document.add(image);insertFlag = true;break;}}}document.close();pr.close();pd.close();if(insertFlag){logger.info("图片插入成功!");}else{logger.error("图片插入失败!");return false;}File oldfile = new File( sourcePath);oldfile.delete();boolean is = new File(tempPath).renameTo(new File(sourcePath));if(is){logger.info("文件重命名成功!");}else{logger.error("文件重命名失败!");return false;}} catch (Exception e) {e.printStackTrace();logger.error("读取文件插入图片失败!"+e.getMessage());return false;}return true;}}

相关文章:

java 在pdf中根据关键字位置插入图片(公章、签名等)

java 在pdf中根据关键字位置插入图片&#xff08;公章、签名等&#xff09; 1.使用依赖 <dependency><groupId>com.itextpdf</groupId><artifactId>itext7-core</artifactId><version>7.1.12</version><type>pom</type>…...

施耐德EOCR系列电机保护器全面升级后無端子型

一、施耐德数码型产品升级背景 施耐德电气作为一家全球领先的能源管理和自动化解决方案提供商&#xff0c;其产品线包括各种电动机保护器等数码型产品。随着技术的不断发展和市场需求的变化&#xff0c;施耐德会对其产品进行定期升级和优化。在升级过程中&#xff0c;产品的设…...

27.数码管的驱动,使用74HC595移位寄存器芯片

PS&#xff1a;升腾A7pro系列FPGA没有数码管外设&#xff0c;因此以AC620FPGA为例展开实验。 &#xff08;1&#xff09;共阳极数码管和共阴极数码管示意图&#xff1a; AC620中的数码管属于共阳极数码管&#xff0c;段选端口(dp,g,f,e,d,c,b,a)低电平即可点亮led。人眼的视觉…...

TCP/IP 原理、实现方式与优缺点

TCP/IP&#xff08;传输控制协议/网际协议&#xff09; 是互联网的核心协议套件&#xff0c;主要用于在不同计算机之间进行通信。它包括多个层次的协议&#xff0c;每层协议负责不同的功能。TCP/IP 的四个层次模型如下&#xff1a; 网络接口层&#xff1a;负责在特定的物理网络…...

利率债与信用债的区别及其与债券型基金的关系

利率债与信用债的定义及其区别 定义 利率债&#xff1a; 定义&#xff1a;利率债是指由主权或类主权主体&#xff08;如中华人民共和国财政部、国家开发银行等&#xff09;发行的债券。这些债券通常被认为没有信用风险&#xff0c;因为它们由国家信用背书。特点&#xff1a;由…...

linux下解压命令

在Linux下&#xff0c;解压缩文件通常涉及多种命令&#xff0c;具体取决于文件的压缩格式。以下是一些常用的解压缩命令&#xff1a; tar.gz / .tgz 如果文件扩展名为 .tar.gz 或 .tgz&#xff0c;你可以使用 tar 命令来解压缩&#xff1a; tar -xzf filename.tar.gz这里的 -x …...

Vulnhub靶场DC-3-2练习

目录 0x00 准备0x01 主机信息收集0x02 站点信息收集0x03 漏洞查找与利用1. joomla漏洞查找2. SQL注入漏洞3. 破解hash4. 上传一句话木马5. 蚁剑连接shell6. 反弹shell7. 提权 0x04 总结 0x00 准备 下载链接&#xff1a;https://download.vulnhub.com/dc/DC-3-2.zip 介绍&#…...

Swift入门笔记

Swift入门笔记 简单值控制流函数和闭包对象和类枚举和结构体并发协议和扩展错误处理泛型 简单值 // 声明变量 var myVariable 42 myVariable 50// 声明常量 let myConstant 42// 声明类型 let implicitInteger 70 let implicitDouble 70.0 let explicitDouble: Double 7…...

【提交ACM出版 | EIScopus检索稳定 | 高录用】第五届大数据与社会科学国际学术会议(ICBDSS 2024,8月16-18)

第五届大数据与社会科学国际学术会议&#xff08;ICBDSS 2024&#xff09;将于2024年08月16-18日在中国-上海隆重举行。 ICBDSS会议在各专家教授的支持下&#xff0c;去年已成功举办了四届会议。为了让更多的学者有机会参与会议分享交流经验。本次会议主要围绕“大数据”、“社…...

Postman与世界相连:集成第三方服务的全面指南

&#x1f50c; Postman与世界相连&#xff1a;集成第三方服务的全面指南 Postman不仅是API开发和测试的强大工具&#xff0c;还支持与多种第三方服务的集成&#xff0c;从而扩展其功能&#xff0c;提高开发和测试的效率。本文将深入探讨如何在Postman中集成第三方服务&#xf…...

Perl 语言开发(十四):数据库操作

目录 1. 数据库连接 2. 基本数据库操作 2.1 插入数据 2.2 查询数据 2.3 更新数据 2.4 删除数据 3. 高级查询 3.1 多表连接 3.2 子查询 3.3 聚合查询 4. 事务处理 5. 数据库连接池 6. 常见的数据库模块 7. 综合实例 结论 数据库操作是大多数软件系统的核心部分。…...

Qt+ESP32+SQLite 智能大棚

环境简介 硬件环境 ESP32、光照传感器、温湿度传感器、继电器、蜂鸣器 基本工作流程 上位机先运行&#xff0c;下位机启动后尝试连接上位机连接成功后定时上报传感器数据到上位机&#xff0c;上位机将信息进行处理展示判断下位机传感器数据&#xff0c;如果超过设置的阈值&a…...

Android Viewpager2 remove fragmen不生效解决方案

一、介绍 在如今的开发过程只&#xff0c;内容变化已多单一的fragment&#xff0c;变成连续的&#xff0c;特别是以短视频或者直播为主的场景很多。从早起的Viewpage只能横向滑动&#xff0c;到如今的viewpage2可以支持横向或者竖向滑动。由于viewpage2的adapter在设计时支持缓…...

桃园南路上的红绿灯c++

题目描述 XXX非常讨厌等红绿灯&#xff0c;于是他仔细观察了桃园南路与科技路交叉口的一个红绿灯的周期。 从七点半开始&#xff0c;这个红绿灯的每个周期会按照下面四个阶段变化&#xff1a; 先保持 x 分钟的红灯然后保持 y 分钟的黄灯然后保持 z 分钟的绿灯最后保持 y 分钟…...

有关去中心化算路大模型的一些误区:低带宽互连导致训练速度太慢;小容量设备无法生成基础规模的模型;去中心化总是会花费更多;虫群永远不够大

目录 有关去中心化算路大模型的一些误区 低带宽互连导致训练速度太慢 挑战与解决方案 展望 小容量设备无法生成基础规模的模型 1. 模型规模与设备内存 2. 解决方案 3. 效率挑战 FSDP(Fully Sharded Data Parallel) Zero-3 去中心化总是会花费更多 虫群永远不够大…...

uni-app iOS上架相关App store App store connect 云打包有次数限制

app store上架成功&#xff0c;亲测在苹果开发者通过审核后在数小时内app store是不会更新的&#xff0c;昨天4点多通过审核&#xff0c;在下班六点半时app store仍未更新&#xff0c;早上来看更新了。 相册权限 uni-app云打包免费有次数 切换一个账号继续...

python单测框架之pytest常见用法

单测框架的作用 测试发现&#xff1a;从多个文件中寻找测试用例。测试执行&#xff1a;按照一定顺序去执行并且生成结果。测试断言&#xff1a;判断最终结果与实际结果的差异。测试报告&#xff1a;统计测试进度、耗时、通过率&#xff0c;生成测试报告。 pytest简介 pytest是…...

[终端安全]-8 隐私保护和隐私计算技术

1 隐私保护相关法规和标准 1&#xff09;国内法规和标准 1.1&#xff09;中华人民共和国网络安全法&#xff08;2017年&#xff09; - 规定了个人信息的保护和数据安全的基本原则。 - 要求网络运营者采取措施防止数据泄露、篡改和丢失。 1.2&#xff09;信息安全技术&#x…...

MySQL 日志深度解析:从查询执行到性能优化

引言 MySQL 日志是数据库管理员和开发者的宝贵资源&#xff0c;它提供了查询执行的详细情况&#xff0c;帮助我们诊断问题和优化性能。本文将深入分析一个具体的 MySQL 日志条目&#xff0c;解释其含义&#xff0c;并提供针对性的优化建议。 日志信息概览 让我们先来快速了解…...

sql server 练习题5

课后作业 在homework库下执行 作业1&#xff1a; 案例&#xff1a;根据用户分数划分等级。小于60分为不及格&#xff0c;[60,80)为及格&#xff0c;[80,90)为良好&#xff0c;大于等于90分以上为优秀。 建表语句&#xff1a; CREATE TABLE Grades ( ID INT PRIMARY KEY, Name V…...

神经网络从入门到精通:10个核心概念+8个实战代码,小白也能懂

神经网络从入门到精通:10个核心概念+8个实战代码,小白也能懂 副标题: 从像素到概念的函数映射,附完整训练流程实战 一、痛点:为什么神经网络这么难理解? 很多初学者第一次接触神经网络时,会被各种术语绕晕:神经元、权重、偏置、激活函数、反向传播、梯度下降… 感觉像…...

空馈方法导向的高增益天线方法【附模型】

✨ 长期致力于环焦反射面、反射阵、透射阵、相位效率、宽带、高效率、低剖面、口径场叠加、轨道角动量研究工作&#xff0c;擅长数据搜集与处理、建模仿真、程序编写、仿真设计。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流&#xff0c;点击《获取方式》 &#xff08;1&#xff09…...

泉盛UV-K5/K6对讲机专业级固件定制与功能扩展指南

泉盛UV-K5/K6对讲机专业级固件定制与功能扩展指南 【免费下载链接】uv-k5-firmware-custom 全功能泉盛UV-K5/K6固件 Quansheng UV-K5/K6 Firmware 项目地址: https://gitcode.com/gh_mirrors/uvk5f/uv-k5-firmware-custom 泉盛UV-K5/K6对讲机LOSEHU固件是一款基于多个开…...

工业视觉开发的基石:GenICam 简介

在工业自动化和机器视觉领域&#xff0c;“碎片化”曾是开发者面临的最大痛点。不同品牌的相机使用不同的通信协议、参数定义和 SDK。为了获取一张图像或调节曝光时间&#xff0c;开发者往往需要学习多个厂商的驱动接口。而 GenICam (Generic Interface for Cameras) 标准的出现…...

别再被‘Requirement already satisfied’搞懵了!手把手教你用-m参数精准安装Python包

彻底解决Python包安装冲突&#xff1a;从报错到精通的完整指南 每次在命令行输入pip install后看到"Requirement already satisfied"的提示&#xff0c;是不是让你既困惑又沮丧&#xff1f;这背后往往隐藏着多Python环境冲突的问题。今天我们就来深入剖析这个常见痛点…...

大模型MoE架构中活跃参数量的真相与工程实践

1. 项目概述&#xff1a;大模型参数规模与实际激活机制的真相你可能在各种技术社区、新闻标题甚至朋友圈里反复看到这句话&#xff1a;“GPT-4拥有1.8万亿参数&#xff0c;但每次只调用其中2%”。它听起来既震撼又神秘——就像说一座藏书一亿册的超级图书馆&#xff0c;每次你问…...

AI Agent培训赋能金融/医疗/制造三大赛道(附2023真实训战数据与客户增效曲线)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;AI Agent培训赋能产业变革的底层逻辑 AI Agent并非传统意义上的自动化脚本&#xff0c;而是具备目标理解、环境感知、规划推理与工具调用能力的智能体。其产业赋能的底层逻辑&#xff0c;在于将人类专家…...

通过Taotoken的CLI工具一键配置开发环境与API密钥

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 通过Taotoken的CLI工具一键配置开发环境与API密钥 对于需要接入多个大模型服务的开发团队而言&#xff0c;统一管理API密钥和端点配…...

ADAS系统设计全解析:从传感器融合到域控制器实战

1. 项目概述与行业背景最近几年&#xff0c;但凡和汽车沾点边的行业&#xff0c;都绕不开“智能化”这三个字。作为一名在汽车电子和嵌入式系统领域摸爬滚打了十多年的工程师&#xff0c;我亲眼见证了从简单的倒车雷达&#xff0c;到如今能自动跟车、紧急刹车的ADAS系统&#x…...

如何高效使用Gofile下载器:从单文件到批量下载的完整指南

如何高效使用Gofile下载器&#xff1a;从单文件到批量下载的完整指南 【免费下载链接】gofile-downloader Download files from https://gofile.io 项目地址: https://gitcode.com/gh_mirrors/go/gofile-downloader Gofile下载器是一款专门用于从Gofile.io平台下载文件的…...