Android开发笔记(一百四十一)读取
PPT和PDF文件
读取ppt文件 读取纯文本
HSLFSlideShow类就是poi中专门用于解析幻灯片的工具类,每张幻灯片又分别由单独的HSLFSlide类处理,幻灯片中的具体图文内容则由HSLFTextParagraph和HSLFTextRun进行分辨。
下面是使用poi解析ppt文件(2003格式)的效果图:
不同版本的poi库在解析ppt的代码略有区别,下面是使用poi15读取ppt的代码: [java] view plain copy
public static ArrayList
ArrayList
FileInputStream fis = new FileInputStream(new File(path)); HSLFSlideShow hslf = new HSLFSlideShow(fis); List
HSLFSlide item = slides.get(i);
// 读取一张幻灯片的内容(包括标题)
List> tps = item.getTextParagraphs(); for (int j = 0; j < tps.size(); j++) {
List
HSLFTextParagraph tps_item = tps_row.get(k); List
content = String.format(\ } } }
contentArray.add(content); }
} catch (Exception e) { e.printStackTrace(); }
return contentArray; }
读取图文样式
poi方式只能有效读取ppt内部的文字信息,对于ppt内带的图片以及文字样式,便力有不逮了。在博文《Android开发笔记(一百四十)Word文件的读取与显示》中,提到可以解析docx内部的document.xml文件,从xml标记中获取图片信息与样式信息,然后把图文格式构造成html文件,最后由WebView网页视图加载显示html。对于pptx文件,也可以解析pptx内部的slide*.xml幻灯片文件,采用跟解析docx类似的做法,把解析得到的图片与样式数据写入到html文件,从而曲线实现了pptx文件的读取功能。
下面是以HTML格式显示pptx文件的效果图:
下面是解析pptx并生成htmml文件的主要代码: [java] view plain copy
private void readPPTX(String pptPath) { try {
ZipFile pptxFile = new ZipFile(new File(pptPath));
int pic_index = 1; // pptx中的图片名从image1开始,所以索引从1开始 for (int i = 1; i < 100; i++) { // 最多支持100张幻灯片
String filePath = String.format(\FileUtil.getFileName(pptPath), i);
String htmlPath = FileUtil.createFile(\ Log.d(TAG, \
output = new FileOutputStream(new File(htmlPath)); presentPicture = 0;
output.write(htmlBegin.getBytes());
ZipEntry sharedStringXML = pptxFile.getEntry(\+ i + \获取每张幻灯片
InputStream inputStream = pptxFile.getInputStream(sharedStringXML); XmlPullParser xmlParser = Xml.newPullParser(); xmlParser.setInput(inputStream, \
boolean isTitle = false; // 标题