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();
        }
    }
}

代码解释

  1. 使用 FileInputStream 读取输入文件 'input03.docx',并使用 XWPFDocument 加载文档。
  2. 通过 getBookmarkByName 方法获取名为 '应变计' 的书签,并检查书签是否存在。
  3. 如果书签存在,使用 getCTBookmark() 方法获取书签的 XML 节点,并通过节点的父节点层级关系获取到书签所在的段落。
  4. 使用 getPosOfParagraph 方法获取段落在文档中的位置,并将替换内容插入到段落的第一个运行元素中。
  5. 使用 FileOutputStream 将文档保存为新文件 'input04.docx'。

依赖

请确保你已经添加了 Apache POI 库的依赖,例如:

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>4.1.2</version>
</dependency>

注意

这个示例代码中假设输入文件和输出文件都位于当前工作目录下,你可以根据需要修改文件路径。

Java 使用 Apache POI 替换 Word 文档书签内容

原文地址: https://www.cveoy.top/t/topic/fL0l 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录