You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 06:56:37