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

本示例演示如何在 Apache POI 5.2.2 版本中使用 Java 代码复制 Word 文档中的书签内容。

代码示例:

package 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 BookmarkCopyExample {

    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.getBookmarkStartArray().length > 0 && ctr.getBookmarkEndArray().length > 0) {
                    String bookmarkName = ctr.getBookmarkStartArray(0).getName();
                    XWPFParagraph targetParagraph = targetDocument.createParagraph();
                    XWPFRun targetRun = targetParagraph.createRun();
                    targetRun.setText(run.getText(0));
                    targetRun.addBreak();
                    targetRun.setText(bookmarkName);
                }
            }
        }
    }
}

代码说明:

  1. **导入必要的类:**代码示例首先导入 Apache POI 库中用于处理 Word 文档的类,以及用于读取和写入文件流的类。
  2. **定义文件路径:**示例定义了两个输入文件路径 (input01.docx 和 input02.docx) 和一个输出文件路径 (input04.docx)。
  3. **打开输入文件:**代码使用 FileInputStream 类打开两个输入文件,并使用 XWPFDocument 类创建两个 Word 文档对象。
  4. **创建新的输出文件:**示例创建了一个新的 XWPFDocument 对象,用于存储复制的书签内容。
  5. 复制书签内容:copyBookmarks() 方法用于遍历第一个和第二个输入文档中的所有段落和运行,查找并复制书签内容到输出文档中。
  6. **保存输出文件:**代码使用 FileOutputStream 类保存输出文档到指定的路径。

重要说明:

在 Apache POI 5.2.2 版本中,CTR 类不再提供 getBookmarkStartList()getBookmarkEndList() 方法。需要使用 getBookmarkStartArray()getBookmarkEndArray() 方法来获取书签的开始和结束位置。

本示例演示了如何使用 Apache POI 5.2.2 版本复制 Word 文档中的书签内容。您可以根据自己的需求修改代码,例如复制特定类型的书签或者处理更复杂的 Word 文档结构。

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

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

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