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

java 使用 POI 为 word 文档自动生成书签

 poi 版本:4.1.0

<properties><java.version>1.8</java.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target><poi.version>4.1.0</poi.version>
</properties><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>${poi.version}</version><scope>compile</scope><optional>false</optional>
</dependency>
<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>${poi.version}</version>
</dependency>
<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml-schemas</artifactId><version>${poi.version}</version>
</dependency>

代码示例中是为类似如下所示的接口文档自动生成书签:

			人员接口文档
1.新增人员1.1.请求url:http://127.0.0.1/addUser1.2.请求方式:POST1.3.请求参数说明:xxxxxxxxxxxxxxxxxxxxxxxxxxxXxxxxxxxxxxxxxxxxxxxxxxxxxxXxxxxxxxxxxxxxxxxxxxxxxxx1.4.响应参数说明:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxXxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxXxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
2.删除人员2.1.请求url:http://127.0.0.1/removeUser2.2.请求方式:POST2.3.请求参数说明:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxXxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx2.4.响应参数说明:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxXxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
3.查看人员详情3.1.请求url:http://127.0.0.1/userDetail3.2.请求方式:POST3.3.请求参数说明:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxXxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxXxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx3.4.响应参数说明:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxXxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

即读取文档的每一行内容,检测到该行文本以 "http://127.0.0.1" 开头则将其上一行设置为书签,请结合文档具体内容以及需求自行修改使用

例如原始文档如下所示:

输出文档如下所示:

import org.apache.poi.xwpf.usermodel.*;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.*;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.math.BigInteger;public class WordBookmarkCreater {public static void main(String[] args) throws Exception {String inputFilePath = "D:\\xxx\\input.docx";String outputFilePath = "D:\\xxx\\output.docx";XWPFDocument doc = new XWPFDocument(new FileInputStream(inputFilePath));// 删除原本书签deleteAllBookmarks( doc );// 重新生成书签markHeadings(doc);// 保存文档FileOutputStream out = new FileOutputStream(outputFilePath);doc.write(out);out.close();}// 删除文档中的书签private static void deleteAllBookmarks(XWPFDocument doc) {// 普通段落for (XWPFParagraph p : doc.getParagraphs()) {clearBookmarks(p.getCTP());}// 表格中的段落for (XWPFTable table : doc.getTables()) {for (XWPFTableRow row : table.getRows()) {for (XWPFTableCell cell : row.getTableCells()) {for (XWPFParagraph p : cell.getParagraphs()) {clearBookmarks(p.getCTP());}}}}}private static void clearBookmarks(CTP ctp) {ctp.getBookmarkStartList().clear();ctp.getBookmarkEndList().clear();}private static void markHeadings(XWPFDocument doc) {XWPFParagraph paragraph_prev = null;int num = 1;for (XWPFParagraph paragraph : doc.getParagraphs()) {String text = paragraph.getText();if( text.toLowerCase().contains( "请求" ) &&text.toLowerCase().contains( "url" ) &&text.toLowerCase().contains( "http://127.0.0.1" )){System.out.println( text );if( paragraph_prev == null ){// 可选:添加书签锚点addBookmark( paragraph, num + ". " + text );}else {// 可选:添加书签锚点addBookmark( paragraph_prev, num + ". " + paragraph_prev.getText() );}num++;}paragraph_prev = paragraph;}}private static void addBookmark(XWPFParagraph paragraph,String bookmarkName) {CTP ctp = paragraph.getCTP();CTBookmark bookmark = ctp.addNewBookmarkStart();bookmark.setId(BigInteger.valueOf( ctp.sizeOfBookmarkStartArray() ));bookmark.setName(bookmarkName);ctp.addNewBookmarkEnd().setId(bookmark.getId());}
}

http://www.xdnf.cn/news/2784.html

相关文章:

  • 热扩散测试要求不起火、不爆炸,电动汽车电池新国标GB38031-2025将于2026年7月实施
  • 驱动开发硬核特训 │ 深度解析 fixed regulator 驱动与 regulator_ops
  • 在uni-app中使用Painter生成小程序海报
  • Linux基础IO
  • RFID智能书架:图书馆数字化转型的新核心技术
  • 使用vue3 脚手架创建项目
  • 【AI Weekly】AI前沿热点周刊(4.21~4.27)
  • 考研408-计算机组成原理冲刺考点(1-3章)
  • 状态模式 (State Pattern)
  • Ubuntu安装SRS流媒体服务
  • [实战] IRIG-B协议详解及Verilog实现(完整代码)
  • 第十三节:实战与工程化高频题-TypeScript集成要点
  • 香港科技大学广州|智能交通学域博士招生宣讲会—电子科技大学
  • css网格布局Grid
  • 在服务器中,搭建FusionCompute,实现集群管理
  • Qt/C++面试【速通笔记五】—子线程与GUI线程安全交互
  • AWS PrivateLink vs Lattice:深度解析两大网络服务的异同
  • 恰好边数限制的最短路(边的数量很大)
  • 《淘宝 API 数据湖构建:实时商品详情入湖 + Apache Kafka 流式处理指南》
  • MySQL最新版9.3.0安装教程
  • PyCharm 2023升级2024 版本
  • Linux:ftp 配置实验
  • terraform使用workspace管理多工作环境
  • List--链表
  • 【C++ 核心知识点面试攻略:从基础到实战(上位机开发视角)】
  • Linux调试器 - gdb使用指南
  • 【虚幻5蓝图Editor Utility Widget:创建高效模型材质自动匹配和资产管理工具,从3DMax到Unreal和Unity引擎_系列第二篇】
  • Rabbitmq下载和安装(Windows系统,百度网盘)
  • SQL Server 存储过程开发规范
  • 普通IT的股票交易成长史--20250428晚