Java 使用 Apache POI 复制 Word 文档书签内容
package word;
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.CTBookmark;
import java.io.FileInputStream; import java.io.FileOutputStream;
public class Word { public static void main(String[] args) { try { // 读取输入文件 FileInputStream input01 = new FileInputStream('input01.docx'); XWPFDocument document01 = new XWPFDocument(input01); FileInputStream input03 = new FileInputStream('input03.docx'); XWPFDocument document03 = new XWPFDocument(input03);
// 获取输入文件的书签
for (XWPFParagraph paragraph : document01.getParagraphs()) {
for (XWPFRun run : paragraph.getRuns()) {
for (CTBookmark bookmark : run.getCTR().getBookmarkStartArray()) {
String bookmarkName = bookmark.getName();
// 获取对应的书签位置
XWPFParagraph targetParagraph = findBookmarkParagraph(document03, bookmarkName);
if (targetParagraph != null) {
// 复制内容到目标书签位置
XWPFRun newRun = targetParagraph.createRun();
newRun.setText(run.getText(0));
newRun.setFontSize(run.getFontSizeAsDouble());
newRun.setFontFamily(run.getFontFamily());
newRun.setBold(run.isBold());
newRun.setItalic(run.isItalic());
newRun.setUnderline(run.getUnderline());
}
}
}
}
// 保存新文件
FileOutputStream output = new FileOutputStream('input04.docx');
document03.write(output);
output.close();
// 关闭文件流
document01.close();
document03.close();
input01.close();
input03.close();
System.out.println('复制完成!');
} catch (Exception e) {
e.printStackTrace();
}
}
// 根据书签名称找到对应的段落
private static XWPFParagraph findBookmarkParagraph(XWPFDocument document, String bookmarkName) {
for (XWPFParagraph paragraph : document.getParagraphs()) {
for (CTBookmark bookmark : paragraph.getCTP().getBookmarkStartArray()) {
if (bookmark.getName().equals(bookmarkName)) {
return paragraph;
}
}
}
return null;
}
}
原文地址: https://www.cveoy.top/t/topic/fLZl 著作权归作者所有。请勿转载和采集!