Android开发笔记(一百四十一)读取PPT和PDF文件 下载本文

内容发布更新时间 : 2024/9/23 3:14:44星期一 下面是文章的全部内容请认真阅读。

Android开发笔记(一百四十一)读取

PPT和PDF文件

读取ppt文件 读取纯文本

HSLFSlideShow类就是poi中专门用于解析幻灯片的工具类,每张幻灯片又分别由单独的HSLFSlide类处理,幻灯片中的具体图文内容则由HSLFTextParagraph和HSLFTextRun进行分辨。

下面是使用poi解析ppt文件(2003格式)的效果图:

不同版本的poi库在解析ppt的代码略有区别,下面是使用poi15读取ppt的代码: [java] view plain copy

public static ArrayList readPPT(String path) {

ArrayList contentArray = new ArrayList(); try {

FileInputStream fis = new FileInputStream(new File(path)); HSLFSlideShow hslf = new HSLFSlideShow(fis); List slides = hslf.getSlides(); for (int i = 0; i < slides.size(); i++) { String content = \

HSLFSlide item = slides.get(i);

// 读取一张幻灯片的内容(包括标题)

List> tps = item.getTextParagraphs(); for (int j = 0; j < tps.size(); j++) {

List tps_row = tps.get(j); for (int k = 0; k < tps_row.size(); k++) {

HSLFTextParagraph tps_item = tps_row.get(k); List trs = tps_item.getTextRuns(); for (int l = 0; l < trs.swww.tt951.comize(); l++) { HSLFTextRun trs_item = trs.get(l);

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; // 标题