java通过pdf-box插件完成对pdf文件中图片/文字的替换
需要引入的Maven依赖:
<!-- pdf替换图片 --><dependency><groupId>e-iceblue</groupId><artifactId>spire.pdf.free</artifactId><version>5.1.0</version></dependency>
java代码:
public AjaxResult replacepdf(MultipartFile file) {try {//初始化 PdfDocument 类的实例PdfDocument doc = new PdfDocument();PdfDocument doc1 = null;int fileType = 0;doc.loadFromStream(file.getInputStream());//加载 PDF 文档//region 单页模板替换if (doc.getPages().getCount() <= 1) {//获取所需的页面PdfPageBase page = doc.getPages().get(0);//region 获取原图大小 位置PdfImageInfo[] imagesInfo = page.getImagesInfo();//获取指定图片的坐标Rectangle2D bounds = imagesInfo[imagesInfo.length - 1].getBounds();double x = bounds.getX();double y = bounds.getY();double width = bounds.getWidth();double height = bounds.getHeight();//endregion//替换公章PdfImage image2 = PdfImage.fromFile(uploadPath + "//zryk//zrykseal//img//zrykseal.jpg");page.deleteImage(imagesInfo.length - 1);page.getCanvas().drawImage(image2, x + 40, y, 87, 87);PdfImage image = PdfImage.fromFile(uploadPath + "//zryk//zryklogo//img//zryk.jpg");page.replaceImage(0, image);}//endregion//region 文字替换for (Object pageFonts : doc.getPages()) {PdfPageBase pageF = (PdfPageBase) pageFonts;//region 需要替换的文字信息String oldPhone = "xxxx-25689581";String newPhone = "xxxx-4523 2358";String oldPhone1 = "25569861";String newPhone1 = "55586662";PdfTextFindCollection collection = pageF.findText(oldPhone, false);PdfTextFindCollection collection1 = pageF.findText(oldPhone1, false);//endregion// 指定替换文本String newText = newPhone;String newText1 = newPhone1;//region 查找并替换文本1for (Object findObj : collection.getFinds()) {PdfTextFind find = (PdfTextFind) findObj;// 获取文本在页面中的范围Rectangle2D.Float rec = (Rectangle2D.Float) find.getBounds();// 写入空白范围遮住原来的文本pageF.getCanvas().drawRectangle(PdfBrushes.getWhite(), rec);PdfFont font = new PdfFont(PdfFontFamily.Helvetica, 10f);// 创建字体pageF.getCanvas().drawString(newText, font, PdfBrushes.getBlack(), rec.getX(), rec.getY());}//endregion//region 查找并替换文本2for (Object findObj : collection1.getFinds()) {PdfTextFind find = (PdfTextFind) findObj;// 获取文本在页面中的范围Rectangle2D.Float rec = (Rectangle2D.Float) find.getBounds();// 写入空白范围遮住原来的文本pageF.getCanvas().drawRectangle(PdfBrushes.getWhite(), rec);PdfFont font = new PdfFont(PdfFontFamily.Helvetica, 10f);// 创建字体pageF.getCanvas().drawString(newText1, font, PdfBrushes.getBlack(), rec.getX(), rec.getY());}//endregion}//endregionreturn AjaxResult.success("上传成功");}catch(Exception e){return AjaxResult.error("上传失败,请联系管理员",JSON.toJSON(e.getStackTrace()));}}
相关文章:
java通过pdf-box插件完成对pdf文件中图片/文字的替换
需要引入的Maven依赖: <!-- pdf替换图片 --><dependency><groupId>e-iceblue</groupId><artifactId>spire.pdf.free</artifactId><version>5.1.0</version></dependency> java代码: public AjaxResult replacepd…...
鸿蒙 next 5.0 版本页面跳转传参 接受参数 ,,接受的时候 要先定义接受参数的类型, 代码可以直接CV使用 [教程]
1, 先看效果 2, 先准备好两个页面 index 页面 传递参数 import router from ohos.routerEntry Component struct Index {Statelist: string[] [星期一, 星期二,星期三, 星期四,星期五]StateactiveIndex: number 0build() {Row() {Column({ space: 10 }) {ForEach(this.list,…...
【electron6】浏览器实时播放PCM数据
pcm介绍:PCM(Puls Code Modulation)全称脉码调制录音,PCM录音就是将声音的模拟信号表示成0,1标识的数字信号,未经任何编码和压缩处理,所以可以认为PCM是未经压缩的音频原始格式。PCM格式文件中不包含头部信…...
嵌入式C/C++、FreeRTOS、STM32F407VGT6和TCP:智能家居安防系统的全流程介绍(代码示例)
1. 项目概述 随着物联网技术的快速发展,智能家居安防系统越来越受到人们的重视。本文介绍了一种基于STM32单片机的嵌入式安防中控系统的设计与实现方案。该系统集成了多种传感器,实现了实时监控、报警和远程控制等功能,为用户提供了一个安全、可靠的家居安防解决方案。 1.1 系…...
【Django】django自带后台管理系统样式错乱,uwsgi启动css格式消失的问题
正常情况: ERROR:(css、js文件加载失败) 问题:CSS加载的样式没有了,原因:使用了django自带的admin,在使用 python manage.py runserver启动 的时候,可以加载到admin的文…...
解决npm install(‘proxy‘ config is set properly. See: ‘npm help config‘)失败问题
摘要 重装电脑系统后,使用npm install初始化项目依赖失败了,错误提示:‘proxy’ config is set properly…,具体的错误提示如下图所示: 解决方案 经过报错信息查询解决办法,最终找到了两个比较好的方案&a…...
汽车及零部件研发项目管理系统:一汽东机工选择奥博思 PowerProject 提升研发项目管理效率
在汽车行业中,汽车零部件的研发和生产是一个关键的环节。随着汽车市场的不断扩大和消费者需求的不断增加,汽车零部件项目管理的重要性日益凸显。通过有效的项目管理方法及利用先进的数字项目管理系统,可以大幅提高项目的成功率和顺利度&#…...
Keil开发IDE
Keil开发IDE 简述Keil C51Keil ARMMDK DFP安装 简述 Keil公司是一家业界领先的微控制器(MCU)软件开发工具的独立供应商。Keil公司由两家私人公司联合运营,分别是德国慕尼黑的Keil Elektronik GmbH和美国德克萨斯的Keil Software Inc。Keil公…...
数据结构与算法05堆|建堆|Top-k问题
一、堆 1、堆的介绍 堆(heap)是一种满足特定的条件的完全二叉树,主要可以分为大根堆和小根堆。 大根堆(max heap):任意节点的值大于等于其子节点的值。小根堆(min heap)࿱…...
【精简版】jQuery 中的 Ajax 详解
目录 一、概念 二、jQuery 发送 GET 请求 三、jQuery 发送 POST 请求 四、$.ajax() 方法 1、含义 2、settings 选项 ① type 属性 ② async 属性 ③ headers 属性 ④ contentType 属性 ⑤ processData 属性 ⑥ data 属性 ⑦ timeout 属性 ⑧ beforeSend(jqXHR) 方…...
win10删除鼠标右键选项
鼠标右键菜单时,发现里面的选项特别多,找一下属性,半天找不到。删除一些不常用的选项,让右键菜单变得干净整洁。 1、按下键盘上的“winR”组合按键,调出“运行”对话框,输入“regedit”命令,点击…...
分层评估的艺术:sklearn中的策略与实践
分层评估的艺术:sklearn中的策略与实践 在机器学习中,评估模型性能是一个至关重要的步骤。然而,对于不平衡的数据集,传统的评估方法可能会产生误导性的结果。分层评估(Stratified Evaluation)是一种确保评…...
排序系列 之 快速排序
!!!排序仅针对于数组哦本次排序是按照升序来的哦代码后边有图解哦 介绍 快速排序英文名为Quick Sort 基本思路 快速排序采用的是分治思想,即在一个无序的序列中选取一个任意的基准元素base,利用base将待排序的序列分…...
【银河麒麟服务器操作系统】java进程oom现象分析及处理建议
了解银河麒麟操作系统更多全新产品,请点击访问麒麟软件产品专区:https://product.kylinos.cn 现象描述 某服务器系统升级内核至4.19.90-25.22.v2101版本后仍会触发oom导致java进程被kill。 现象分析 oom现象分析 系统messages日志分析,故…...
Redis的AOF持久化策略(AOF的工作流程、AOF的重写流程,操作演示、注意事项等)
文章目录 缓冲AOF 策略(append only file)AOF 的工作流程AOF 缓冲区策略AOF 的重写机制重写完的AOF文件为什么可以变小?AOF 重写流程 缓冲AOF 策略(append only file) AOF 的核心思路是 “实时备份“,只要我添加了新的数据或者更新了新的数据࿰…...
共享模型之无锁
一、问题提出 1.1 需求描述 有如下的需求,需要保证 account.withdraw() 取款方法的线程安全,代码如下: interface Account {// 获取余额Integer getBalance();// 取款void withdraw(Integer amount);/*** 方法内会启动 1000 个线程…...
下载安装VSCode并添加插件作为仓颉编程入门编辑器
VSCode下载地址:下载 Visual Studio Code - Mac、Linux、Windows 插件下载:GitCode - 全球开发者的开源社区,开源代码托管平台 仓颉社区中下载解压 cangjie.vsix 插件 打开VSCode 按 Ctrl Shift X 弹出下图 按照上图步骤依次点击选中我们下…...
解决:Linux上SVN 1.12版本以上无法直接存储明文密码
问题:今天在Linux机器上安装了SVN,作为客户端使用,首次执行SVN相关操作,输入账号密码信息后,后面再执行SVN相关操作(比如"svn update")还是每次都需要输入密码。 回想以前在首次输入…...
Mongodb多键索引中索引边界的混合
学习mongodb,体会mongodb的每一个使用细节,欢迎阅读威赞的文章。这是威赞发布的第93篇mongodb技术文章,欢迎浏览本专栏威赞发布的其他文章。如果您认为我的文章对您有帮助或者解决您的问题,欢迎在文章下面点个赞,或者关…...
如何利用windows本机调用Linux服务器,以及如何调用jupyter界面远程操控
其实这篇文章没必要存在,教程太多了 参考博客(1 2 3),如侵删 奈何网上的大神总是会漏掉一些凡人遇到的小问题 (1) 建议下载PuTTy for windows,从而建立与远程服务器的SSH连接 需要确认目标服…...
Unity入门:从零开始认识Unity编辑器界面
Unity入门:从零开始认识Unity编辑器界面📚 本章学习目标:深入理解从零开始认识Unity编辑器界面的核心概念与实践方法,掌握关键技术要点,了解实际应用场景与最佳实践。本文属于《Unity工程师成长之路教程》Unity入门篇&…...
pdf2htmlEX色彩管理专家指南:高级色彩校准技术
pdf2htmlEX色彩管理专家指南:高级色彩校准技术 【免费下载链接】pdf2htmlEX Convert PDF to HTML without losing text or format. 项目地址: https://gitcode.com/gh_mirrors/pd/pdf2htmlEX 想要将PDF转换为HTML时保持完美的色彩还原吗?pdf2html…...
智能邮件管家:OpenClaw+GLM-4.7-Flash自动化邮件处理系统
智能邮件管家:OpenClawGLM-4.7-Flash自动化邮件处理系统 1. 为什么需要自动化邮件处理 作为每天需要处理上百封邮件的商务人士,我发现自己陷入了"邮件黑洞"——早上打开邮箱就像打开潘多拉魔盒,重要客户询盘、会议邀请、账单通知…...
认知雷达基础概念与核心理念总结
一、认知雷达的基础概念与核心理念认知雷达是一种全新的雷达技术范式,由 Haykin 和 Guerci 提出,借鉴了与知识相关的心理能力和认知过程的特性,核心理念是通过发射机与接收机之间持续且协调的反馈,让传感器算法根据实际运行环境和…...
5分钟搞定COCO数据集下载与配置:从官网到百度云全攻略(附多线程加速技巧)
COCO数据集极速获取指南:从官方源到镜像站的全链路方案 刚接触计算机视觉的新手们,往往在第一步获取数据集时就遭遇"劝退"——动辄几十GB的COCO数据集,官网下载速度堪比蜗牛爬行,百度云限速让人抓狂。本文将分享一套经过…...
零基础玩转OpenClaw:星图平台百川2-13B镜像+自动化初体验
零基础玩转OpenClaw:星图平台百川2-13B镜像自动化初体验 1. 为什么选择星图平台OpenClaw组合 作为一个长期被本地环境配置折磨的技术爱好者,当我第一次听说星图平台提供预装OpenClaw和百川2-13B模型的"开箱即用"镜像时,内心是充满…...
告别卡顿!Nginx+HTTP-FLV模块搭建低延迟直播系统(含OBS/VLC对比测试)
低延迟直播系统实战:NginxHTTP-FLV协议优化指南 直播行业的爆发式增长对技术架构提出了更高要求。当观众在电商直播间抢购商品时,当在线教育师生进行实时互动时,哪怕1秒的延迟都可能影响用户体验。本文将深入探讨如何基于Nginx和HTTP-FLV模块…...
Jetson Nano上Archiconda3安装避坑指南:从下载到换源完整流程
Jetson Nano开发者必备:Archiconda3高效配置与疑难排错全攻略 在边缘计算和嵌入式AI开发领域,Jetson Nano凭借其出色的能效比和紧凑体积,已成为众多开发者的首选平台。而Archiconda3作为专为ARM架构优化的Python环境管理工具,能够…...
ngx_create_pidfile
1 定义 ngx_create_pidfile 函数 定义在 ./nginx-1.24.0/src/core/ngx_cycle.cngx_int_t ngx_create_pidfile(ngx_str_t *name, ngx_log_t *log) {size_t len;ngx_int_t rc;ngx_uint_t create;ngx_file_t file;u_char pid[NGX_INT64_LEN 2];if (ngx_process >…...
Phi-4-Reasoning-Vision惊艳案例:模糊低质图中关键信息增强与可信度评估
Phi-4-Reasoning-Vision惊艳案例:模糊低质图中关键信息增强与可信度评估 1. 专业级多模态推理工具 Phi-4-Reasoning-Vision是基于微软Phi-4-reasoning-vision-15B多模态大模型开发的高性能推理工具,专为双卡4090环境优化。这个工具严格遵循官方SYSTEM …...
