`
令狐冲0660
  • 浏览: 15197 次
  • 性别: Icon_minigender_1
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论

使用POI读写PowerPoint文件(兼容ppt与pptx版本)

阅读更多

调用示例:

 

 

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 &reg; 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 &reg; 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 &reg; 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软件也可进行文件读写。
1
2
分享到:
评论

相关推荐

    poi将word、PPT、Excel转pdf实现在线预览的jar包

    Apache POI是Java平台上用于读写Microsoft Office格式文件的开源库,包括Word(.doc/.docx)、PowerPoint(.ppt/.pptx)和Excel(.xls/.xlsx)等。 首先,Apache POI提供了API,允许开发者以编程方式操作这些文件,...

    poi操作ppt图表.zip

    首先,Apache POI提供了HSLF(用于低级API,处理老版本的*.ppt文件)和XSLF(用于处理OOXML格式的*.pptx文件)两个包,以便于我们在Java环境中创建、读取和修改PowerPoint文件。对于新版本的PPTX文件,我们主要会...

    Android_POI_TO_PPT

    首先,Apache POI提供了HSLF(Horrible Slide Library Format)和XSLF(XML Slide Library Format)两个API,分别用于处理老版本的PPT(.ppt)和新版本的PPTX(.pptx)文件。在这个项目中,描述提到目前只实现了PPT...

    POI将文件转为html

    在IT行业中,尤其是在数据处理和文档管理领域,Apache POI是一个非常重要的库,它允许开发者使用Java处理Microsoft Office格式的文件,如Excel、Word和PowerPoint。本篇将详细讲解如何利用Apache POI将不同类型的...

    POI修改word、excel、pdf、ppt文件属性如作者以及将其转成html

    Apache POI是一个强大的Java库,专门用于处理Microsoft Office格式的文件,如Word(.doc, .docx)、Excel(.xls, .xlsx)、PowerPoint(.ppt, .pptx)等。通过使用POI,开发者可以创建、读取、修改这些文件,并且将...

    Android上使用POI抽取WordExcel和PPT内容工程源码

    6. **错误处理和兼容性**:不同版本的Office文件格式可能存在差异,开发时需要考虑兼容性问题。同时,处理过程中可能会遇到文件损坏或格式不正确的情况,需要编写适当的异常处理代码。 7. **文件操作**:Android...

    android 操作office文档 doc docx xls xlsx ppt pptx pdf

    在Android平台上,处理Office文档(如doc、docx、xls、xlsx、ppt、pptx)以及PDF文件是一项常见的需求。Android本身并不直接支持这些文件格式的处理,因此开发者需要借助第三方库或者Google Drive等在线服务来实现。...

    poi读写word模板/JAVA生成word包

    在Java开发中,Apache POI 是一个非常重要的库,它允许开发者处理Microsoft Office格式的文件,包括Word(.doc和.docx)、Excel(.xls和.xlsx)和PowerPoint(.ppt和.pptx)。本教程将专注于使用Apache POI进行Word...

    org.apache.poi 3.17最新官方版文件操作jar包

    Apache POI 是一个开源项目,专门用于处理Microsoft Office格式的文件,如Word(.doc、.docx)、Excel(.xls、.xlsx)、PowerPoint(.ppt、.pptx)等。这个“org.apache.poi 3.17最新官方版文件操作jar包”包含了...

    poi解析word、excel/ppt 及其其他相应的工具jar

    Apache POI 是一个开源项目,专门用于处理Microsoft Office格式的文件,如Word(.doc、.docx)、Excel(.xls、.xlsx)和PowerPoint(.ppt、.pptx)。在Java环境中,POI 提供了丰富的API,使得开发者能够读取、写入和...

    文件上传使用POI导入数据库

    Apache POI是一个开源项目,提供了Java API来读写Microsoft Office格式的文件,包括Excel(XLS, XLSX)、Word(DOC, DOCX)和PowerPoint(PPT, PPTX)。在本例中,POI用于读取Excel文件。它可以解析工作簿(Workbook...

    Poi-ppt.zip_885POICOM_PPT模板_javaPPT工具项目_poi ppt

    Apache POI是Apache软件基金会的一个开源项目,它提供了API用于读写Microsoft Office格式的文件,包括Word(.doc)、Excel(.xls/.xlsx)和PowerPoint(.ppt/.pptx)。在本项目中,主要关注的是对PowerPoint的支持。...

    office办公文档doc、docx、xls、xlsx、ppt、pptx在线预览java代码

    对于.docx和.xlsx文件,我们可以直接使用Apache POI的HSSF(用于老版本的Excel .xls)和XSSF(用于新版本的Excel .xlsx)API。对于.pptx文件,可以使用XWPF(用于PowerPoint .pptx)API。然而,直接使用POI进行在线...

    poi3.16jar包和poi最新版4.0.1jar包

    - **支持的功能**:此版本支持对XLS(Excel 97-2003格式)和XLSX(Excel 2007及以上格式)的读写操作,同时也支持创建和修改Word(DOC和DOCX)及PowerPoint(PPT和PPTX)文件。 - **API接口**:3.16版本的API相对...

    poi-scratchpad-3.12-20150511和poi-3.12-20150511包

    Apache POI是一个开源项目,主要用于处理Microsoft Office格式的文件,如Word(.doc/.docx)、Excel(.xls/.xlsx)和PowerPoint(.ppt/.pptx)。在本例中,我们关注的是与处理PowerPoint文件相关的部分,即"poi-...

    POI读写excel(.xls/.xlsx)的Demo

    Apache POI 是一个开源项目,专门用于处理Microsoft Office格式的文件,包括Excel (.xls 和 .xlsx)、Word (.doc 和 .docx) 和 PowerPoint (.ppt 和 .pptx)。在这个"POI读写excel(.xls/.xlsx)的Demo"中,我们将深入...

    读写doc文件poi jar包

    在Java编程环境中,Apache POI 是一个非常重要的库,它允许开发者读取、写入以及修改Microsoft Office格式的文件,包括Word(.doc)、Excel(.xls/.xlsx)、PowerPoint(.ppt/.pptx)等。标题提到的“读写doc文件poi...

    poi-3.9 apache-poi-3.9 最新稳定版本

    Apache POI 是一个开源项目,由Apache软件基金会维护,它主要致力于处理Microsoft Office格式的文件,如Excel(.xlsx, .xls),Word(.doc, .docx)和PowerPoint(.ppt, .pptx)。POI库为Java开发者提供了一套API,...

    POI和ASPOSE文件转换在线预览

    首先,Apache POI是Apache软件基金会的一个开源项目,主要设计用于读写Microsoft Office格式的文件,如Word(.doc/.docx)、Excel(.xls/.xlsx)和PowerPoint(.ppt/.pptx)。在我们的场景中,POI可以用来将Word文档...

Global site tag (gtag.js) - Google Analytics