Apache POI 5.2.2 版本 Word 文档书签复制示例

本示例演示了如何使用 Apache POI 5.2.2 版本从多个 Word 文档中复制指定书签内容到新文档。

代码示例:

import org.apache.poi.xwpf.usermodel.*;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSimpleField;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.List;

public class Word {
    public static void main(String[] args) {
        try {
            // 打开输入文档1
            XWPFDocument inputDoc1 = new XWPFDocument(new FileInputStream('input01.docx'));

            // 打开输入文档2
            XWPFDocument inputDoc2 = new XWPFDocument(new FileInputStream('input02.docx'));

            // 创建输出文档
            XWPFDocument outputDoc = new XWPFDocument();

            // 复制输入文档1的内容到输出文档
            copyDocumentContent(inputDoc1, outputDoc);

            // 复制输入文档1中指定书签的内容到输出文档
            copyBookmarkContent('应变计', inputDoc1, outputDoc);

            // 复制输入文档2中指定书签的内容到输出文档
            copyBookmarkContent('位移计', inputDoc2, outputDoc);

            // 保存输出文档
            FileOutputStream out = new FileOutputStream('input04.docx');
            outputDoc.write(out);
            out.close();

            System.out.println('复制完成');
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    // 复制文档内容
    private static void copyDocumentContent(XWPFDocument sourceDoc, XWPFDocument targetDoc) {
        for (IBodyElement element : sourceDoc.getBodyElements()) {
            if (element instanceof XWPFParagraph paragraph) {
                targetDoc.createParagraph().createRun().setText(paragraph.getText());
            } else if (element instanceof XWPFTable table) {
                targetDoc.createTable().getCTTbl().setTblPr(table.getCTTbl().getTblPr());
            }
        }
    }

    // 复制书签内容
    private static void copyBookmarkContent(String bookmarkName, XWPFDocument sourceDoc, XWPFDocument targetDoc) {
        for (XWPFParagraph paragraph : sourceDoc.getParagraphs()) {
            for (XWPFRun run : paragraph.getRuns()) {
                List<CTSimpleField> fields = run.getCTR().getFldSimpleList();
                for (CTSimpleField field : fields) {
                    if (field.getInstr().contains(' FORMTEXT ')) {
                        String fieldValue = field.getInstr().split('")[1];
                        if (fieldValue.equals(bookmarkName)) {
                            targetDoc.createParagraph().createRun().setText(paragraph.getText());
                            break;
                        }
                    }
                }
            }
        }
    }
}

注意:

  • 该代码需要 Apache POI 5.2.2 版本或更高版本。
  • input01.docx, input02.docxinput04.docx 是示例文件名,请根据实际情况修改。
  • 书签名称 应变计位移计 也需要根据实际情况修改。

代码说明:

  1. 使用 XWPFDocument 类打开 Word 文档。
  2. 使用 copyDocumentContent 方法复制文档内容。
  3. 使用 copyBookmarkContent 方法复制书签内容。
    • 使用 getFldSimpleList 方法获取书签信息。
    • 检查书签名称是否与指定名称匹配。
    • 如果匹配,则将该书签对应的段落内容复制到目标文档。
  4. 保存输出文档。

使用说明:

  1. 将代码保存为 Word.java 文件。
  2. 编译并运行代码。
  3. 代码会将 input01.docxinput02.docx 中的指定书签内容复制到 input04.docx 文件中。

希望本示例对您有所帮助!

Apache POI 5.2.2 版本 Word 文档书签复制示例

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

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