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"的按钮,隐藏该按钮并没有使界面中下载按钮消失
5、4.4不支持问题
android 4.4 报错,
使用低版本的psdjs
pdfjs-1.9.426下载地址 https://pan.baidu.com/s/1wW6P-fdHpiEHD_zME0pIXQ
这个亲测可用。
但是相关的功能比新版的要少一些
android项目中在webview中打开pdf相关推荐
- android 清除cookie,Android 获取和清除 WebView 中的 Cookie
8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 项目中如果用到了 WebView,那就免不了跟 Cookie 打交道. 比如,你时常需要判断用户的登录状态,如果用户未登 ...
- Android使用Chrome调试webview中的H5界面
前言:我们的项目是使用的webview加载H5的应用类型,最近框架升级后项目出现问题.通过chrome进行调试,发现每次都忘记使用步骤.今天记录一下! 下面是调试步骤: 1.电脑下载的Chrom浏览器 ...
- Android通过WebView在线打开PDF文件(文中提供源码下载)
这个是通过js解析,然后在webview中加载PDF文件,所以内库很小也就2兆多,体验也不错,不像Android别的第三方内库文件都很大,例如PDFview,MuPDF等,一个内库加进去,安装包要增加 ...
- Android安全开发之WebView中的地雷
0X01 About WebView 在Android开发中,经常会使用WebView来实现WEB页面的展示,在Activiry中启动自己的浏览器,或者简单的展示一些在线内容等.WebView功能强大 ...
- Android安全开发之WebView中的地雷 1
0X01 About WebView 在Android开发中,经常会使用WebView来实现WEB页面的展示,在Activiry中启动自己的浏览器,或者简单的展示一些在线内容等.WebView功能强大 ...
- Android实战场景 - 保存WebView中的图片到相册
去年同事写了一个 "在H5中保存图片到相册" 的功能,虽然有大致实现思路,实现起来也没问题,但是感觉同事考虑问题的很周全,当时候就想着去学习一下,但是项目太赶没顾得上,索性现在有时 ...
- android默认视频播放器,WebView不打开android默认视频播放器?
当我在我的android设备的默认网页浏览器上查看this page并点击第一个视频时,它会触发我设备的默认视频播放器.它加载和播放.WebView不打开android默认视频播放器? 但是,当我在我 ...
- Android变量longpress,Android:在自定义WebView中从onLongPress打开ContextMenu
我目前正在尝试获取一个自定义WebView,当它被按下较长时间时会显示一个ContextMenu.由于默认WebView类仅在链接为longPressed时显示ContextMenu,因此我编写了自己 ...
- Flutter中使用WebView内打开scheme链接 调用其他程序
项目场景: 最近在写一个 领淘宝优惠劵的 页面, 逻辑是 点击商品后, 在内部的WebView 显示,显示页面会自动打开scheme链接来尝试启动 淘宝app, 问题描述: 因为flutter没有自带 ...
最新文章
- phpstudy php日志,phpstudy开启网站Apache日志并且按照日期划分创建
- Flink的主要特点及与Spark的对比
- Chrome开发者工具Element style里的Computed标签页
- Insus Binary Utility
- JavaScript高级特征之面向对象笔记
- 全能终端神器 --- MobaXterm 、开启 linux 远程桌面
- java组合框的事件有哪些_博为峰Java技术文章 ——JavaSE Swing列表框选取事件的处理...
- c++文件流读取一行_「软帝学院」Java挑战者专栏:IO流详解2
- Mybatis源码分析之(四)mapper访问数据库的底层原理(代理方法中具体访问数据库的细节)
- linux下git的使用
- 双十一图书大数据:金庸第1,Python第2,学霸们都买了这些书
- sql 转置_SQL 如何实现动态的行列转置
- 浅谈c语言函数调用指针
- 小米9se刷机,miui12.5.1降级miui11.0.5,救砖,magisk面具,viper音效-刷红米6
- PLC PID调试总结
- MEMS mic之Amic(一)
- 【分层实验框架】阿里妈妈大规模在线分层实验实践
- C语言猜数字游戏实现
- 学习笔记-频率域滤波(2)-取样函数
- 小酌重构系列[17]——提取工厂类
热门文章
- C语言:指针三(线性表的存储结构)
- java 虚函数表_虚函数表(vtable/virtual table/virtual method table)
- Yolov5 最简推理代码
- mysql数据库加密存储过程_数据库系统(六)---MySQL语句及存储过程
- 计算机毕业设计Java班费收支管理系统(源码+系统+mysql数据库+lw文档)
- 【科学有故事】做节目时的Python分析
- The Willpower Instinct
- 用计算机亩换算成平方,公倾,平方米,英亩,市亩,平方公里等常见面积单位转换在线计算器_三贝计算网_23bei.com...
- pandas常用命令
- 小学数学第3册计算机教案,小学数学教案,小学数学教学设计