调用示例:
File powerPointFile = new File("D:\\temp.ppt");
//读取PowerPoint文档中所有文本内容,以字符串形式返回
System.out.println(PowerPointFileUtil.extractTextFromPowerPointFile(powerPointFile , "," , ";"));
工具类源码:
/**
* BasePowerPointFileUtil.java
* Copyright ® 2017 窦海宁
* All right reserved
*/
package org.aiyu.core.common.util.file.office;
import java.util.ArrayList;
import java.util.List;
import org.apache.poi.sl.usermodel.AutoShape;
import org.apache.poi.sl.usermodel.Shape;
import org.apache.poi.sl.usermodel.Slide;
import org.apache.poi.sl.usermodel.SlideShow;
/**
* <p>PowerPoint文件工具基类
*
* <p>通用的PowerPoint文件工具基类,可用于从PowerPoint文档中抽取文本信息
*
* @author 窦海宁, chong0660@sina.com
* @since AiyuCommonCore-1.0
* @version AiyuCommonCore-1.0
*/
public abstract class BasePowerPointFileUtil {
/**
* <p>读取PowerPoint文件中的幻灯片对象
*
* @param slideShow SlideShow对象
*
* @return 读取出的工作薄列表
*
* @modify 窦海宁, 2017-01-18
*/
protected static List readSlideShow(SlideShow slideShow) {
List slideList = null;
if (slideShow != null) {
slideList = new ArrayList();
List slides = slideShow.getSlides();
for (int i = 0 ; i < slides.size() ; i++) {
slideList.add(BasePowerPointFileUtil.readSlide((Slide) slides.get(i)));
}
}
return slideList;
}
/**
* <p>读取指定的Slide中的数据
*
* @param slide Slide对象
*
* @return 读取出的Slide数据列表
*
* @modify 窦海宁, 2017-01-18
*/
protected static List readSlide(Slide slide) {
List shapeList = null;
if (slide != null) {
shapeList = new ArrayList();
List shapes = slide.getShapes();
for (int i = 0 ; i < shapes.size() ; i++) {
shapeList.add(BasePowerPointFileUtil.readShape((Shape) shapes.get(i)));
}
}
return shapeList;
}
/**
* <p>读取指定的图形的数据
*
* @param shape Slide中的图形对象
*
* @return 读取出的图形数据
*
* @modify 窦海宁, 2017-01-18
*/
protected static Object readShape(Shape shape) {
String returnValue = null;
if (shape != null) {
if (shape instanceof AutoShape) {
try {
returnValue = ((AutoShape) shape).getText();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
return returnValue;
}
}
PowerPoint2003版本工具类:
/**
* PowerPoint2003FileUtil.java
* Copyright ® 2010 窦海宁
* All right reserved
*/
package org.aiyu.core.common.util.file.office;
import java.io.File;
import java.util.Iterator;
import java.util.List;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.hslf.usermodel.HSLFSlideShow;
import org.apache.poi.hslf.usermodel.HSLFSlideShowImpl;
import org.apache.poi.sl.usermodel.SlideShow;
/**
* <p>PowerPoint2003版文件工具类
*
* <p>通用的PowerPoint2003版文件工具类,可用于从PowerPoint文档中抽取文本信息
*
* @author 窦海宁, chong0660@sina.com
* @since AiyuCommonCore-1.0
* @version AiyuCommonCore-1.0
*/
public abstract class PowerPoint2003FileUtil extends BasePowerPointFileUtil {
/**
* <p>从PowerPoint文档中提取文本信息
*
* @param powerPointFile PowerPoint文件
* @param shapeSeparator Shape分隔符
* @param slideSeparator Slide分隔符
*
* @return 提取后的文本信息
*
* @modify 窦海宁, 2017-01-18
*/
protected static String extractTextFromPowerPointFile(File powerPointFile , String shapeSeparator , String slideSeparator) {
StringBuffer returnValue = new StringBuffer();
if (powerPointFile != null && slideSeparator != null && shapeSeparator != null) {
if (powerPointFile.isFile()) {
try {
SlideShow slideShow = new HSLFSlideShow(new HSLFSlideShowImpl(powerPointFile.getCanonicalPath()));
Iterator slideIterator = PowerPoint2003FileUtil.readSlideShow(slideShow).iterator();
//遍历Slide
while (slideIterator.hasNext()) {
Iterator shapeIterator = ((List) slideIterator.next()).iterator();
//遍历Shape
while (shapeIterator.hasNext()) {
Object shapeValue = shapeIterator.next();
if (shapeValue != null) {
returnValue.append((String) shapeValue);
if (shapeIterator.hasNext()) {
returnValue.append(shapeSeparator);
}
}
}
if (slideIterator.hasNext()) {
returnValue.append(slideSeparator);
}
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
return StringUtils.trimToNull(returnValue.toString());
}
}
PowerPoint2007版本工具类:
/**
* PowerPoint2007FileUtil.java
* Copyright ® 2017 窦海宁
* All right reserved
*/
package org.aiyu.core.common.util.file.office;
import java.io.File;
import java.io.FileInputStream;
import java.util.Iterator;
import java.util.List;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.xslf.usermodel.XMLSlideShow;
/**
* <p>PowerPoint2007版文件工具类
*
* <p>通用的PowerPoint2007版文件工具类,可用于从PowerPoint文档中抽取文本信息
*
* @author 窦海宁, chong0660@sina.com
* @since AiyuCommonCore-1.0
* @version AiyuCommonCore-1.0
*/
public abstract class PowerPoint2007FileUtil extends BasePowerPointFileUtil {
/**
* <p>从PowerPoint文档中提取文本信息
*
* @param powerPointFile PowerPoint文件
* @param shapeSeparator Shape分隔符
* @param slideSeparator Slide分隔符
*
* @return 提取后的文本信息
*
* @modify 窦海宁, 2017-01-18
*/
protected static String extractTextFromPowerPointFile(File powerPointFile , String shapeSeparator , String slideSeparator) {
StringBuffer returnValue = new StringBuffer();
if (powerPointFile != null && slideSeparator != null && shapeSeparator != null) {
if (powerPointFile.isFile()) {
try {
XMLSlideShow slideShow = new XMLSlideShow(new FileInputStream(powerPointFile));
Iterator slideIterator = PowerPoint2007FileUtil.readSlideShow(slideShow).iterator();
//遍历Slide
while (slideIterator.hasNext()) {
Iterator shapeIterator = ((List) slideIterator.next()).iterator();
//遍历Shape
while (shapeIterator.hasNext()) {
Object shapeValue = shapeIterator.next();
if (shapeValue != null) {
returnValue.append((String) shapeValue);
if (shapeIterator.hasNext()) {
returnValue.append(shapeSeparator);
}
}
}
if (slideIterator.hasNext()) {
returnValue.append(slideSeparator);
}
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
return StringUtils.trimToNull(returnValue.toString());
}
}
统一调用工具类:
/**
* PowerPointFileUtil.java
* Copyright ® 2017 窦海宁
* All right reserved
*/
package org.aiyu.core.common.util.file.office;
import java.io.File;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.lang3.StringUtils;
/**
* <p>PowerPoint文件工具类
*
* <p>通用的PowerPoint文件工具类,可用于从PowerPoint文档中抽取文本信息
*
* @author 窦海宁, chong0660@sina.com
* @since AiyuCommonCore-1.0
* @version AiyuCommonCore-1.0
*/
public abstract class PowerPointFileUtil extends BasePowerPointFileUtil {
/**
* <p>从PowerPoint文档中提取文本信息
*
* @param powerPointFile PowerPoint文件
* @param shapeSeparator Shape分隔符
* @param slideSeparator Slide分隔符
*
* @return 提取后的文本信息
*
* @modify 窦海宁, 2017-02-06
*/
public static String extractTextFromPowerPointFile(File powerPointFile , String shapeSeparator , String slideSeparator) {
String resultText = null;
if (powerPointFile != null && powerPointFile.exists()) {
String extension = FilenameUtils.getExtension(powerPointFile.getName());
if (StringUtils.equalsIgnoreCase("ppt" , extension)) {
//Office2003版文件处理
resultText = PowerPoint2003FileUtil.extractTextFromPowerPointFile(powerPointFile , shapeSeparator , slideSeparator);
} else if (StringUtils.equalsIgnoreCase("pptx" , extension)) {
//Office2007版文件处理
resultText = PowerPoint2003FileUtil.extractTextFromPowerPointFile(powerPointFile , shapeSeparator , slideSeparator);
} else {
//文件类型有误
}
}
return resultText;
}
}
统一调用工具类通过文件扩展名(PPT与PPTX,不区分大小写)判断文件版本,暂时没有想到更好的办法;本工具类使用POI_3.15实现,无须目标机器安装OFFICE软件也可进行文件读写。
分享到:
相关推荐
Apache POI是Java平台上用于读写Microsoft Office格式文件的开源库,包括Word(.doc/.docx)、PowerPoint(.ppt/.pptx)和Excel(.xls/.xlsx)等。 首先,Apache POI提供了API,允许开发者以编程方式操作这些文件,...
首先,Apache POI提供了HSLF(用于低级API,处理老版本的*.ppt文件)和XSLF(用于处理OOXML格式的*.pptx文件)两个包,以便于我们在Java环境中创建、读取和修改PowerPoint文件。对于新版本的PPTX文件,我们主要会...
首先,Apache POI提供了HSLF(Horrible Slide Library Format)和XSLF(XML Slide Library Format)两个API,分别用于处理老版本的PPT(.ppt)和新版本的PPTX(.pptx)文件。在这个项目中,描述提到目前只实现了PPT...
在IT行业中,尤其是在数据处理和文档管理领域,Apache POI是一个非常重要的库,它允许开发者使用Java处理Microsoft Office格式的文件,如Excel、Word和PowerPoint。本篇将详细讲解如何利用Apache POI将不同类型的...
Apache POI是一个强大的Java库,专门用于处理Microsoft Office格式的文件,如Word(.doc, .docx)、Excel(.xls, .xlsx)、PowerPoint(.ppt, .pptx)等。通过使用POI,开发者可以创建、读取、修改这些文件,并且将...
6. **错误处理和兼容性**:不同版本的Office文件格式可能存在差异,开发时需要考虑兼容性问题。同时,处理过程中可能会遇到文件损坏或格式不正确的情况,需要编写适当的异常处理代码。 7. **文件操作**:Android...
在Android平台上,处理Office文档(如doc、docx、xls、xlsx、ppt、pptx)以及PDF文件是一项常见的需求。Android本身并不直接支持这些文件格式的处理,因此开发者需要借助第三方库或者Google Drive等在线服务来实现。...
在Java开发中,Apache POI 是一个非常重要的库,它允许开发者处理Microsoft Office格式的文件,包括Word(.doc和.docx)、Excel(.xls和.xlsx)和PowerPoint(.ppt和.pptx)。本教程将专注于使用Apache POI进行Word...
Apache POI 是一个开源项目,专门用于处理Microsoft Office格式的文件,如Word(.doc、.docx)、Excel(.xls、.xlsx)、PowerPoint(.ppt、.pptx)等。这个“org.apache.poi 3.17最新官方版文件操作jar包”包含了...
Apache POI 是一个开源项目,专门用于处理Microsoft Office格式的文件,如Word(.doc、.docx)、Excel(.xls、.xlsx)和PowerPoint(.ppt、.pptx)。在Java环境中,POI 提供了丰富的API,使得开发者能够读取、写入和...
Apache POI是一个开源项目,提供了Java API来读写Microsoft Office格式的文件,包括Excel(XLS, XLSX)、Word(DOC, DOCX)和PowerPoint(PPT, PPTX)。在本例中,POI用于读取Excel文件。它可以解析工作簿(Workbook...
Apache POI是Apache软件基金会的一个开源项目,它提供了API用于读写Microsoft Office格式的文件,包括Word(.doc)、Excel(.xls/.xlsx)和PowerPoint(.ppt/.pptx)。在本项目中,主要关注的是对PowerPoint的支持。...
对于.docx和.xlsx文件,我们可以直接使用Apache POI的HSSF(用于老版本的Excel .xls)和XSSF(用于新版本的Excel .xlsx)API。对于.pptx文件,可以使用XWPF(用于PowerPoint .pptx)API。然而,直接使用POI进行在线...
- **支持的功能**:此版本支持对XLS(Excel 97-2003格式)和XLSX(Excel 2007及以上格式)的读写操作,同时也支持创建和修改Word(DOC和DOCX)及PowerPoint(PPT和PPTX)文件。 - **API接口**:3.16版本的API相对...
Apache POI是一个开源项目,主要用于处理Microsoft Office格式的文件,如Word(.doc/.docx)、Excel(.xls/.xlsx)和PowerPoint(.ppt/.pptx)。在本例中,我们关注的是与处理PowerPoint文件相关的部分,即"poi-...
Apache POI 是一个开源项目,专门用于处理Microsoft Office格式的文件,包括Excel (.xls 和 .xlsx)、Word (.doc 和 .docx) 和 PowerPoint (.ppt 和 .pptx)。在这个"POI读写excel(.xls/.xlsx)的Demo"中,我们将深入...
在Java编程环境中,Apache POI 是一个非常重要的库,它允许开发者读取、写入以及修改Microsoft Office格式的文件,包括Word(.doc)、Excel(.xls/.xlsx)、PowerPoint(.ppt/.pptx)等。标题提到的“读写doc文件poi...
Apache POI 是一个开源项目,由Apache软件基金会维护,它主要致力于处理Microsoft Office格式的文件,如Excel(.xlsx, .xls),Word(.doc, .docx)和PowerPoint(.ppt, .pptx)。POI库为Java开发者提供了一套API,...
首先,Apache POI是Apache软件基金会的一个开源项目,主要设计用于读写Microsoft Office格式的文件,如Word(.doc/.docx)、Excel(.xls/.xlsx)和PowerPoint(.ppt/.pptx)。在我们的场景中,POI可以用来将Word文档...