Android技术知识Android开发经验谈Android开发

【总结】- 文件(pdf,ppt,doc等)加载解决方案

2020-10-25  本文已影响0人  拔萝卜占坑

简介

最近项目需要在线浏览PDF文档,即不是像微信,QQ那样点击了下载下来,然后跳转到其它应用打开。
肯定最快想到的方案就是用浏览器打开,但是发现,在IOS上面是可以正常打开的,可能是IOS本身就支持,在Android手机上却不行,百度一番,得到的结果是Android自带的WebView不支持。那么接下来就是寻找解决之法了,PDF的加载解决方案之旅就开始了。

PDF加载开源库

PDF-load

地址外链

这个解决方案是什么意思呢?有点抽象,看一下这个库就知道了。pdf.js
文档中提到使用方法:

Modern browsers:https://mozilla.github.io/pdf.js/web/viewer.html
Older browsers:https://mozilla.github.io/pdf.js/es5/web/viewer.html

比如用Older browsers这个外链地址:https://mozilla.github.io/pdf.js/es5/web/viewer.html?file=pdf地址,然后用浏览器加载。
如果不清楚,可以安装这么些,如果你是个想知道答案的人,可以问一下做web的朋友。

经尝试这种的确可以加载PDF文件,而且很省事。但是同时也存在很多问题。

使用PDF.js

这个需要使用到上面说的开源库,你说外链访问不行,那把库集成到自己服务器或者集成到Android工程中,也可以下载到手机里,加载本地文件或者网络文件,不就可以了,这个方法的确可以解决,但是当时没时间弄,我也就随便找了一个解决方案,后面会说。这个方案可以用于手机加载网页使用。

截屏2020-10-31 下午11.42.37.png

在viewer.js为了安全,对域名进行了判断:


截屏2020-10-31 下午11.30.53.png

所以可以把这个函数(validateFileURL(file))的调用注释掉。

接下来就可以加载pdf
比如:file:///path/viewer.html?file=path/guanxin_paitent_test.pdf

使用AndroidPDF

这个库支持加载网络PDF文件,集成后apk大概增加1M多,但是效果嘛,不太好。

使用AndroidPdfViewer

这个库也是基于 PdfiumAndroid开始的,算是效果最好的库了。但是apk提交增加也很明显,配置ndk支持某种平台后,apk大概增加3.5M多。但是AndroidPdfViewer不能直接加载网络PDF文件,也不提供进度提示 。所以自己封装了一个用于加载网络PDF文档,支持使用默认,自定义进度条的库。PDF-load。具体实现查看开源库中的LibPdf模块。
使用:

<com.pds.pdf.core.ExtPDFView 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/pdfView"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />
  private void displayFromUrl(String url) {
      pdfFileName = FileUtils.getFileNameByUrl(url);
      pdfView.fromUrl(url)
              .defaultPage(pageNumber)
              .onPageChange(this)
              .enableAnnotationRendering(true)
              .onLoad(this)
              .scrollHandle(new DefaultScrollHandle(this))
              .spacing(10)
              .onPageError(this);
      pdfView.enableCache(true)
              .useDefaultProgressView().go();

效果如下:


截屏2020-10-25 下午4.26.04.png

使用 腾讯X5浏览器

使用腾讯X5引擎加载PDF,doc等文件。如果项目中使用了腾讯X5引擎,那么可以直接使用pdf-x5库浏览PDF,apk体积基本没有什么增加,如果项目中没有 使用X5引擎,要用pdf-x5加载PDF,那么需要先集成X5引擎,开源库中的web库提供的简单的X5集成。

该库一共支持几十中文件加载,只需要传入不同文件地址就可以了,下面是我测试的效果:

使用tbs加载:

截屏2020-10-26 下午6.53.32.png 截屏2020-10-26 下午6.54.40.png

使用QbSdk加载:

QbSdk加载支持的文件格式更多,具体参考腾讯X5官网

截屏2020-10-26 下午6.56.21.png

调用之后,优先调起 QQ 浏览器打开文件。如果没有安装 QQ 浏览器,在 X5 内核下调起简版 QB 打开文件。如果使用的系统内核,则调起文件阅读器弹框。

使用方法请参考PDF-load

SVG

大概思路就是把PDF文件转成SVG,但是SVG需要大量的计算量,而且我目前是通过其它网站进行的PDF转SVG

PDF转其它格式文件

比如转图片等,这个自己研究。

上一篇下一篇

猜你喜欢

热点阅读