最近一段时间再研究文件解析和转换,网上找了好多资料用的版本都是比较老的,干脆自己去啃poi了,今天开始分享给大家,先从最近简单的做起,花不多说直接开始,项目基于maven构建
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.2.2</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>5.2.2</version>
</dependency>
就这两个就够了比较新的poi简化了好多的操作,不要相信网上说的找一大堆没鸟用
/**
* 只针对纯文字
* 表格 图片 后面会写到
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
//加载文件
File file = new File("中文.docx");
//将文件转成流
InputStream inputStream = Files.newInputStream(file.toPath());
//加载poi
XWPFDocument xwpfDocument = new XWPFDocument(inputStream);
//创建poi解析器
XWPFWordExtractor xwpfWordExtractor = new XWPFWordExtractor(xwpfDocument);
//从解析器中获取文件信息
XWPFDocument extractorDocument = xwpfWordExtractor.getDocument();
//获取文件的总段落数
List<XWPFParagraph> paragraphs = extractorDocument.getParagraphs();
/**
* 下面的就比较有意思了,真实的来讲你理解的段落和系统理解的段落有差距
* 如果对文档不做处理就是读取那么可以用它来直接读取段落文字:paragraph.getText()
* 如果对文档有样式 比如加粗 字体颜色等需要替换 那就需要用run.getText()
* 通过这两个方法你会看到不同的段落效果
* 文件有换行的时候读出来的全是null
*/
for (XWPFParagraph paragraph : paragraphs) {
if (paragraph.isEmpty()){
continue;
}
if (StrUtil.isBlank(paragraph.getText())){
continue;
}
log.info("不带样式段落文字:{}", paragraph.getText());
//List<XWPFRun> runs = paragraph.getRuns();
//if (runs.isEmpty()){
// continue;
//}
//for (XWPFRun run : runs) {
// if (StrUtil.isBlank(run.getText(0))){
// continue;
// }
// log.info("带样式的段落文字:{}", run.getText(0));
//}
}
extractorDocument.close();
xwpfWordExtractor.close();
xwpfDocument.close();
inputStream.close();
}
下面就是文件和不同的效果了
原文件没有任何的样式读取出来的效果
文件有样式读取出来的效果,你可以有多种样式,这里只是演示