使用Apache POI复制Word文档中的书签内容
使用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。
原文地址: https://www.cveoy.top/t/topic/fLl9 著作权归作者所有。请勿转载和采集!