0
点赞
收藏
分享

微信扫一扫

java POI解析获取word文件内容

zhaoxj0217 2022-03-11 阅读 61
java

1、需要的pom文件依赖

<dependency>
	<groupId>org.apache.poi</groupId>
	<artifactId>poi</artifactId>
	<version>4.1.2</version>
</dependency>
 <dependency>
	<groupId>org.apache.poi</groupId>
	<artifactId>poi-ooxml</artifactId>
	<version>4.1.0</version>
</dependency>
<!-- POI-word文件处理需要 -->
<dependency>
	<groupId>org.apache.poi</groupId>
	<artifactId>poi-scratchpad</artifactId>
	<version>4.1.2</version>
</dependency>

2、word分为2003版本(.doc),和2007版本(.docx),所对应读取的方式不一样。

public String getContent(Att att) {
        String path = LOCALFS_PATH + att.getPath();
        StringBuffer content = new StringBuffer("");
        InputStream is = null;
        try {
            is = new FileInputStream(new File(path));
            if (att.getFileExt().equals("docx")) {
                // 2007版本的word
                XWPFDocument xwpf = new XWPFDocument(is);    // 2007版本,仅支持docx文件处理
                List<XWPFParagraph> paragraphs = xwpf.getParagraphs();
                if (paragraphs != null && paragraphs.size() > 0) {
                    for (XWPFParagraph paragraph : paragraphs) {
                        if (!paragraph.getParagraphText().startsWith("    ")) {
                            content.append("    ").append(paragraph.getParagraphText().trim()).append("\r\n");
                        } else {
                            content.append(paragraph);
                        }
                    }
                }
            } else if (att.getFileExt().equals("doc")) {
                // 2003版本的word
                WordExtractor extractor = new WordExtractor(is);  // 2003版本 仅doc格式文件可处理,docx文件不可处理
                String[] paragraphText = extractor.getParagraphText();   // 获取段落,段落缩进无法获取,可以在前添加空格填充
                if (paragraphText != null && paragraphText.length > 0) {
                    for (String paragraph : paragraphText) {
                        if (!paragraph.startsWith("    ")) {
                            content.append("    ").append(paragraph.trim()).append("\r\n");
                        } else {
                            content.append(paragraph);
                        }
                    }
                }
            }
        } catch (Exception e) {
            logger.error("" + e);
        } finally {
            if (is != null) {
                try {
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return content.toString();
    }

3、上面的代码示例获取到的仅是word文件中的文字内容,不包含图片,表格等数据。下方的示例代码可以获取word内容,包含获取页眉,页脚,图片,表格等进行操作。具体可以查看下源码或者搜索查看。
在这里插入图片描述

            XWPFDocument doc = new XWPFDocument(is);
            List<XWPFParagraph> paras = doc.getParagraphs();
            if (!CollectionUtils.isEmpty(paras)) {
               for (XWPFParagraph para : paras) {
                    //当前段落的属性
                    //CTPPr pr = para.getCTP().getPPr();
                    System.out.println(para.getText());
                }
            }

学海无涯苦作舟!!!

举报

相关推荐

0 条评论