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"的按钮,隐藏该按钮并没有使界面中下载按钮消失

5、4.4不支持问题

android 4.4 报错,

使用低版本的psdjs

pdfjs-1.9.426下载地址   https://pan.baidu.com/s/1wW6P-fdHpiEHD_zME0pIXQ

这个亲测可用。

但是相关的功能比新版的要少一些

android项目中在webview中打开pdf相关推荐

  1. android 清除cookie,Android 获取和清除 WebView 中的 Cookie

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 项目中如果用到了 WebView,那就免不了跟 Cookie 打交道. 比如,你时常需要判断用户的登录状态,如果用户未登 ...

  2. Android使用Chrome调试webview中的H5界面

    前言:我们的项目是使用的webview加载H5的应用类型,最近框架升级后项目出现问题.通过chrome进行调试,发现每次都忘记使用步骤.今天记录一下! 下面是调试步骤: 1.电脑下载的Chrom浏览器 ...

  3. Android通过WebView在线打开PDF文件(文中提供源码下载)

    这个是通过js解析,然后在webview中加载PDF文件,所以内库很小也就2兆多,体验也不错,不像Android别的第三方内库文件都很大,例如PDFview,MuPDF等,一个内库加进去,安装包要增加 ...

  4. Android安全开发之WebView中的地雷

    0X01 About WebView 在Android开发中,经常会使用WebView来实现WEB页面的展示,在Activiry中启动自己的浏览器,或者简单的展示一些在线内容等.WebView功能强大 ...

  5. Android安全开发之WebView中的地雷 1

    0X01 About WebView 在Android开发中,经常会使用WebView来实现WEB页面的展示,在Activiry中启动自己的浏览器,或者简单的展示一些在线内容等.WebView功能强大 ...

  6. Android实战场景 - 保存WebView中的图片到相册

    去年同事写了一个 "在H5中保存图片到相册" 的功能,虽然有大致实现思路,实现起来也没问题,但是感觉同事考虑问题的很周全,当时候就想着去学习一下,但是项目太赶没顾得上,索性现在有时 ...

  7. android默认视频播放器,WebView不打开android默认视频播放器?

    当我在我的android设备的默认网页浏览器上查看this page并点击第一个视频时,它会触发我设备的默认视频播放器.它加载和播放.WebView不打开android默认视频播放器? 但是,当我在我 ...

  8. Android变量longpress,Android:在自定义WebView中从onLongPress打开ContextMenu

    我目前正在尝试获取一个自定义WebView,当它被按下较长时间时会显示一个ContextMenu.由于默认WebView类仅在链接为longPressed时显示ContextMenu,因此我编写了自己 ...

  9. Flutter中使用WebView内打开scheme链接 调用其他程序

    项目场景: 最近在写一个 领淘宝优惠劵的 页面, 逻辑是 点击商品后, 在内部的WebView 显示,显示页面会自动打开scheme链接来尝试启动 淘宝app, 问题描述: 因为flutter没有自带 ...

最新文章

  1. phpstudy php日志,phpstudy开启网站Apache日志并且按照日期划分创建
  2. Flink的主要特点及与Spark的对比
  3. Chrome开发者工具Element style里的Computed标签页
  4. Insus Binary Utility
  5. JavaScript高级特征之面向对象笔记
  6. 全能终端神器 --- MobaXterm 、开启 linux 远程桌面
  7. java组合框的事件有哪些_博为峰Java技术文章 ——JavaSE Swing列表框选取事件的处理...
  8. c++文件流读取一行_「软帝学院」Java挑战者专栏:IO流详解2
  9. Mybatis源码分析之(四)mapper访问数据库的底层原理(代理方法中具体访问数据库的细节)
  10. linux下git的使用
  11. 双十一图书大数据:金庸第1,Python第2,学霸们都买了这些书
  12. sql 转置_SQL 如何实现动态的行列转置
  13. 浅谈c语言函数调用指针
  14. 小米9se刷机,miui12.5.1降级miui11.0.5,救砖,magisk面具,viper音效-刷红米6
  15. PLC PID调试总结
  16. MEMS mic之Amic(一)
  17. 【分层实验框架】阿里妈妈大规模在线分层实验实践
  18. C语言猜数字游戏实现
  19. 学习笔记-频率域滤波(2)-取样函数
  20. 小酌重构系列[17]——提取工厂类

热门文章

  1. C语言:指针三(线性表的存储结构)
  2. java 虚函数表_虚函数表(vtable/virtual table/virtual method table)
  3. Yolov5 最简推理代码
  4. mysql数据库加密存储过程_数据库系统(六)---MySQL语句及存储过程
  5. 计算机毕业设计Java班费收支管理系统(源码+系统+mysql数据库+lw文档)
  6. 【科学有故事】做节目时的Python分析
  7. The Willpower Instinct
  8. 用计算机亩换算成平方,公倾,平方米,英亩,市亩,平方公里等常见面积单位转换在线计算器_三贝计算网_23bei.com...
  9. pandas常用命令
  10. 小学数学第3册计算机教案,小学数学教案,小学数学教学设计