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

java word转pdf、word中关键字位置插入图片 工具类

java word转pdf、word中关键字位置插入图片 工具类

1.pom依赖

<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.15</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.15</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-scratchpad</artifactId><version>3.15</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>ooxml-schemas</artifactId><version>1.4</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml-schemas</artifactId><version>3.15</version>

2.依赖jar包

		<dependency><groupId>com.aspose</groupId><artifactId>aspose-words</artifactId><version>15.8.0</version><scope>system</scope><systemPath>${pom.basedir}/src/main/webapp/WEB-INF/lib/aspose-words-15.8.0-jdk16.jar</systemPath></dependency>

aspose-words是需要在我们项目中引入的,并且使用时要在resouces目录下导入license.xml文件,否则生成的文件抬头会有红色的license信息。

aspose-words-15.8.0-jdk16.jar 与license.xml

3.工具类

import com.aspose.words.*;
import com.aspose.words.Document;import org.apache.poi.xwpf.usermodel.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.Iterator;
import java.util.List;
import java.util.Map;/*** @author dume* @ClassName WordToPdf* @description: TODO* @date 2024年07月02日* @version: 1.0*/public class WordUtils {private static Logger logger = LoggerFactory.getLogger(WordUtils.class);private static final String BASE_PATH = WordUtils.class.getClassLoader().getResource("").getPath();/***  Word转Pdf* @param sourcePath 原路径* @param targetPath 转出路径* @return*/public static boolean  WordToPdf(String sourcePath,String targetPath){FileOutputStream os = null;try{// 验证License 若不验证则转化出的pdf文档会有水印产生if (!getLicense()) {logger.info("license验证失败");return false;}File file = new File(targetPath);os = new FileOutputStream(file);FontSettings.setFontsFolder(BASE_PATH, true);FontSettings.setDefaultFontName("STFANGSO");Document doc = new Document(sourcePath);doc.save(os, SaveFormat.PDF);os.flush();os.close();}catch (Exception e){e.printStackTrace();logger.error(e.getMessage());return false;}finally {if(os!=null){try{os.close();}catch (Exception e){}}}return true;}/***  word中插入图片方法* @param sourcePath  word路径* @param imgPath     图片路径* @param keyWords    关键字* @return   插入是否成功*/public static boolean InsertImg(String sourcePath,String imgPath,String keyWords){try{// 验证License 若不验证则转化出的pdf文档会有水印产生if (!getLicense()) {logger.info("license验证失败");return false;}Document doc = new Document(sourcePath);DocumentBuilder builder = new DocumentBuilder(doc);//插入图片的方法NodeCollection runs = doc.getChildNodes(NodeType.PARAGRAPH, true);for (int i = 0; i < runs.getCount(); i++) {Node r = runs.get(i);String text = r.getText();//获取键if(text.contains(keyWords)){//锁定到当前段落即实现页面变换builder.moveTo(r);builder.insertImage(imgPath, RelativeHorizontalPosition.PAGE, 205, RelativeVerticalPosition.PAGE, 0, 20, 7, WrapType.INLINE);break;}}doc.save(sourcePath);}catch (Exception e){e.printStackTrace();logger.error(e.getMessage());return false;}return true;}public static boolean getLicense() {boolean result = false;try {FileInputStream is = new FileInputStream (BASE_PATH+"license.xml");License asposeLicense = new License();asposeLicense.setLicense(is);result = true;} catch (Exception e) {e.printStackTrace();}return result;}/**** @Description :替换段落文本* @param document docx解析对象* @param textMap  需要替换的信息集合* @return void*/public static void changeText(XWPFDocument document, Map<String, Object> textMap) {// 获取段落集合Iterator<XWPFParagraph> iterator = document.getParagraphsIterator();XWPFParagraph paragraph = null;while (iterator.hasNext()) {paragraph = iterator.next();// 判断此段落是否需要替换if (checkText(paragraph.getText())) {replaceValue(paragraph, textMap);}}}/**** @Description :替换表格内的文字* @param document* @param data* @return void*/public static void changeTableText(XWPFDocument document, Map<String, Object> data) {// 获取文件的表格Iterator<XWPFTable> tableList = document.getTablesIterator();XWPFTable table;List<XWPFTableRow> rows;List<XWPFTableCell> cells;// 循环所有需要进行替换的文本,进行替换while (tableList.hasNext()) {table = tableList.next();if (checkText(table.getText())) {rows = table.getRows();// 遍历表格,并替换模板for (XWPFTableRow row : rows) {cells = row.getTableCells();for (XWPFTableCell cell : cells) {// 判断单元格是否需要替换if (checkText(cell.getText())) {List<XWPFParagraph> paragraphs = cell.getParagraphs();for (XWPFParagraph paragraph : paragraphs) {replaceValue(paragraph, data);}}}}}}}/**** @Description :检查文本中是否包含指定的字符(此处为“$”)* @param text* @return boolean*/public static boolean checkText(String text) {boolean check = false;if (text.contains("$")) {check = true;}return check;}/**** @Description :替换内容* @param paragraph* @param textMap* @return void*/public static void replaceValue(XWPFParagraph paragraph, Map<String, Object> textMap) {XWPFRun run, nextRun;String runsText;List<XWPFRun> runs = paragraph.getRuns();for (int i = 0; i < runs.size(); i++) {run = runs.get(i);runsText = run.getText(0);if (runsText.contains("${") || (runsText.contains("$") && runs.get(i + 1).getText(0).substring(0, 1).equals("{"))) {while (!runsText.contains("}")) {nextRun = runs.get(i + 1);runsText = runsText + nextRun.getText(0);//删除该节点下的数据paragraph.removeRun(i + 1);}Object value = changeValue(runsText, textMap);//判断key在Map中是否存在String replaceText = runsText.replace("${", "").replace("}", "");if (textMap.containsKey(replaceText)) {run.setText(value.toString(), 0);} else {//如果匹配不到,则不修改run.setText(runsText, 0);}}}}/**** @Description :匹配参数* @param value* @param textMap* @return java.lang.Object*/public static Object changeValue(String value, Map<String, Object> textMap) {Object valu = "";for (Map.Entry<String, Object> textSet : textMap.entrySet()) {// 匹配模板与替换值 格式${key}String key = textSet.getKey();if (value.contains(key)) {valu = textSet.getValue();}}return valu;}}

相关文章:

java word转pdf、word中关键字位置插入图片 工具类

java word转pdf、word中关键字位置插入图片 工具类 1.pom依赖 <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.15</version></dependency><dependency><groupId>org.apa…...

jail内部ubuntu apt升级失败问题解决

在FreeBSD jail 里安装启动Ubuntu jammy系统&#xff0c;每次装好执行jexec ubjammy sh进入Ubuntu系统后&#xff0c;执行apt update报错。 这个问题困惑了好久&#xff0c;突然有一天仔细去看报错信息&#xff0c;查看了(man 5 apt.conf) &#xff0c;才搞定问题。简单来说就是…...

迎接AI新时代:GPT-5的技术飞跃与未来展望

引言 随着人工智能技术的迅猛发展&#xff0c;大语言模型在过去几年取得了显著进步。OpenAI最新的声明表明&#xff0c;GPT-5将在一年半后发布&#xff0c;并将带来从高中生智力水平到博士生智力水平的飞跃。这一突破引起了科技界和公众的广泛关注。本文将从技术突破预测、智能…...

Snap Video:用于文本到视频合成的扩展时空变换器

图像生成模型的质量和多功能性的显著提升&#xff0c;研究界开始将其应用于视频生成领域。但是视频内容高度冗余&#xff0c;直接将图像模型技术应用于视频生成可能会降低运动的保真度和视觉质量&#xff0c;并影响可扩展性。来自 Snap 的研究团队及其合作者提出了 "Snap …...

实验8 视图创建与管理实验

一、实验目的 理解视图的概念。掌握创建、更改、删除视图的方法。掌握使用视图来访问数据的方法。 二、实验内容 在job数据库中&#xff0c;有聘任人员信息表&#xff1a;Work_lnfo表&#xff0c;其表结构如下表所示&#xff1a; 其中表中练习数据如下&#xff1a; 1.‘张明…...

C++ 开源库

1 PDFium PDFium 是一个开源的 PDF 渲染和处理库&#xff0c;最初由 Foxit Software 开发&#xff0c;并于2014年捐赠给了 Chromium 项目。PDFium 旨在为各种应用程序提供高效、灵活的 PDF 渲染和操作功能。 2 代码地址 https://github.com/chromium/pdfium 主要特性 渲染…...

LabVIEW滤波器性能研究

为了研究滤波器的滤波性能&#xff0c;采用LabVIEW设计了一套滤波器性能研究系统。该系统通过LabVIEW中的波形生成函数&#xff0c;输出幅值及频率可调的正弦波和白噪声两种信号&#xff0c;并将白噪声与正弦波叠加&#xff0c;再通过滤波器输出纯净的正弦波信号。系统通过FFT&…...

『C++成长记』vector模拟实现

&#x1f525;博客主页&#xff1a;小王又困了 &#x1f4da;系列专栏&#xff1a;C &#x1f31f;人之为学&#xff0c;不日近则日退 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 目录 一、存储结构 二、默认成员函数 &#x1f4d2;2.1构造函数 &#x1f4d2;2.2拷贝…...

【Mac】Charles for Mac(HTTP协议抓包工具)及同类型软件介绍

软件介绍 Charles for Mac 是一款功能强大的网络调试工具&#xff0c;主要用于HTTP代理/HTTP监视器。以下是它的一些主要特点和功能&#xff1a; 1.HTTP代理&#xff1a;Charles 可以作为HTTP代理服务器&#xff0c;允许你查看客户端和服务器之间的所有HTTP和SSL/TLS通信。 …...

LVS集群及其它的NAT模式

1.lvs集群作用&#xff1a;是linux的内核层面实现负载均衡的软件&#xff1b;将多个后端服务器组成一个高可用、高性能的服务器的集群&#xff0c;通过负载均衡的算法将客户端的请求分发到后端的服务器上&#xff0c;通过这种方式实现高可用和负载均衡。 2.集群和分布式&#…...

【RNN练习】天气预测

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 一、环境及数据准备 1. 我的环境 语言环境&#xff1a;Python3.11.9编译器&#xff1a;Jupyter notebook深度学习框架&#xff1a;TensorFlow 2.15.0 2. 导…...

prompt第四讲-fewshot

文章目录 前提回顾FewShotPromptTemplateforamt格式化 前提回顾 前面已经实现了一个翻译助手了[prompt第三讲-PromptTemplate]&#xff0c;prompt模板设计中&#xff0c;有说明、案例、和实际的问题 # -*- coding: utf-8 -*- """ Time &#xff1a; 2024/7/8 …...

StarRocks分布式元数据源码解析

1. 支持元数据表 https://github.com/StarRocks/starrocks/pull/44276/files 核心类&#xff1a;LogicalIcebergMetadataTable&#xff0c;Iceberg元数据表&#xff0c;将元数据的各个字段做成表的列&#xff0c;后期可以通过sql操作从元数据获取字段&#xff0c;这个表的组成…...

阅读笔记——《Fuzz4All: Universal Fuzzing with Large Language Models》

【参考文献】Xia C S, Paltenghi M, Le Tian J, et al. Fuzz4all: Universal fuzzing with large language models[C]//Proceedings of the IEEE/ACM 46th International Conference on Software Engineering. 2024: 1-13.【注】本文仅为作者个人学习笔记&#xff0c;如有冒犯&…...

【C++】使用gtest做单元测试框架写单元测试

本文主要介绍在将gtest框架引入到项目里过程中遇到的问题。 我的需求如下: 用CMake构建项目。我要写一些测试程序验证某些功能,但是不想每一个测试都新建一个main函数。 因为新建一个main函数就要在CMakeList.txt里增加一个project,非常不方便。 于是我搜了下,C++里有没…...

Java类与对象

类是对现实世界中实体的抽象&#xff0c;是对一类事物的描述。 类的属性位置在类的内部、方法的外部。 类的属性描述一个类的一些可描述的特性&#xff0c;比如人的姓名、年龄、性别等。 [public] [abstract|final] class 类名 [extends父类] [implements接口列表] { 属性声…...

xlwings 链接到 指定sheet 从别的 excel 复制 sheet 到指定 sheet

重点 可以参考 宏录制 cell sheet.range(G4)cell.api.Hyperlinks.Add(Anchorcell.api, Address"", SubAddress"001-000-02301!A1")def deal_excel(self):with xw.App(visibleTrue) as app:wb app.books.open(self.summary_path, update_linksFalse)sheet…...

风光摄影:相机设置和镜头选择

写在前面 博文内容为《斯科特凯尔比的风光摄影手册》读书笔记整理涉及在风景拍摄中一些相机设置&#xff0c;镜头选择的建议对小白来讲很实用&#xff0c;避免拍摄一些过曝或者过暗的风景照片理解不足小伙伴帮忙指正 &#x1f603;,生活加油 99%的焦虑都来自于虚度时间和没有好…...

python制作甘特图的基本知识(附Demo)

目录 前言1. matplotlib2. plotly 前言 甘特图是一种常见的项目管理工具&#xff0c;用于表示项目任务的时间进度 直观地看到项目的各个任务在时间上的分布和进度 常用的绘制甘特图的工具是 matplotlib 和 plotly 主要以Demo的形式展示 1. matplotlib 功能强大的绘图库&a…...

javascript设计模式总结

参考 通过设计模式可以增加代码的可重用性、可扩展性、可维护性 设计模式五大设计原则 单一职责&#xff1a;一个程序只需要做好一件事&#xff0c;如果结构过于复杂就拆分开&#xff0c;保证每个部分独立 开放封闭原则&#xff1a;对扩展开放&#xff0c;对修改封闭。增加需…...

React Native 开发环境搭建(全平台详解)

React Native 开发环境搭建&#xff08;全平台详解&#xff09; 在开始使用 React Native 开发移动应用之前&#xff0c;正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南&#xff0c;涵盖 macOS 和 Windows 平台的配置步骤&#xff0c;如何在 Android 和 iOS…...

python/java环境配置

环境变量放一起 python&#xff1a; 1.首先下载Python Python下载地址&#xff1a;Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个&#xff0c;然后自定义&#xff0c;全选 可以把前4个选上 3.环境配置 1&#xff09;搜高级系统设置 2…...

镜像里切换为普通用户

如果你登录远程虚拟机默认就是 root 用户&#xff0c;但你不希望用 root 权限运行 ns-3&#xff08;这是对的&#xff0c;ns3 工具会拒绝 root&#xff09;&#xff0c;你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案&#xff1a;创建非 roo…...

MySQL 8.0 OCP 英文题库解析(十三)

Oracle 为庆祝 MySQL 30 周年&#xff0c;截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始&#xff0c;将英文题库免费公布出来&#xff0c;并进行解析&#xff0c;帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...

高防服务器能够抵御哪些网络攻击呢?

高防服务器作为一种有着高度防御能力的服务器&#xff0c;可以帮助网站应对分布式拒绝服务攻击&#xff0c;有效识别和清理一些恶意的网络流量&#xff0c;为用户提供安全且稳定的网络环境&#xff0c;那么&#xff0c;高防服务器一般都可以抵御哪些网络攻击呢&#xff1f;下面…...

OPENCV形态学基础之二腐蚀

一.腐蚀的原理 (图1) 数学表达式&#xff1a;dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一&#xff0c;腐蚀跟膨胀属于反向操作&#xff0c;膨胀是把图像图像变大&#xff0c;而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...

20个超级好用的 CSS 动画库

分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码&#xff0c;而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库&#xff0c;可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画&#xff0c;可以包含在你的网页或应用项目中。 3.An…...

Git常用命令完全指南:从入门到精通

Git常用命令完全指南&#xff1a;从入门到精通 一、基础配置命令 1. 用户信息配置 # 设置全局用户名 git config --global user.name "你的名字"# 设置全局邮箱 git config --global user.email "你的邮箱example.com"# 查看所有配置 git config --list…...

淘宝扭蛋机小程序系统开发:打造互动性强的购物平台

淘宝扭蛋机小程序系统的开发&#xff0c;旨在打造一个互动性强的购物平台&#xff0c;让用户在购物的同时&#xff0c;能够享受到更多的乐趣和惊喜。 淘宝扭蛋机小程序系统拥有丰富的互动功能。用户可以通过虚拟摇杆操作扭蛋机&#xff0c;实现旋转、抽拉等动作&#xff0c;增…...

毫米波雷达基础理论(3D+4D)

3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文&#xff1a; 一文入门汽车毫米波雷达基本原理 &#xff1a;https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...