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

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介绍&#xff1a;PCM&#xff08;Puls Code Modulation&#xff09;全称脉码调制录音&#xff0c;PCM录音就是将声音的模拟信号表示成0,1标识的数字信号&#xff0c;未经任何编码和压缩处理&#xff0c;所以可以认为PCM是未经压缩的音频原始格式。PCM格式文件中不包含头部信…...

嵌入式C/C++、FreeRTOS、STM32F407VGT6和TCP:智能家居安防系统的全流程介绍(代码示例)

1. 项目概述 随着物联网技术的快速发展,智能家居安防系统越来越受到人们的重视。本文介绍了一种基于STM32单片机的嵌入式安防中控系统的设计与实现方案。该系统集成了多种传感器,实现了实时监控、报警和远程控制等功能,为用户提供了一个安全、可靠的家居安防解决方案。 1.1 系…...

【Django】django自带后台管理系统样式错乱,uwsgi启动css格式消失的问题

正常情况&#xff1a; ERROR&#xff1a;&#xff08;css、js文件加载失败&#xff09; 问题&#xff1a;CSS加载的样式没有了&#xff0c;原因&#xff1a;使用了django自带的admin&#xff0c;在使用 python manage.py runserver启动 的时候&#xff0c;可以加载到admin的文…...

解决npm install(‘proxy‘ config is set properly. See: ‘npm help config‘)失败问题

摘要 重装电脑系统后&#xff0c;使用npm install初始化项目依赖失败了&#xff0c;错误提示&#xff1a;‘proxy’ config is set properly…&#xff0c;具体的错误提示如下图所示&#xff1a; 解决方案 经过报错信息查询解决办法&#xff0c;最终找到了两个比较好的方案&a…...

汽车及零部件研发项目管理系统:一汽东机工选择奥博思 PowerProject 提升研发项目管理效率

在汽车行业中&#xff0c;汽车零部件的研发和生产是一个关键的环节。随着汽车市场的不断扩大和消费者需求的不断增加&#xff0c;汽车零部件项目管理的重要性日益凸显。通过有效的项目管理方法及利用先进的数字项目管理系统&#xff0c;可以大幅提高项目的成功率和顺利度&#…...

Keil开发IDE

Keil开发IDE 简述Keil C51Keil ARMMDK DFP安装 简述 Keil公司是一家业界领先的微控制器&#xff08;MCU&#xff09;软件开发工具的独立供应商。Keil公司由两家私人公司联合运营&#xff0c;分别是德国慕尼黑的Keil Elektronik GmbH和美国德克萨斯的Keil Software Inc。Keil公…...

数据结构与算法05堆|建堆|Top-k问题

一、堆 1、堆的介绍 堆&#xff08;heap&#xff09;是一种满足特定的条件的完全二叉树&#xff0c;主要可以分为大根堆和小根堆。 大根堆&#xff08;max heap&#xff09;&#xff1a;任意节点的值大于等于其子节点的值。小根堆&#xff08;min heap&#xff09;&#xff1…...

【精简版】jQuery 中的 Ajax 详解

目录 一、概念 二、jQuery 发送 GET 请求 三、jQuery 发送 POST 请求 四、$.ajax() 方法 1、含义 2、settings 选项 ① type 属性 ② async 属性 ③ headers 属性 ④ contentType 属性 ⑤ processData 属性 ⑥ data 属性 ⑦ timeout 属性 ⑧ beforeSend(jqXHR) 方…...

win10删除鼠标右键选项

鼠标右键菜单时&#xff0c;发现里面的选项特别多&#xff0c;找一下属性&#xff0c;半天找不到。删除一些不常用的选项&#xff0c;让右键菜单变得干净整洁。 1、按下键盘上的“winR”组合按键&#xff0c;调出“运行”对话框&#xff0c;输入“regedit”命令&#xff0c;点击…...

分层评估的艺术:sklearn中的策略与实践

分层评估的艺术&#xff1a;sklearn中的策略与实践 在机器学习中&#xff0c;评估模型性能是一个至关重要的步骤。然而&#xff0c;对于不平衡的数据集&#xff0c;传统的评估方法可能会产生误导性的结果。分层评估&#xff08;Stratified Evaluation&#xff09;是一种确保评…...

排序系列 之 快速排序

&#xff01;&#xff01;&#xff01;排序仅针对于数组哦本次排序是按照升序来的哦代码后边有图解哦 介绍 快速排序英文名为Quick Sort 基本思路 快速排序采用的是分治思想&#xff0c;即在一个无序的序列中选取一个任意的基准元素base&#xff0c;利用base将待排序的序列分…...

【银河麒麟服务器操作系统】java进程oom现象分析及处理建议

了解银河麒麟操作系统更多全新产品&#xff0c;请点击访问麒麟软件产品专区&#xff1a;https://product.kylinos.cn 现象描述 某服务器系统升级内核至4.19.90-25.22.v2101版本后仍会触发oom导致java进程被kill。 现象分析 oom现象分析 系统messages日志分析&#xff0c;故…...

Redis的AOF持久化策略(AOF的工作流程、AOF的重写流程,操作演示、注意事项等)

文章目录 缓冲AOF 策略(append only file)AOF 的工作流程AOF 缓冲区策略AOF 的重写机制重写完的AOF文件为什么可以变小&#xff1f;AOF 重写流程 缓冲AOF 策略(append only file) AOF 的核心思路是 “实时备份“&#xff0c;只要我添加了新的数据或者更新了新的数据&#xff0…...

共享模型之无锁

一、问题提出 1.1 需求描述 有如下的需求&#xff0c;需要保证 account.withdraw() 取款方法的线程安全&#xff0c;代码如下&#xff1a; interface Account {// 获取余额Integer getBalance();// 取款void withdraw(Integer amount);/*** 方法内会启动 1000 个线程&#xf…...

下载安装VSCode并添加插件作为仓颉编程入门编辑器

VSCode下载地址&#xff1a;下载 Visual Studio Code - Mac、Linux、Windows 插件下载&#xff1a;GitCode - 全球开发者的开源社区,开源代码托管平台 仓颉社区中下载解压 cangjie.vsix 插件 打开VSCode 按 Ctrl Shift X 弹出下图 按照上图步骤依次点击选中我们下…...

解决:Linux上SVN 1.12版本以上无法直接存储明文密码

问题&#xff1a;今天在Linux机器上安装了SVN&#xff0c;作为客户端使用&#xff0c;首次执行SVN相关操作&#xff0c;输入账号密码信息后&#xff0c;后面再执行SVN相关操作&#xff08;比如"svn update"&#xff09;还是每次都需要输入密码。 回想以前在首次输入…...

Mongodb多键索引中索引边界的混合

学习mongodb&#xff0c;体会mongodb的每一个使用细节&#xff0c;欢迎阅读威赞的文章。这是威赞发布的第93篇mongodb技术文章&#xff0c;欢迎浏览本专栏威赞发布的其他文章。如果您认为我的文章对您有帮助或者解决您的问题&#xff0c;欢迎在文章下面点个赞&#xff0c;或者关…...

如何利用windows本机调用Linux服务器,以及如何调用jupyter界面远程操控

其实这篇文章没必要存在&#xff0c;教程太多了 参考博客&#xff08;1 2 3&#xff09;&#xff0c;如侵删 奈何网上的大神总是会漏掉一些凡人遇到的小问题 &#xff08;1&#xff09; 建议下载PuTTy for windows&#xff0c;从而建立与远程服务器的SSH连接 需要确认目标服…...

横空出世!IDEA最强MyBatis插件来了,功能很全!

最近更新了IDEA 2026.1这个版本&#xff0c;发现之前使用的MyBaitsX这个插件没有兼容&#xff0c;启动就报错&#xff01;于是就改用了MyBatisCodeHelper-Pro这个插件&#xff0c;体验了一把&#xff0c;提示很全&#xff0c;还有方便的MyBaits日志转SQL面板&#xff0c;这里分…...

终极iOS设备降级指南:使用Legacy-iOS-Kit让旧设备重获新生 [特殊字符]

终极iOS设备降级指南&#xff1a;使用Legacy-iOS-Kit让旧设备重获新生 &#x1f680; 【免费下载链接】Legacy-iOS-Kit An all-in-one tool to restore/downgrade, save SHSH blobs, jailbreak legacy iOS devices, and more 项目地址: https://gitcode.com/gh_mirrors/le/Le…...

阴阳师百鬼夜行AI自动化:3分钟配置实现全智能碎片收集

阴阳师百鬼夜行AI自动化&#xff1a;3分钟配置实现全智能碎片收集 【免费下载链接】OnmyojiAutoScript Onmyoji Auto Script | 阴阳师脚本 项目地址: https://gitcode.com/gh_mirrors/on/OnmyojiAutoScript 还在为手动刷百鬼夜行而烦恼吗&#xff1f;每天重复点击、熬夜…...

AI产品技能库实战:将专家经验注入Claude Code,打造你的虚拟产品专家

1. 项目概述&#xff1a;当AI助手遇上产品经理的“武林秘籍”如果你是一名产品经理、创业者&#xff0c;或者任何需要与产品打交道的人&#xff0c;最近可能已经感受到了AI助手带来的效率革命。无论是用Claude、ChatGPT还是其他工具来辅助写文档、分析数据&#xff0c;它们都像…...

Bootstrap 标签页

Bootstrap 标签页 Bootstrap 标签页&#xff08;Tab&#xff09;是 Bootstrap 框架中的一种交互组件&#xff0c;允许用户在多个页面元素或内容区域之间进行切换。本文将详细介绍 Bootstrap 标签页的使用方法、特点以及如何将其应用于实际项目中。 一、Bootstrap 标签页的使用方…...

免费素材资源终极指南:发现300+个高质量免费图片视频网站 [特殊字符]

免费素材资源终极指南&#xff1a;发现300个高质量免费图片视频网站 &#x1f680; 【免费下载链接】awesome-stock-resources :city_sunrise: A collection of links for free stock photography, video and Illustration websites 项目地址: https://gitcode.com/gh_mirror…...

Narrative-craft:工程化叙事框架的设计、实现与集成指南

1. 项目概述与核心价值最近在GitHub上看到一个挺有意思的项目&#xff0c;叫“Narrative-craft”&#xff0c;作者是chengjialu8888。光看名字&#xff0c;你可能会觉得这又是一个讲“叙事”或者“故事创作”的抽象工具。但点进去仔细研究后&#xff0c;我发现它远不止于此。这…...

基于Next.js 15与React 19构建现代化个人作品集:技术选型与工程实践

1. 项目概述&#xff1a;为什么选择 Next.js 15 构建现代个人作品集 作为一名在前后端领域摸爬滚打了十多年的开发者&#xff0c;我见过也亲手搭建过无数种个人作品集网站。从早期的纯静态 HTML/CSS&#xff0c;到 jQuery 时代&#xff0c;再到 React/Vue 等框架的兴起&#x…...

DeepSeek Clean Code终极阈值(v2.3.1正式版):超出3个指标即触发强制重构——你达标了吗?

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;DeepSeek Clean Code终极阈值的演进与哲学内核 DeepSeek Clean Code 的“终极阈值”并非静态指标&#xff0c;而是代码可维护性、语义清晰度与执行确定性三者动态收敛的临界点。它源于对 LLM 推理链中 …...

网盘直链解析工具完整指南:技术实现与高效下载策略

网盘直链解析工具完整指南&#xff1a;技术实现与高效下载策略 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 &#xff0c;支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云盘…...