如何从Apache POI XWPFDocument提取脚注与段落?求XWPF脚注提取方法
从Apache POI的XWPFDocument提取段落和脚注的方法
嗨,我来帮你搞定这个问题~ 确实HWPF(处理.doc格式)和XWPF(处理.docx格式)的API差异不小,HWPF的WordExtractor封装了脚注提取的便捷方法,但XWPF需要我们直接操作脚注对象来获取内容,下面分两部分详细说明:
一、提取段落
这个操作很直接,XWPFDocument提供了getParagraphs()方法,能直接拿到文档中所有段落的集合,遍历即可提取文本:
import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.apache.poi.xwpf.usermodel.XWPFParagraph; import java.io.FileInputStream; import java.io.IOException; public class ExtractParagraphs { public static void main(String[] args) { try (FileInputStream fis = new FileInputStream("C:\\abc.docx"); XWPFDocument doc = new XWPFDocument(fis)) { // 遍历提取所有段落 for (XWPFParagraph paragraph : doc.getParagraphs()) { String paraText = paragraph.getText(); if (!paraText.trim().isEmpty()) { // 跳过空段落 System.out.println("段落内容:" + paraText); } } } catch (IOException e) { e.printStackTrace(); } } }
二、提取脚注
XWPF没有像HWPF那样的WordExtractor直接返回脚注文本数组,但我们可以通过XWPFDocument.getFootnotes()获取所有脚注对象,再遍历脚注内部的段落来提取内容(脚注本身是由多个段落组成的,需要逐个处理):
import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.apache.poi.xwpf.usermodel.XWPFFootnote; import org.apache.poi.xwpf.usermodel.XWPFParagraph; import java.io.FileInputStream; import java.io.IOException; public class ExtractFootnotes { public static void main(String[] args) { try (FileInputStream fis = new FileInputStream("C:\\abc.docx"); XWPFDocument doc = new XWPFDocument(fis)) { // 遍历提取所有脚注 for (XWPFFootnote footnote : doc.getFootnotes()) { System.out.println("--- 脚注内容 ---"); // 遍历脚注中的每个段落 for (XWPFParagraph para : footnote.getParagraphs()) { String footnoteText = para.getText(); if (!footnoteText.trim().isEmpty()) { System.out.println(footnoteText); } } } } catch (IOException e) { e.printStackTrace(); } } }
补充小提示
- 如果需要区分脚注和尾注(endnote),可以用
doc.getEndnotes()获取尾注集合,处理逻辑和脚注完全一致。 - 代码中用了try-with-resources语法,会自动关闭流和文档对象,比手动调用
close()更安全可靠。 - 要是脚注里包含表格、图片等复杂元素,还需要针对性处理对应的XWPF对象,但如果只是提取纯文本,上面的代码就足够用了。
内容的提问来源于stack exchange,提问作者Peggy
相关产品推荐
相关产品推荐

