Android 文件阅读器调研

前言

移动端无纸化作为一种趋势,文件阅读器是一种基本需求,iOS 系统天然的对 Office 组件的支持,直接可以在应用内打开,Android 里面就比较头疼了,对于 PDF、Word、Excel、PPT、TXT 等多种格式的文件要支持预览,本身就没有一个特别好的统一的方式,本文是笔者搜索一些资料做的一个汇总。

集成现成的产品

使用 GoogleDocs、office online 等在线预览

在线平台获取文档的 URL,通过 Office 平台提供的链接地址指向需要预览的文档地址即可,例如:

GoogleDocs:

https://docs.google.com/viewer?url=http://video.ch9.ms/build/2011/slides/TOOL-532T_Sutter.pptx

这种方案存在的问题是国内通常情况下访问不了 Google 提供 的服务,因此这种方案可以不考虑。

office online:

https://view.officeapps.live.com/op/view.aspx?src=http://video.ch9.ms/build/2011/slides/TOOL-532T_Sutter.pptx

平台地址:http://view.officeapps.live.com/op/view.aspx?src= 和文档地址通过拼接的地址即可实现 office 的在线预览。

Office 平台在线预览限制:

  • Word 和 PowerPoint 文档必须小于 10 M,Excel 必须小于 5M;
  • 文档支持的格式:
    • Word: docx dotx
    • Excel:xlsx、xlsb、xls、xlsm
    • PowerPoint: pptx、 ppsx、 ppt、 pps、 potx、 ppsm

调起第三方支持 Office 阅读的应用

可行方案中最简单的一种方式,缺点是会跳出自己的应用转到第三方应用中,而且需要具备以下两个条件:

  • PDF 文件需要下载到本地,不支持在线阅读
  • 用户手机中安装了支持 PDF 阅读的应用

实现这个方案的代码示例如下:

public Intent openWord(File file) {
  Intent intent = new Intent("android.intent.action.VIEW");
  intent.addCategory("android.intent.category.DEFAULT");
  intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  Uri uri = Uri.fromFile(file);
  intent.setDataAndType(uri, "application/msword");
  return Intent.createChooser(intent, "Open File");
}

集成第三方 SDK 通过 Android 原生实现

TBS 腾讯浏览服务是一个不错的三方 SDK 集成选择:

其他的 SDK 类似不做列举,基本上都是 SDK 集成的问题了。

企业级云端在线 Office 私有化部署

毕升 Office 推出基础版和集成版两个私有化部署基本版本;目前面向所有用户免费。基础版是指包含:毕升 Office 的企业云盘(文件云端管理,组织结构权限,文件/团队共享等)+ 毕升云端 Office。满足企业 Office 文件云端协作以及云端编辑,预览的需求。基础板部署脚本托管在 github 和国内的 gitee。

基于开源方案改造

PDF 的解决方案

  • PDF.js,提供了一套较完善的在 H5 页面中阅读 PDF 的方案,同时支持 Web 前端,Android 和 iOS WebView 加载。
  • PDFium:Google 和 Foxit 合作开源的 Foxit 的 PDF 源码,作为 Chrome 浏览器的 PDF 渲染引擎组件,当然这是 C/C++ 实现的。
  • PdfiumAndroid:mshockwave 基于 PDFium 基础上适配 Android 平台的函数库,barteksc 在这个基础上再做了一些修改。
  • AndroidPdfViewer:barteksc 基于 PdfiumAndroid 基础上实现的一个 PDF 阅读 Demo,支持常见的手势,缩放,双击等效果。

Word 的解决方案

Excel 的解决方案

写这些代码也许就一两个小时的事,写一篇大家好接受的文章需要几天的酝酿,如果文章对您有帮助请我喝杯咖啡吧!