1 Maven依赖

        <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.2.7</version></dependency>

2 替换书签

 /*** 替换书签** @param document* @param bookTagMap 书签map*/public static void replaceBookTag(XWPFDocument document, Map<String, Object> bookTagMap) {List<XWPFParagraph> paragraphList = document.getParagraphs();for (XWPFParagraph xwpfParagraph : paragraphList) {CTP ctp = xwpfParagraph.getCTP();for (int dwI = 0; dwI < ctp.sizeOfBookmarkStartArray(); dwI++) {CTBookmark bookmark = ctp.getBookmarkStartArray(dwI);if (bookTagMap.containsKey(bookmark.getName())) {XWPFRun run = xwpfParagraph.createRun();run.setText(bookTagMap.get(bookmark.getName()).toString());Node firstNode = bookmark.getDomNode();Node nextNode = firstNode.getNextSibling();while (nextNode != null) {// 循环查找结束符String nodeName = nextNode.getNodeName();if (nodeName.equals("w:bookmarkEnd")) {break;}// 删除中间的非结束节点,即删除原书签内容Node delNode = nextNode;nextNode = nextNode.getNextSibling();ctp.getDomNode().removeChild(delNode);}if (nextNode == null) {// 始终找不到结束标识的,就在书签前面添加ctp.getDomNode().insertBefore(run.getCTR().getDomNode(), firstNode);} else {// 找到结束符,将新内容添加到结束符之前,即内容写入bookmark中间ctp.getDomNode().insertBefore(run.getCTR().getDomNode(), nextNode);}}}}}

3 调试代码

  /*** 替换书签** @param response*/@GetMapping("/replaceBookTag")public void replaceBookTag(HttpServletResponse response) {try {//读文件ClassPathResource cpr = new ClassPathResource("/doc/模板.docx");XWPFDocument document = new XWPFDocument(cpr.getInputStream());//书签数据Map<String, Object> bookTagMap = new HashMap<>();bookTagMap.put("xudongmaster", "旭东怪");bookTagMap.put("xudongmaster2", "旭东怪2");replaceBookTag(document,bookTagMap);//返回流response.setHeader("content-type", "application/octet-stream");response.setContentType("application/octet-stream;charset=UTF-8");response.setHeader("Content-Disposition", "attachment; filename=" + new String("模板.docx".getBytes("utf-8"), "ISO-8859-1"));OutputStream outputStream = response.getOutputStream();document.write(outputStream);outputStream.flush();outputStream.close();} catch (Exception e) {e.printStackTrace();}}

4 模板文件

模板路径:

模板内容:

5 调试结果

注:

(1)出现书签替换失败的情况时,解决办法参考以下博客。

POI XWPFParagraph.getRuns分段混乱问题解决

(2)该书签替换功能有两个问题,第一个是样式会修改,第二个是不支持表格内的书签替换。想要实现完美的文字替换效果请参考以下这篇博客。

POI 实现Word替换文本2种情况(正常文本、表格文本)

POI 实现Word替换书签相关推荐

  1. poi操作word替换模板向指定位置添加图表

    poi操作word替换模板向指定位置添加图表 首先是引入pom文件 <dependency><groupId>org.apache.poi</groupId>< ...

  2. 踩坑日记--poi操作word替换图片显示问题

    说明 最近遇到一个比较坑的问题,就是使用poi操作word文档,通过替换书签的方式替换成图片时,图片在word中显示正常,但是通过libreoffice转成pdf时显示不全.经过测试发现,图片插入到w ...

  3. POI 实现Word替换文本2种情况(正常文本、表格文本)

    1 Maven依赖 <!--hutool工具包--><dependency><groupId>cn.hutool</groupId><artifa ...

  4. Java poi 操作word替换模版中固定参数(页眉、段落、表格)

    近期碰到一个稍微头疼的需求,将word模版中的参数替换为实际值,其中包括段落.列表(行数不够时自动递增).页眉:本文以docx文档为例,其中代码有其他地方参考,如有冒犯,还请海涵: 模版: 实现效果: ...

  5. C# 操作Word书签(二)——插入图片、表格到书签;读取、替换书签

    概要 书签的设置可以帮助我们快速的定位某段文字,使用起来很方便,也很节省时间.在前一篇文章"C# 如何添加/删除Word书签"中介绍了插入.删除书签的方法,本篇文章将对C# 操作W ...

  6. word 文档操作类,可以读出word中书签 批量替换内容,直接调用

    using System; using System.Collections.Generic; using System.Text; using Word = Microsoft.Office.Int ...

  7. java使用poi在word中生成柱状图、折线图、饼图、柱状图+折线图组合图、动态表格、文本替换、图片替换 springboot项目

    本文参考地址:https://blog.csdn.net/u014427811/article/details/100771314 在参考文章的基础上,增加了模板样例 模板样例地址 百度网盘 链接:h ...

  8. poi编辑word中的chart,对图表数据替换,并刷新图表

    最近工作需要做报表导出,再次接触poi,上次用poi的时候还是上次(在前司编辑excel的时候). 而word呢,数据结构上感觉又比excel复杂,至少我处理的时候认为是这样. 首先看一下要处理的wo ...

  9. java使用poi在word模板中替换柱状图、折线图、饼图、表格、文本、图片

    介绍 java使用poi在word模板中替换柱状图.折线图.饼图.表格.文本.图片 软件架构 安装教程 环境搭建:jdk1.8.0_291.maven1.8.0_291 IDEA工具:IntelliJ ...

  10. java操作word,添加页眉,页眉图片,替换书签,添加水印(全)

    java操作word文档,添加页眉文本,页眉图片,替换书签,水印 原模板截图: 生成后的文档效果截图: 第一步:引入maven <dependency><groupId>spi ...

最新文章

  1. 运维日常:群发邮件营销平台--EDM
  2. python3语法错误-关于在python3.7当中的语法错误!
  3. 如何正确关闭游戏服务器
  4. Python学习入门基础教程(learning Python)--1.4 Python数据处理基础 .
  5. 实现先pop后push的效果,如支付成功后的界面
  6. 查看约束信息_【华智产品汇】育种信息安全的守护者——华智育种管家
  7. Systick滴答定时器寄存器、delay()延时函数、SysTick_Config函数
  8. 以太坊应用网络项目LUKSO通过可逆ICO筹集1800万美元
  9. 产业区块链:新基建中的底层技术基座,各行业资深人士应积极参与建设
  10. 网页设计中时尚​​的下拉菜单案例
  11. python歌词统计单词词频_python词频统计
  12. VHDL 仿真出现 UUUUUUUU 红线
  13. kali 改root_linux切换到root用户,kali怎么切换root身份运行
  14. 网工软考中级数据通信技术
  15. 点赋科技:本地生活,如何开启复苏之路
  16. magicmatch java_签名图片一键批量生成 使用Java的Webmagic爬虫实现
  17. 访客模式 无痕模式 区别_模式:访客模式
  18. item_search_img-按图搜索1688商品(拍立淘)接口的接入参数说明
  19. EXFO 730C光时域反射计只有iOLM光眼升级OTDR(开通otdr权限)
  20. docker-前端部署

热门文章

  1. jQuery将json对象转为字符串,将json字符串转为对象
  2. Java JDK中文帮助文档免费下载,百度网盘下载。
  3. mysql sqlyog讲解_MySQL与sqlyog安装教程图文详解
  4. 第三章 PCB 封装库绘制
  5. python 培训 邹博
  6. spring源码下载安装,导入idea以及编译报错问题详细解决过程
  7. oracle安装sqluldr2,Oracle sqluldr2工具使用方法
  8. bp神经网络预测模型原理,神经网络模型怎么预测
  9. JSON与JAVA数据的转换。JSONObject.fromObject()和JSONObject.toBean()
  10. 微型计算机原理目录,微型计算机原理与应用 目录