Java 使用 Apache POI 替换 Word 文档书签内容
Java 使用 Apache POI 替换 Word 文档书签内容
本文介绍如何使用 Java 和 Apache POI 库替换 Word 文档中的书签内容,并保存为新文件。
假设你需要将 'input01.docx' 文件中 '应变计' 书签的内容替换掉 'input03.docx' 文件中 '应变计' 书签的内容,并将新文件命名为 'input04.docx' 保存。
代码示例
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.xwpf.usermodel.*;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class WordBookmarkReplacement {
public static void main(String[] args) {
try {
// 读取输入文件
FileInputStream input03 = new FileInputStream('input03.docx');
XWPFDocument document03 = new XWPFDocument(input03);
// 获取书签
XWPFBookmark bookmark = document03.getBookmarkByName('应变计');
if (bookmark != null) {
// 获取书签的起始位置
CTR ctr = bookmark.getCTBookmark().getDomNode().getParentNode().getParentNode().getParentNode().getParentNode();
XWPFParagraph paragraph = document03.getParagraphArray(ctr);
int bookmarkStartPos = document03.getPosOfParagraph(paragraph);
// 读取替换内容
FileInputStream input01 = new FileInputStream('input01.docx');
XWPFDocument document01 = new XWPFDocument(input01);
String replacementContent = document01.getText();
// 替换书签内容
paragraph.getRuns().get(0).setText(replacementContent, 0);
// 保存为新文件
FileOutputStream output04 = new FileOutputStream('input04.docx');
document03.write(output04);
output04.close();
} else {
System.out.println('未找到书签');
}
input03.close();
} catch (IOException | InvalidFormatException e) {
e.printStackTrace();
}
}
}
代码解释
- 使用
FileInputStream读取输入文件 'input03.docx',并使用XWPFDocument加载文档。 - 通过
getBookmarkByName方法获取名为 '应变计' 的书签,并检查书签是否存在。 - 如果书签存在,使用
getCTBookmark()方法获取书签的 XML 节点,并通过节点的父节点层级关系获取到书签所在的段落。 - 使用
getPosOfParagraph方法获取段落在文档中的位置,并将替换内容插入到段落的第一个运行元素中。 - 使用
FileOutputStream将文档保存为新文件 'input04.docx'。
依赖
请确保你已经添加了 Apache POI 库的依赖,例如:
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.2</version>
</dependency>
注意
这个示例代码中假设输入文件和输出文件都位于当前工作目录下,你可以根据需要修改文件路径。
原文地址: https://www.cveoy.top/t/topic/fL0l 著作权归作者所有。请勿转载和采集!