使用Apache POI抽取OFFICE文本(DOC, DOCX, XLS, XLSX, PPT, PPTX)——Desktop Search开发笔记【经验积累】
为了对文件内容进行索引,必须先抽取出文件中文本。我们使用Apache POI提供的API来抽取office文件(DOC, DOCX, XLS, XLSX, PPT, PPTX)中的文本。很多人在文件使用开源API的时候都很纳闷,Javadocs那么大,我要的API在到底在那个类里边。即使找到了也不明白这么多构造函数该用哪个创建想要的对象。本文给大家讲一下POI中我们该如何创建抽取(DOC, DOCX, XLS, XLSX, PPT, PPTX)的对象。下载Apache POI(http://poi.apache.org/download.html#POI-3.10-beta2)把下面5个jar包和两个lib文件夹中的jar导入项目classpath
介绍一下最后两种:
最后第二种接收InputStream来创建对象;
最后一种接收POIFSFileSystem来创建对象:
POIFSFileSystem也接收InputStream来接收对象。
回过头来看看最后第三个构造函数,接收HWPFDocument来创建对象;
而HWPFDDocument通过接收InputStream或者POIFSFileSystem来创建对象。
DOCXorg.apache.poi.POITextExtractor
org.apache.poi.POIXMLTextExtractor
org.apache.poi.xwpf.extractor.XWPFWordExtractor
这个类能够处理excel2007+(.docx)
(1)该类对象的父类可以使用ExtratorFactory生成,但需要接收的参数是个virtual 对象OPCPackage,该对象不好确定。因此我们直接使用(2)中的方法创建对象
(2)新建XWPFWordExtractor对象
我们使用第二个构造函数,通过接收XWPFDocument对象来创建
XWPFDocument可以接收inputStream对象。
XLSorg.apache.poi.hssf.extractor.ExcelExtractor
这个类只能处理excel 2003(.xls)
(1)同DOC,通过ExtractorFactory创建
(2)新建ExcelExtractor对象
1)同DOC,通过接收POIFSFileSystem来创建对象
2)通过接收HSSFWorkbook来创建对象
HSSFWorkbook对象可以通过接收POIFSFileSystem或者InputStream对象来创建
样例代码:
通过接收XSSFWorkbook对象来创建:
发现XSSFWorkbook可以接收inputStream对象
PPTorg.apache.poi.hslf.extractor.PowerPointExtractor
(1)同DOC,用ExtractorFactory创建对象
(2)直接使用PowerPointExtractor创建对象
通过接收HSLFSlideShow对象、POIFSFileSystem对象或文件名即可创建。
PPTXorg.apache.poi.POITextExtractor
org.apache.poi.POIXMLTextExtractor
org.apache.poi.xslf.extractor.XSLFPowerPointExtractor
同XLSX,直接创建XSLFPowerPointExtractor对象
(1)接收XMLSlideShow对象
通过接收InputStream来创建XMLSlideShow对象
(2)接收XSLFSlideShow对象
通过接收文件路径即可创建XSLFSlideShow对象