android项目中在webview中打开pdf

android项目中在webview中打开pdf。

关于android打开pdf文件方法有多种,下面的文章有详细说明:

Android 实现 PDF 文件阅读功能调研

Android 使用PDF.js浏览pdf的方法示例

android:加载PDF几种方法汇总对比

 总结一下:

1、WebView 中调用 GoogleDocs
      这个方案要翻墙!!!

2、调起第三方支持 PDF 阅读的应用
      建议使用这种方法,扩展性兼容性强,可以扩展为支持其他的文件格式。但是如果用户手机没有安装PDF的应用,就比较尴尬了。

3、集成第三方 PDF SDK,在 Native 页面中阅读
      第三方包很大,APK体积会增大20M左右,不介意APK体积的可以采用。

4、将 PDF 文件转换成 HTML 或者图片等格式文件
      这种方案是比较low,但是能解决部分问题

5、集成第三方JS:pdf.js
     这种方案有两种方式集成:服务端和客户端,因为准备在android端实现所以介绍客户端集成的方案。
客户端集成也有两种方式,

①将pdf.js和相关的文件全部下载下来并拷贝的工程中的assets目录。pdf.js和相关文件体积也比较大(5M左右),同样会增加APK体积,但是这种方式更快,全部都是本地资源,不需要每次都联网加载pdf.js文件。

②就是使用CDN的方式。在asset目录想编写html文件和js文件,加载网络中的pdf.js的相关资源。但是相对第一中方法比较慢,如果而且文件过大,会报错。具体实现参考文章 Android中显示PDF的问题解决(安卓端使用pdf.js CDN模式)

 

我使用的是集成第三方的pdf.js,并且把所有资源下载到本地。

核心方法

1、pdf.js资源到android项目的asset目录 下载地址 http://mozilla.github.io/pdf.js/getting_started/#download

2、使用webview加载viewer.html界面

mWebView.loadUrl(file:///android_asset/pdf/web/viewer.html?file=PDFURl)

(其中PDFURL为pdf文件路径,可以是网络路径也可以是本地文件)

 超级简单!!

 

但是实际操作中遇到很多的问题

1、webView 打失败,报错 unexpected server response (0) while retrieving PDF

webview的权限设置有问题,需要设置:

webSettings.setJavaScriptEnabled(true);//支持js
webSettings.setAllowFileAccess(true);;//否允许访问文件,默认允许访问
webSettings.setAllowFileAccessFromFileURLs(true);//一个文件被允许访问其他文件中的内容
webSettings.setAllowUniversalAccessFromFileURLs(true);//可以是否访问任何原始起点内容

2、打开失败, file origin does not match viewer's

处理方法:需要在web/viewer.js(1793行)中注释的代码如下:

  // if (origin !== viewerOrigin && protocol !== 'blob:') {
      //   throw new Error('file origin does not match viewer\'s');
      // }

3、低版本android手机(5.0)打开失败,

检查之后发现是低版本android浏览器不支持es6语法。

最简单的处理方法,下载es5版本的pdf.js。但是这个版本比es6版本大,有11M

在网上有文章提到 4.4及以下版本,有兼容问题,需要使用低版本的pdf.js。我们项目不支持4.4及以下版本,所有没有测试。处理方法是判断android系统版本, 4.4及以下版本使用低版本的pdf.js(文章使用的1.4版本的),高版本系统,使用当前最新的pdf.js。

 

4、屏蔽下载按钮

实现使用中发现,工具栏用些功能在android手机上是不能使用的,比如下载、打印。

解决方案:隐藏工具栏中的按钮,web/viewer.html找到 id="secondaryDownload",在button标签添加 style="display:none"。

注意,在文件中还有id="download"的按钮,隐藏该按钮并没有使界面中下载按钮消失

猜你喜欢

转载自blog.csdn.net/bihansheng2010/article/details/105988512