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

java中,通过替换word模板中的关键字后输出一个新文档

一、要用到的jar包

我已上传了相关的jar包,需要的可以通过以下链接直接下载:

https://download.csdn.net/download/qq_27387133/88558034

具体jar包截图:

二、实现的代码

注意:文件要用docx格式!!!

word变量替换的方法(replaceWord):

/**    * @Description: TODO word替换变量的方法* @author: zgx * @date:   2023年11月20日 下午3:03:42* @param srcPath 模板路径* @param destPath 输出路径* @param map 替换的变量值集合* @return      * @return: boolean       */public static boolean replaceWord(String srcPath,String destPath, HashMap<String, Object> map) {try {// 替换的的关键字存放到Set集合中Set<String> set = map.keySet();// 读取模板文档XWPFDocument document = new XWPFDocument(new FileInputStream(srcPath));/*** 替换段落中的指定文字*/// 读取文档中的段落,回车符为一个段落。// 同一个段落里面会被“:”等符号隔开为多个对象Iterator<XWPFParagraph> itPara = document.getParagraphsIterator();while (itPara.hasNext()) {// 获取文档中当前的段落文字信息XWPFParagraph paragraph = (XWPFParagraph) itPara.next();List<XWPFRun> run = paragraph.getRuns();// 遍历段落文字对象for (int i = 0; i < run.size(); i++) {// 获取段落对象if (run.get(i) == null) {	//段落为空跳过continue;}String sectionItem = run.get(i).getText(run.get(i).getTextPosition());	//段落内容// 遍历自定义表单关键字,替换Word文档中的内容Iterator<String> iterator = set.iterator();while (iterator.hasNext()) {// 当前关键字String key = iterator.next();// 替换内容sectionItem = sectionItem.replace(key, String.valueOf(map.get(key)));}run.get(i).setText(sectionItem, 0);}}/*** 替换表格中的指定文字*///获取文档中所有的表格,每个表格是一个元素Iterator<XWPFTable> itTable = document.getTablesIterator();while (itTable.hasNext()) {XWPFTable table = (XWPFTable) itTable.next();   //获取表格内容int count = table.getNumberOfRows();    //表格的行数//遍历表格行的对象for (int i = 0; i < count; i++) {XWPFTableRow row = table.getRow(i);    //表格每行的内容List<XWPFTableCell> cells = row.getTableCells();   //每个单元格的内容//遍历表格的每行单元格对象for (int j = 0; j < cells.size(); j++) {XWPFTableCell cell = cells.get(j);	//获取每个单元格的内容List<XWPFParagraph> paragraphs = cell.getParagraphs();      //获取单元格里所有的段落for (XWPFParagraph paragraph : paragraphs) {//获取段落的内容List<XWPFRun> run = paragraph.getRuns();// 遍历段落文字对象for (int o = 0; o < run.size(); o++) {// 获取段落对象if (run.get(o) == null || run.get(o).equals("")) {continue;}String sectionItem = run.get(o).getText(run.get(o).getTextPosition());	//获取段落内容if (sectionItem == null || sectionItem.equals("")) {	//段落为空跳过continue;}//遍历自定义表单关键字,替换Word文档中表格单元格的内容for (String key : map.keySet()) {// 替换内容sectionItem = sectionItem.replace(key, String.valueOf(map.get(key)));run.get(o).setText(sectionItem, 0);}}}}}}
//            设置word不可编辑
//            document.enforceFillingFormsProtection("123", HashAlgorithm.sha512);FileOutputStream outStream = null;outStream = new FileOutputStream(destPath);document.write(outStream);outStream.close();} catch (Exception e) {e.printStackTrace();}return true;}

具体地方调用replaceWord方法示例:

public void doReplaceWord(){String newPath = 路径+"你的新文件.docx";String oldPath = 路径+"你的模板文件.docx";HashMap<String, Object> resultMap = new HashMap<>();//简历名称resultMap.put("${resumeName}","我的简历");//创建时间resultMap.put("${createTime}","2023-10-10");//最后修改时间resultMap.put("${updateTime}","2023-11-10");				replaceWord(oldPath, newPath, resultMap);
}

相关文章:

java中,通过替换word模板中的关键字后输出一个新文档

一、要用到的jar包 我已上传了相关的jar包&#xff0c;需要的可以通过以下链接直接下载&#xff1a; https://download.csdn.net/download/qq_27387133/88558034 具体jar包截图&#xff1a; 二、实现的代码 注意&#xff1a;文件要用docx格式!!! word变量替换的方法&#…...

MySQL数据库约束你真的懂吗?

✏️✏️✏️今天给各位带来的是关于数据库约束方面的知识 清风的CSDN博客 &#x1f61b;&#x1f61b;&#x1f61b;希望我的文章能对你有所帮助&#xff0c;有不足的地方还请各位看官多多指教&#xff0c;大家一起学习交流&#xff01; 动动你们发财的小手&#xff0c;点点关…...

YOCTO 下载repo工具失败解决办法

curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o repocp repo ~/binchmod ax ~/bin/repo如果使用时报错&#xff0c; 切换ubuntu 到 python3 版本。gedit repo 修改repo默认链接地址&#xff1a;REPO_URL "https://gerrit.googlesource.com/git-repo"…...

github连接失败Host key verification failed.解决方案

问题描述 之前一直用的gitee协同协作&#xff0c;然后再最近一次云计算项目中团队使用的是github进行协作&#xff0c;但是按照常规步骤再GitHub上配置了ssh密钥后&#xff0c;却依然显示连接失败&#xff0c;无法推送和拉取代码&#xff0c;克隆仓库也是报错拒绝。具体报错信…...

【TIDB】TiDB认证考试PTCA 练习题 题库

目录 题目 答案 解析 题目 1.下列功能是由 TiKV 或 TiFlash 实现的为&#xff1f;&#xff08; 选 2 项 &#xff09; A. 根据集群中 Region 的信息&#xff0c;发出调度指令 B. 对于 OLAP 和 OLTP 进行业务隔离 C. 将关系型数据转化为 KV 存储进行持久化 D. 将 KV 存储…...

PPP/INS紧组合算法

前言&#xff1a;在学习紧组合之前学会GNSS/INS松组合是很有必要的&#xff0c;i2NAV团队开源的KF_GINS项目可以作为GNSS/INS松组合学习模板&#xff0c;本文章主要对武汉大学i2NAV发布的PPP/INS紧组合学习资源进行算法层面的总结&#xff0c;链接&#xff1a; 武汉大学多源智…...

c++ 演讲比赛流程管理系统 / from.黑马

...

【shell】 1、bash语法超详细介绍

文章目录 修改前缀路径dirname set常用函数参数变量local 返回值正则打印第 n 行获取行号核对数据库各表数量jq查询检查日志 sshpassexpect数组xargs bash manual 修改前缀 参考 export PS1"bash> "路径 dirname strip last component from file name dir$(…...

华清远见嵌入式学习——网络编程——作业3

目录 作业要求&#xff1a;基于UDP的TFTP文件传输 代码 下载功能效果图​编辑 上传功能效果图 思维导图 模拟面试题和答案&#xff08;定期更新&#xff09; 作业要求&#xff1a;基于UDP的TFTP文件传输 完成文件的上传和下载功能 代码 #include<myhead.h>//实现…...

前端学习--React(3)

一、Redux 集中状态管理工具&#xff0c;不需要react即可使用&#xff0c;每个store的数据都是独立于组件之外的 vue小链接&#xff1a;vuex/pinia 基本使用 Redux将数据修改流程分成三个概念&#xff0c;state、action和reducer state - 一个对象 存放我们管理的数据状态 a…...

rotation matrix reflection matrix

文章目录 1. rotation matrix1.1 结论 2. reflection matrix2.1 结论 1. rotation matrix 图像逆时针旋转 θ \theta θ的矩阵 Q r o t a t e [ cos ⁡ θ − sin ⁡ θ sin ⁡ θ cos ⁡ θ ] (1) Q_{rotate}\begin{bmatrix}\cos\theta&-\sin\theta\\\sin\theta&\c…...

Python基础教程: sorted 函数

嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 sorted 可以对所有可迭代的对象进行排序操作&#xff0c; sorted 方法返回的是一个新的 list&#xff0c;而不是在原来的基础上进行的操作。 从新排序列表。 &#x1f447; &#x1f447; &#x1f447; 更多精彩机密、教程…...

Vue 重写push和replace方法,解决:Avoided redundant navigation to current location

当我们使用编程式路由导航跳转路径时&#xff0c;如果我们两次携带同样的参数进行跳转&#xff0c;会进行页面报错&#xff1a; 那产生这个问题的原因是什么呢&#xff1f; 我们接收并输出调用push方法返回的结果&#xff1a; 会发现这是一个Promise对象 我们都知道&#xff…...

43、vue导出pdf文件,并解决滚动条外内容无法获取的问题

使用插件html2canvas和jspdf插件 下载完两个插件后引入所需要的页面 import html2canvas from "html2canvas" import jsPDF from "jspdf"1、在导出之前将元素的高度或者宽度设置为滚动高度或者宽度&#xff0c;如&#xff1a; el.style.height el.scro…...

牛客 最小公配数 golang版实现

题目请参考: HJ108 求最小公倍数 题解: 在大的数的倍数里面去找最小的能整除另外一个数的数&#xff0c;就是最小公倍数&#xff0c;按照大的来找&#xff0c;循环次数能够降到很少&#xff0c;提升效率 golang实现: package mainimport ("fmt" )func main() {a : …...

用 HLS 实现 UART

用 HLS 实现 UART 介绍 UART 是一种旧的串行通信机制&#xff0c;但仍在很多平台中使用。它在 HDL 语言中的实现并不棘手&#xff0c;可以被视为本科生的作业。在这里&#xff0c;我将通过这个例子来展示在 HLS 中实现它是多么容易和有趣。 因此&#xff0c;从概念上讲&#xf…...

华清远见嵌入式学习——网络编程——作业4

作业要求&#xff1a;①使用IO多路复用中的select函数实现TCP并发服务器客户端 ②使用IO多路复用中的poll函数实现TCP并发服务器的服务器端 一、 代码 #include <myhead.h>#define SERPORT 8888 //服务器端口号 #define SERIP "192.168.114.113"…...

【OpenCV实现图像:制作酷炫的动画效果】

文章目录 概要生成背景图添加点动画添加文本显示小结 概要 首先&#xff0c;通过导入必要的库&#xff0c;包括NumPy用于数学运算和Matplotlib库用于数据可视化。随后&#xff0c;创建图形和轴&#xff0c;初始化点的位置&#xff0c;以及编写初始化函数和更新函数。 初始化函…...

CSS鼠标属性篇

属性名&#xff1a;cursor 功能&#xff1a;设置鼠标光标的样式 属性值&#xff1a; pointer&#xff1a;小手move&#xff1a;移动图标text&#xff1a;文字选择器crosshair&#xff1a;十字架wait&#xff1a;等待help&#xff1a;帮助 eg.html{ cursor: wait;}(此处使用css改…...

交直流一体化电源系统测试步骤详解

交直流一体化电源拥有高度适应性&#xff0c;可以用于不同的电力需求领域。但是为了确保其质量和性能&#xff0c;需要对交直流一体化电源进行各项测试以保证正常工作。本文纳米软件将介绍交直流一体化电源的测试方法&#xff0c;以及如何用交直流一体化电源测试系统进行测试。…...

2026年直流降压模块哪些品牌口碑较好?

在2026年的直流降压模块市场中&#xff0c;品牌众多&#xff0c;竞争激烈。但有几个品牌凭借出色的性能、可靠的质量和优质的服务&#xff0c;赢得了广大用户的信赖和好评。今天&#xff0c;我们就来聊聊这些口碑较好的品牌。一、口碑品牌大盘点 1. xx邮**科&#xff1a;工程师…...

Keil5编译报错找不到ARM编译器?手把手教你安装AC5.06(附路径配置避坑指南)

Keil5编译报错找不到ARM编译器&#xff1f;手把手教你安装AC5.06&#xff08;附路径配置避坑指南&#xff09; 当你满怀期待地打开一个STM32项目准备大展身手时&#xff0c;Keil5突然弹出一个令人窒息的报错&#xff1a;"Target uses ARM-Compiler Default Compiler Versi…...

数据结构算法实践:用Nanbeige 4.1-3B生成代码与可视化讲解

数据结构算法实践&#xff1a;用Nanbeige 4.1-3B生成代码与可视化讲解 最近在准备计算机科学的教学材料时&#xff0c;我一直在想&#xff0c;有没有一种更高效、更直观的方法来讲解那些经典的数据结构和算法。传统的教学方式&#xff0c;要么是老师写板书&#xff0c;要么是放…...

《Docker 部署 Calibre-Web:搭建电子书图书馆》

《Docker 部署 Calibre-Web&#xff1a;搭建电子书图书馆》 核心&#xff1a;挂载书籍目录&#xff0c;支持在线预览和下载 一、Calibre-Web 是什么&#xff1f; Calibre 是知名的电子书管理软件&#xff0c;而 Calibre-Web 是其 Web 版&#xff0c;支持浏览器管理、在线阅读、…...

Yageo国巨Mlcc电容原厂一级代理分销经销商

序号 品牌 元件类别 型号 描述 包装 数量 YAGEO 电容 CC0805KKX7R9BB105 0805 1UF 50V 10% X7R 3000 12,000...

高效实现PotPlayer实时字幕翻译:百度翻译插件完整配置指南

高效实现PotPlayer实时字幕翻译&#xff1a;百度翻译插件完整配置指南 【免费下载链接】PotPlayer_Subtitle_Translate_Baidu PotPlayer 字幕在线翻译插件 - 百度平台 项目地址: https://gitcode.com/gh_mirrors/po/PotPlayer_Subtitle_Translate_Baidu 还在为观看外语视…...

LFM2-2.6B-GGUF在运维自动化中的应用:智能解析日志并执行故障修复脚本

LFM2-2.6B-GGUF在运维自动化中的应用&#xff1a;智能解析日志并执行故障修复脚本 1. 运维自动化的新机遇 凌晨三点&#xff0c;服务器突然告警。运维工程师小王从睡梦中惊醒&#xff0c;手忙脚乱地登录系统查看日志&#xff0c;发现是数据库连接池耗尽导致的服务不可用。这种…...

DICOM多序列融合渲染崩溃频发?C++引擎内存池碎片率超68%的隐蔽诱因及工业级RAII重构模板(含FDA Class II认证代码片段)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;DICOM多序列融合渲染崩溃频发的临床影响与系统级定位 临床决策链路的中断风险 当放射科医师在阅片工作站中执行T1/T2/FLAIR/DWI多序列DICOM融合渲染时&#xff0c;若渲染引擎异常退出&#xff0c;将直…...

别再纠结选哪个了!手把手教你根据项目需求(RAG、推荐、搜索)选对向量数据库

向量数据库选型实战指南&#xff1a;从RAG到推荐系统的精准匹配 当你面对Chroma、Pinecone、Weaviate、Milvus和Faiss这五个主流向量数据库时&#xff0c;是否感到选择困难&#xff1f;每个产品官网都宣称自己性能卓越&#xff0c;但真实业务场景中&#xff0c;它们的表现差异可…...

⚠️ Agent couldn‘t generate a response. Note: some tool actions may have already been executed — plea

⚠️ Agent couldn’t generate a response 错误触发机制分析 分析日期: 2026-04-28 代码版本: v2026.4.19-beta.2-5327-gccb3af556f (commit ccb3af556f) 仓库: C:\github\openclaw 1. 错误文本来源 错误定义在 src/agents/pi-embedded-runner/run/incomplete-turn.ts 的 res…...