WebView展示pdf
WebView 使用总结
WevView是Android平台上一种特殊的View,是基于webkit引擎的,展现web网页的一种控件。WebView的内部实现是采用渲染引擎展示View的内容,提供了网页的前进、后退、缩放和搜索等功能,在android4.4之后直接采用chrom当做引擎。
####加载html的四种方式
webView.loadUrl("http://139.196.35.30:8080/OkHttpTest/apppackage/test.html");//加载urlwebView.loadUrl("file:///android_asset/test.html");//加载asset文件夹下html//方式3:加载手机sdcard上的html页面
webView.loadUrl("content://com.ansen.webview/sdcard/test.html");//方式4 使用webview显示html代码
webView.loadDataWithBaseURL(null,"<html><head><title> 欢迎您 </title></head>" +"<body><h2>使用webview显示 html代码</h2></body></html>", "text/html" , "utf-8", null);
####WebSettings类
主要是一些设置相关的,例如设置缓存,缩放等,具体设置入下
/ 通过设置WebView的settings来实现WebSettings settings = getSettings();settings.setJavaScriptEnabled(true);settings.setPluginState(WebSettings.PluginState.ON);settings.setAllowContentAccess(true);settings.setAllowFileAccess(true);settings.setAllowFileAccessFromFileURLs(true);settings.setSupportZoom(true);//设置出现缩放工具settings.setBuiltInZoomControls(true);//设定缩放控件隐藏settings.setDisplayZoomControls(false);/*** 简单来说,该项设置决定了JavaScript能否访问来自于任何源的文件标识的URL。* 比如我们把PDF.js放在本地assets里,然后通过一个URL跳转访问来自于任何URL的PDF,所以这里我们需要将其设置为true。* 而一般情况下,为了安全起见,是需要将其设置为false的。*/settings.setAllowUniversalAccessFromFileURLs(true);// 1. 设置缓存路径 ------ application 缓存String cacheDirPath = mContext.getFilesDir().getAbsolutePath() + "cache/";settings.setAppCachePath(cacheDirPath);// 2. 设置缓存大小settings.setAppCacheMaxSize(PlayerConstants.WEBVIEW_CACHE_SIZE);// 3. 开启Application Cache存储机制settings.setAppCacheEnabled(true);// 开启DOM storagesettings.setDomStorageEnabled(true);// 只需设置支持JS就自动打开IndexedDB存储机制settings.setJavaScriptEnabled(true);//根据网络联网情况设置不同的缓存模式settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
####WebViewClient与WebChromeClient区别
在使用WebView的时候基本都会用到这个类,下面说一下他们的主要区别。
#####WebViewClient主要帮助WebView处理各种通知和请求事件,有一下常用方法:
-onPageFinished 页面请求完成。
-onPageState 页面开始加载。
-shouldOverrideUrlLoading 拦截url。
-onRecoveredError 访问错误时候的回调。
#####WebChromeClient主要是与js相关操作的方法。
-onJsAlert WebView不支持js的alert的弹框,需要自己监听然后处理。
-onReceivedTitle 获取网页标题。
-onReceivedIcon 获取网页的icon。
-onProgressChanged 加载进度回调。
####Android调用js
javascript:再加上js里面的方法,具体实例如下代码:
mVebView.loadUrl("javascript:renderPage("+mCount+","+38+")");
其中renderPage是js代码中的方法,下面贴出js代码如下:
var url = location.search.substring(1);
PDFJS.cMapUrl = 'https://unpkg.com/pdfjs-dist@1.9.426/cmaps/';
PDFJS.cMapPacked = true;
var pdfDoc = null;
var canvas = null;
function createPage() {var div = document.createElement("canvas");document.body.appendChild(div);return div;
}function renderPage(num,aspectRatio) {if(num > pdfDoc.numPages){num = num % pdfDoc.numPages;}pdfDoc.getPage(num).then(function (page) {var viewport = page.getViewport(2.0);if(canvas == null){canvas = createPage();}var ctx = canvas.getContext('2d');canvas.height = viewport.height;canvas.width = viewport.width;page.render({canvasContext: ctx,viewport: viewport});document.getElementsByTagName('canvas')[0].style.width=aspectRatio+'%';});
}PDFJS.getDocument(url).then(function (pdf) {pdfDoc = pdf;});
####js调用Android
由于webView存在注入的危险,所以在api17修复这个bug(可以通过java的反射机制可以拿到Runtime对象的引用,并可以调用exec执行命令。),必须在android的方法上面添加@JavaScriptInterface注解,并且在webView调用addJavaScriptInterface()方法,其中有两个参数,第一个参数数你添加@JavaScriptInterface注解方法的类的实例,第二个参数是实例的别名,在js中直接别名.方法名即可调用android中的方法了,示例如下:
Android代码,重点就是最后一句话
public void initView() {WebSettings webSettings = mVebView.getSettings();webSettings.setJavaScriptEnabled(true);webSettings.setPluginState(WebSettings.PluginState.ON);webSettings.setAllowContentAccess(true);webSettings.setAllowFileAccess(true);webSettings.setAllowFileAccessFromFileURLs(true);// 1. 设置缓存路径 ------ application 缓存String cacheDirPath = getFilesDir().getAbsolutePath() + "cache/";webSettings.setAppCachePath(cacheDirPath);// 2. 设置缓存大小webSettings.setAppCacheMaxSize(800*1024*1024);// 3. 开启Application Cache存储机制webSettings.setAppCacheEnabled(true);// 开启DOM storagewebSettings.setDomStorageEnabled(true);webSettings.setSupportZoom(true);//设置出现缩放工具webSettings.setBuiltInZoomControls(true);//设定缩放控件隐藏webSettings.setDisplayZoomControls(false);// 只需设置支持JS就自动打开IndexedDB存储机制webSettings.setJavaScriptEnabled(true);//根据网络联网情况设置不同的缓存模式webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);/*** 简单来说,该项设置决定了JavaScript能否访问来自于任何源的文件标识的URL。* 比如我们把PDF.js放在本地assets里,然后通过一个URL跳转访问来自于任何URL的PDF,所以这里我们需要将其设置为true。* 而一般情况下,为了安全起见,是需要将其设置为false的。*/webSettings.setAllowUniversalAccessFromFileURLs(true);mVebView.addJavascriptInterface(this,"oohlink");}@JavascriptInterfacepublic void jsCallAndroid(){Toast.makeText(this, "js调用android方法", Toast.LENGTH_SHORT).show();}
js代码如下,同样重点也在代码的最后一句
var url = location.search.substring(1);
PDFJS.cMapUrl = 'https://unpkg.com/pdfjs-dist@1.9.426/cmaps/';
PDFJS.cMapPacked = true;
var pdfDoc = null;
var canvas = null;
function createPage() {var div = document.createElement("canvas");document.body.appendChild(div);return div;
}function renderPage(num,aspectRatio) {if(num > pdfDoc.numPages){num = num % pdfDoc.numPages;}pdfDoc.getPage(num).then(function (page) {var viewport = page.getViewport(2.0);if(canvas == null){canvas = createPage();}var ctx = canvas.getContext('2d');canvas.height = viewport.height;canvas.width = viewport.width;page.render({canvasContext: ctx,viewport: viewport});document.getElementsByTagName('canvas')[0].style.width=aspectRatio+'%';});
}PDFJS.getDocument(url).then(function (pdf) {pdfDoc = pdf;oohlink.jsCallAndroid();
});
WebView展示pdf相关推荐
- 29.Android展示PDF文件
转载请注明出处 http://blog.csdn.net/qq_31715429/article/details/51065730 本文出自:猴菇先生的博客 公司有个需求,展示pdf文件,之前是服务端 ...
- 使用HttpHandler解析并展示PDF文档内容
前言 如果我们想将服务端的PDF文档内容展示给客户端,往往会通过URL直接访问的方式.这样一来,PDF文档就会毫无保留的保存到客户端去,通过浏览器的PDF插件,客户端可以随意拷贝PDF的副本.(如下图 ...
- HttpHandler解析并展示PDF文档内容
2019独角兽企业重金招聘Python工程师标准>>> HttpHandler 解析并展示 PDF 文档内容 如果我们想将服务端的 PDF 文档内容展示给客户端,往往会通过 URL ...
- 在线展示pdf和word并且不能显示下载和打印按钮
在线展示pdf和word并且不能显示下载和打印按钮 一 下载功能: 因为html5给a标签新添加了一个属性download,这个属性可以直接实现下载文件的功能: 这样就实现点击a标签下载文件了(这里面 ...
- android webView显示PDF文件
最近公司开发的应用需要使用webview显示PDF格式的合同文件,因为后台返回的是一个PDF文件的的下载路径,用浏览器是可以直接打开查看的.起初我以为webview应该也能直接解析查看,毕竟强大如Go ...
- android 展示pdf文件
注:此方式展示pdf文件会增加apk大小3-4m左右 建议使用腾讯浏览服务-x5进行加载pdf文件(可扩展) X5内核初始化下载失败的解决方案 有道云笔记 1. 加入此依赖 implementatio ...
- 在html页面中展示pdf文件,实现在线阅读
参考文章:1.http://blog.csdn.net/broze/article/details/6743314 2.http://www.pdfobject.com/ ...
- 页面中展示PDF(转成Swf文件)
由于直接在页面上展示PDF会有编码困难及不安全等问题,所以想到先利用SWFTOOLS工具把PDF转成SWF格式的Flash文件然后在页面上利用ASP.NET自带的Flash播放器展示Flash文件,这 ...
- vue elementui下载文件和使用vue-pdf展示pdf文件
1.下载blob文件 //在请求中必须标明:responseType: 'blob'. 比如this.$axois({ method: 'get', url: '', responseType: 'b ...
最新文章
- Linux Shell特殊字符和控制字符大全
- display和show的区别
- html加载js文件失败,firefox/chrome动态设置script加载js文件失败
- icd植入是大手术吗_骨折手术植入了钢板,骨折痊愈后,需要取出钢板吗?
- zigbee的路由器能分配网络地址吗_家用无线路由器讲解
- c++冒泡排序的类模板的实现
- 八.nginx网站服务实践应用
- 解决 No utmpx entry. You must exec login from the lowest level shell.
- python中的json.loads_Python json模块dumps、loads操作示例
- risksystem_《环境风险评价系统(RiskSystem)》1.1版
- velocity语法教程
- C++ 代码整洁之道
- 45、backtrader的一些基本概念---佣金(commission)的设置
- 数字孪生--thingjs
- 【013】故宫博物院数字文物库-让文物随时可赏
- 有太多工作要做,传蚂蚁集团IPO可能推迟至2022年
- 《构建之法:现代软件工程》阅读提问
- 华硕ROG冰刃5评测
- Excel身份证号码判断男女性别:Excel函数不求人
- 关于FIN_WAIT1---TCP四次挥手的状态
热门文章
- 万圣节到了,吃饭?睡觉?打豆豆?
- otg烧写linux内核,OTG 接口烧写最小Linux的方法
- Morgan Stanley Sells Shanghai Tower
- 从数据保护到统一数据管理平台,爱数的数据之道又升级了!
- 计算机if函数and备注,excel2016表格IF公式叠加使用操作
- windows的dockerDesktopService在360杀毒后,无法启动的问题,
- CorelDRAW 服装设计视频教程-衬衫 T恤 外套 童装 裙子设计教程
- 一分钟区分splice,slice,split
- Timeline自建AudioPlayable脚本项目记录
- CD4541B定时器的使用方法