java小知识:解析读取docx文档的文本内容

一.pom文件里引入相关jar包

复制代码
	<!-- easy poi -->
    <dependency>
        <groupId>cn.afterturn</groupId>
        <artifactId>easypoi-base</artifactId>
        <version>4.1.0</version>
    </dependency>
    <dependency>
        <groupId>cn.afterturn</groupId>
        <artifactId>easypoi-web</artifactId>
        <version>4.1.0</version>
    </dependency>
    <dependency>
        <groupId>cn.afterturn</groupId>
        <artifactId>easypoi-annotation</artifactId>
        <version>4.1.0</version>
    </dependency>

二.文档解析

1.读取docx

复制代码
public static String readDocxUrlContent(String docxUrl) {
    InputStream inputStream = null;
    try {
   		//1.创建URL对象,获得资源
        URL url = new URL(docxUrl);
        //2.打开连接的输入流
        inputStream = url.openStream();
        //3.定义文档对象
        XWPFDocument document = new XWPFDocument(inputStream);
        //4.获取文档内所有的内容段落
        List<XWPFParagraph> paragraphs = document.getParagraphs();
        StringBuilder paragraphText = new StringBuilder();
        if (ObjectUtils.isEmpty(paragraphs)) {
        	//5.不能获取到内容段落,则读取文档内的表格内容
            return WordUtils.getTableCellsText(document);
        }
        //6.读取段落内容文本
        for (XWPFParagraph paragraph : paragraphs) {
            paragraphText.append(paragraph.getText());
        }
        return paragraphText.toString();
    } catch (Exception e) {
        log.error("FileUtil.readDocxUrlContent:读取文件内容失败", e);
    } finally {
        if (inputStream != null) {
            try {
                inputStream.close();
            } catch (IOException e) {
                log.error("FileUtil.readDocxUrlContent:关闭inputStream失败", e);
            }
        }
    }
    return null;
}

2.获取所有的表格内的文本内容

复制代码
/**
 * 获取文档表内,所有的文本内容
 */
public static String getTableCellsText(XWPFDocument document) {
    StringBuilder stringBuilder = new StringBuilder();
    //1. 读取文档内所有表
    List<XWPFTable> tables = document.getTables();
    for (XWPFTable table : tables) {
        //2. 读取表里所有行
        List<XWPFTableRow> rows = table.getRows();
        for (int i = NumberUtils.INTEGER_ZERO; i < rows.size(); i++) {
            XWPFTableRow row = rows.get(i);
            //3. 读取每行的所有单元格
            List<XWPFTableCell> tableCells = row.getTableCells();
            for (int j = NumberUtils.INTEGER_ZERO; j < tableCells.size(); j++) {
                XWPFTableCell cell = tableCells.get(j);
                stringBuilder.append(cell.getText());
            }
        }
    }
    return stringBuilder.toString();
}
相关推荐
咖啡八杯4 小时前
GoF设计模式——策略模式
java·后端·spring·设计模式
用户1285261160211 小时前
我把祖传Java项目重构后,接口响应从3s砍到了200ms,只改了这几行代码
java
Linsk11 小时前
组件 = 模板 + 业务逻辑
java·前端·vue.js
星沉远浦12 小时前
用Gemini高效解决Java代码报错难以定位的问题
java
用户2986985301416 小时前
Word 文档字符级格式化:Java 实现方案详解
java·后端
笨鸟飞不快16 小时前
从单个服务到集群:一次完整的性能排查复盘
java·前端
荣码16 小时前
用Streamlit给AI应用套个界面,10行代码出Web页面
java·python
SamDeepThinking17 小时前
Java微服务练习方式
java·后端·微服务
朦胧之1 天前
AI 编程-老项目改造篇
java·前端·后端
程序猿大帅1 天前
别再只当调包侠了:用 Spring AI 落地 Function Calling,我被大模型硬生生砸出了三个大坑
java