写点什么

Android 实现文档在线预览功能

发布于: 2021 年 04 月 22 日
Android实现文档在线预览功能

前段时间,项目中有个需求是实现文档预览的功能,Android 要实现该功能要比 IOS 复杂的多,下面就我调研的情况,总结一下,供大家参考:

一、WebView 网页显示

该方式类似于 ios 的实现方式,使用 WebView 加载网络文件的 Url 地址即可显示。

1、Google Doc

类似 iOS ,Google 也提供了一种在线文档解析的功能,只需要按照固定的格式将远程文档的 Url 地址传给 Google 服务器,即可利用 WebView 控件加载新的 Url 地址,显示即可。WebView 加载的 Url 地址格式如下:


https://docs.google.com/gview?embedded=true&url=文档地址


但该方法在国内由于无法使用谷歌服务,所以在国内无法使用

2、Office Web 365

第三方公司提供的一种 Office 文档在线预览的功能,能够实现 Microsoft、Adobe、WPS 文档的移动端和 PC 端在线网页访问,


固定格式的链接:http://ow365.cn/?i=您的网站 ID&furl=文档地址


如:http://ow365.cn/?i=1&furl=http://a.com/downfile/a.doc


其收费标准如下:


3、永中 DCS 文档在线预览

类似「Office Web 365」提供的服务,都是通过先在个人管理中心添加远程文档域名,结合文档地址,组合成一个新的 Url 访问地址,然后便可以在 PC 和 手机端实现在线预览,Url 格式为:


http:// api网址+?k=(域名对应的用户Key)+ & url =(在线文档地址)


其收费标准如下:



总结:这两种方式完全依赖于第三方云服务,好处是提供一个 url 地址,可以同时实现手机端和 PC 端在线预览文档的需求,而且集成也比较简单。

二、打开本地应用

如果移动设备中安装有能够打开 Office 文档的本地应用,则可以借助这些应用打开所要操作的文档,但必须先将远程文档下载到设备的本地存储空间中。


intent 打开文件代码:


        Intent intent = new Intent(ACTION_VIEW);        intent.addCategory(CATEGORY_DEFAULT);        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);        intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);        Uri uri=getUriForFile(file);        String mimeType=getMimeType(uri);        intent.setDataAndType(uri, mimeType);        startActivity(Intent.createChooser(intent, "打开"));
复制代码

三、第三方 SDK

1、pdf 开源库:

  • AndroidPdfViewer、PdfiumAndroid:基于 pdfium 的两个 Android 平台实现方式,支持 PDF 文档的应用内预览,支持动画、缩放、手势和双击操作。只支持 pdf 文档的预览,并且需要先下载到本地。

  • MuPDF:一个轻量级的 开源 PDF,也是只支持 pdf 格式的文档,需要文件先下载到本地。

  • Foxit PDF SDK:它是福昕出品的、收费的 sdk,支持 PDF 的显示、导航、创建、搜索、注释、保护、PDF 文本提取、图片转换、表单数据收集和编辑等功能


由于这些支持的文档格式都是只支持 pdf,所以其实现时需要后台统一转换为 pdf 的文档格式,然后安卓端只预览这一种格式文档。例如:后台可利用 openoffice + jodconverter 将 office 文档转换为 pdf 格式。这种方式需要在服务器上安装 openoffice,文档页数多的话转换速度很慢(页数少的话速度在可以接受的范围之内,转换速度与文档大小关系不大,主要是文档页数)。然后 Android 端可用如 AndroidPdfViewe 第三方开源 sdk 预览这些文档,预览的时候需要先下载到本地。

2、利用相关技术一端完成文档转换

  • 服务端转换文档:在服务端把 office 文档转化为 html,pdf 转化为图片,Android 端直接用 webview 加载网址就可以,该种主要看服务端这种好实现不。

  • 在安卓端完成文档转换:使用 Poi 将 doc、docx、xls、xlsx 文档转换为 html,再使用 webview 加载本地 html。使用 Apache 的 Poi 组件,但是由于 ppt 在转换过程中需要用到 java 的 awt,所以无法实现 ppt 的转换,也就是说只能实现 word、excle 的转换。

3、使用腾讯浏览服务(TBS)

依托 X5 内核强大的能力,可以实现应用内的文件浏览功能、视频播放功能等。直接集成官方提供的 SDK 包,集成实现即可。该种实现还是需要把文档提前下载到本地。


:TBS 是依托 X5 内核的,当手机中没有 X5 内核的产品(如:微信、QQ、QQ 浏览器)时,就无法加载相关文档


实例代码如下:


导入库:


implementation 'com.tencent.tbs.tbssdk:sdk:43903'


private void displayFile(File file) {        Bundle bundle = new Bundle();        bundle.putString("filePath", file.getAbsolutePath());
File tempPath = new File(getExternalCacheDir().getAbsolutePath(),"tempPath/"+file.getName());
if (!tempPath.getParentFile().exists()) { tempPath.mkdirs(); }
bundle.putString("tempPath", tempPath.getAbsolutePath()); boolean result = mTbsReaderView.preOpen(getFileType(file.getAbsolutePath()), false); if (result) { mTbsReaderView.openFile(bundle); } }
复制代码


用户头像

还未添加个人签名 2020.10.09 加入

Android领域,打工人

评论

发布
暂无评论
Android实现文档在线预览功能