android打开预览文件格式,Android中文档预览功能的实现思路及问题

本文介绍了Android中实现文档预览功能的三种思路:后台转换为pdf预览、安卓端转换为html预览以及第三方库。详细探讨了Apache POI在转换过程中的应用,包括转换word、excel为html,以及遇到的问题和解决方案。并提供了部分关键代码示例。
摘要由CSDN通过智能技术生成

Andriod中的文档在线查看功能,类似于网易邮箱大师中的附件预览功能,要求在app内直接打开office文档、pdf文档等。

思路一:后台统一转换文档格式,安卓端只预览一种格式文档。

在后台将office(Word、Excle、PPT)文档转换为pdf文档,在安卓端预览的时候,其实是从后台先把pdf文档下载到手机上,再去读取。

后台:openoffice + jodconverter将office文档转换为pdf格式。

集成难度不大,网上教程非常多,需要在服务器上安装openoffice,转换速度很慢(页数多特别明显,页数少的话速度在可以接受的范围之内,转换速度与文档大小关系不大,主要是文档页数)。

安卓端使用AndroidPdfViewer第三方库显示pdf文档。

就是使用第三方库,也很简单。

思路二:在安卓端完成文档转换

使用Apache的Poi组件,但是由于ppt在转换过程中需要用到java的awt,所以无法实现ppt的转换,也就是说只能实现word、excle的转换。如果项目中只是有转换word或者excle的需求,可以采用Poi。

具体是:使用Poi将doc、docx、xls、xlsx文档转换为html,再使用webview加载本地html。

这里要注意的是,Poi的jar包的导入。如果去apache的poi官网查看各组件的功能,以及要导入的jar包,但是网上的代码一般都是org.apache.poi.xwpf.converter.xhtml

这个库的。等你导入了这个库,又自己从官网上下载了poi、poi-ooxml等jar包引入后,很可能会导致编译出错,提示有重复文件。这是由于导入的jar包的版本不一致导致的。正确的导入方式可以参考下面的:

这个会自动把关联的jar包引入,从maven仓库可以看到这个jar的依赖,以及依赖的依赖,

总之很多,可以在project视图中External Libraries来查看这个库文件到底包含了哪些jar包。

compile 'fr.opensagres.xdocreport:org.apache.poi.xwpf.converter.xhtml:1.0.6'

---------------------------------------------------------------------------------------------------

这个主要是doc的转换用到的,可以不引入,网上也有很多转换方法没有用到这个库

//compile 'fr.opensagres.xdocreport:fr.opensagres.xdocreport.document:1.0.6'

---------------------------------------------------------------------------------------------------

这个库文件的版本至关重要,因为...xhtml:1.0.6中依赖的poi等jar的版本就是3.10-FINAL,

所以这里必须也是3.10-FINAL,不然编译肯定不会通过。

compile 'org.apache.poi:poi-scratchpad:3.10-FINAL'

总之,如果你在apache.poi官网上看各个组件之间的依赖关系有些困难,可以去maven看。

除了引入库文件以外,还需要在app的gradle文件中添加如下语句:

defaultConfig {

...

multiDexEnabled true

...

}

packagingOptions {

...

exclude 'META-INF/LICENSE'

exclude 'META-INF/NOTICE'

dexOptions {

javaMaxHeapSize "3g"

jumboMode = true

preDexLibraries = false

}

lintOptions {

abortOnError false

}

project.tasks.withType(com.android.build.gradle.tasks.Dex) {

additionalParameters = ['--core-library']

}

思路三:其他

POI由于预览效果不是很好,不建议使用(安卓无法转换ppt与pptx)

Flashpaper缺少后续支持,不建议使用(后台,与安卓无关)

第三方付费产品中,Office Web 365

完全依赖于第三方云服务,在安全性、灵活性、稳定性为验证,不建议使用

科瀚的SOAOffice和卓正软件的pageoffice需要浏览器Activex插件的支持,对用户不是很友好,不建议试用(后台,与安卓无关)

OpenOffice的预览效果稍差,但集成方便;

Office Web Apps预览效果最佳,钉钉、126等也采用此方式,但估计集成难度稍大,另外钉钉的预览偶尔也出现不稳定的情况;

永中office的预览效果和集成难度比较平衡,但需付费。

总之,除非需求必须,否则这种功能还是不要实现,因为难度很大,耗时费力,一般情况下交给系统去打开就行了。当然,主要功能是文档阅读的app除外。

一些代码参考

说明:大部分是从网上找的,仅供参考,功能没问题,但很多细节有待完善。

package com.ght.loginapp.utilities;

import org.apache.poi.hssf.converter.ExcelToHtmlConverter;

import org.apache.poi.hwpf.HWPFDocument;

import org.apache.poi.hwpf.converter.PicturesManager;

import org.apache.poi.hwpf.converter.WordToHtmlConverter;

import org.apache.poi.hwpf.usermodel.Picture;

import org.apache.poi.hwpf.usermodel.PictureType;

import org.apache.poi.ss.usermodel.Cell;

import org.apache.poi.ss.usermodel.Row;

import org.apache.poi.ss.usermodel.Sheet;

import org.apache.poi.ss.usermodel.Workbook;

import org.apache.poi.ss.usermodel.WorkbookFactory;

import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import org.apache.poi.xwpf.converter.core.FileImageExtractor;

import org.apache.poi.xwpf.converter.core.FileURIResolver;

import org.apache.poi.xwpf.converter.xhtml.XHTMLConverter;

import org.apache.poi.xwpf.converter.xhtml.XHTMLOptions;

import org.apache.poi.xwpf.usermodel.XWPFDocument;

import org.w3c.dom.Document;

import java.io.BufferedWriter;

import java.io.ByteArrayOutputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import java.io.OutputStreamWriter;

import java.text.DecimalFormat;

import java.text.SimpleDateFormat;

import java.util.Date;

import java.util.HashMap;

import java.util.List;

import javax.xml.parsers.DocumentBuilderFactory;

import javax.xml.parsers.ParserConfigurationException;

import javax.xml.transform.OutputKeys;

import javax.xml.transform.Transformer;

import javax.xml.transform.TransformerConfigurationException;

import javax.xml.transform.TransformerException;

import javax.xml.transform.TransformerFactory;

import javax.xml.transform.dom.DOMSource;

import javax.xml.transform.stream.StreamResult;

import org.apache.poi.hssf.usermodel.HSSFDateUtil;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;

import java.util.Map;

import org.apache.poi.hssf.usermodel.HSSFCellStyle;

import org.apache.poi.hssf.usermodel.HSSFDataFormat;

import org.apache.poi.hssf.usermodel.HSSFFont;

import org.apache.poi.hssf.usermodel.HSSFPalette;

import org.apache.poi.hssf.util.HSSFColor;

import org.apache.poi.ss.usermodel.CellStyle;

import org.apache.poi.ss.util.CellRangeAddress;

import org.apac

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值