使用Apache POI复制Word文档中的书签内容

本文介绍如何使用Apache POI库在Java中复制Word文档(.docx)中的书签内容。

代码示例javapackage word;

import org.apache.poi.openxml4j.opc.OPCPackage;import org.apache.poi.xwpf.usermodel.XWPFDocument;import org.apache.poi.xwpf.usermodel.XWPFParagraph;import org.apache.poi.xwpf.usermodel.XWPFRun;import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTR;

import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;

public class Word {

public static void main(String[] args) {        String inputFilePath1 = 'input01.docx';        String inputFilePath2 = 'input02.docx';        String outputFilePath = 'input04.docx';

    try {            // 打开第一个输入文件            FileInputStream fis1 = new FileInputStream(inputFilePath1);            XWPFDocument document1 = new XWPFDocument(OPCPackage.open(fis1));

        // 打开第二个输入文件            FileInputStream fis2 = new FileInputStream(inputFilePath2);            XWPFDocument document2 = new XWPFDocument(OPCPackage.open(fis2));

        // 创建新的输出文件            XWPFDocument outputDocument = new XWPFDocument();

        // 复制第一个输入文件的内容            copyBookmarks(document1, outputDocument);

        // 复制第二个输入文件的内容            copyBookmarks(document2, outputDocument);

        // 保存输出文件            FileOutputStream fos = new FileOutputStream(outputFilePath);            outputDocument.write(fos);            fos.close();

        System.out.println('书签内容已成功复制到新文件。');

    } catch (IOException e) {            e.printStackTrace();        } catch (Exception e) {            e.printStackTrace();        }    }

private static void copyBookmarks(XWPFDocument sourceDocument, XWPFDocument targetDocument) {        for (XWPFParagraph paragraph : sourceDocument.getParagraphs()) {            for (XWPFRun run : paragraph.getRuns()) {                CTR ctr = run.getCTR();

            // 复制应变计书签的内容                if (ctr.getBookmarkStartList().size() > 0 && ctr.getBookmarkEndList().size() > 0) {                    String bookmarkName = ctr.getBookmarkStartList().get(0).getName();                    XWPFParagraph targetParagraph = targetDocument.createParagraph();                    XWPFRun targetRun = targetParagraph.createRun();                    targetRun.setText(run.getText(0));                    targetRun.addBreak();                    targetRun.setText(bookmarkName);                }            }        }    }}

Apache POI 5.2.2 版本问题

在Apache POI 5.2.2版本中,CTR类的方法名发生了变化。需要将getBookmarkStartArray()方法替换为getBookmarkStartList()方法,并将getBookmarkEndArray()方法替换为getBookmarkEndList()方法。

此外,还需要将org.openxmlformats.schemas.wordprocessingml.x2006.main.CTR导入语句修改为org.openxmlformats.schemas.wordprocessingml.x2006.CTR

使用Apache POI复制Word文档中的书签内容

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

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