最近公司开发的应用需要使用webview显示PDF格式的合同文件,因为后台返回的是一个PDF文件的的下载路径,用浏览器是可以直接打开查看的。起初我以为webview应该也能直接解析查看,毕竟强大如Google,怎么会连这种问题都没有解决呢,然而我错了,Android的webview并不能自动解析PDF文件。然后就在网络上各种搜索,大致都提供了两种解决方案。
解决方案一:利用设备自带浏览器打开pdf
1.mWebView.getSettings().setJavaScriptEnabled(true);
2.mWebView.getSettings().setSupportZoom(true);
3.mWebView.getSettings().setDomStorageEnabled(true);
4.mWebView.getSettings().setAllowFileAccess(true);
5.mWebView.getSettings().setPluginsEnabled(true);
6.mWebView.getSettings().setUseWideViewPort(true);
7.mWebView.getSettings().setBuiltInZoomControls(true);
8.mWebView.requestFocus();
9.mWebView.getSettings().setLoadWithOverviewMode(true);
10.mWebView.getSettings().setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN);
11.String pdfUrl = "http:xxx.pdf";
12.mWebView.loadUrl("http://docs.google.com/gview?embedded=true&url=" +pdfUrl);
解决方案二:利用Google服务解析后再在mWebView中打开pdf
1.mWebView.getSettings().setJavaScriptEnabled(true);
2.mWebView.getSettings().setSupportZoom(true);
3.mWebView.getSettings().setDomStorageEnabled(true);
4.mWebView.getSettings().setAllowFileAccess(true);
5.mWebView.getSettings().setPluginsEnabled(true);
6.mWebView.getSettings().setUseWideViewPort(true);
7.mWebView.getSettings().setBuiltInZoomControls(true);
8.mWebView.requestFocus(); www.2cto.com
9.mWebView.getSettings().setLoadWithOverviewMode(true);
10.mWebView.getSettings().setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN);
11.String pdfUrl = "http://xxx.pdf";
12.String data = "<iframe src='http://docs.google.com/gview?embedded=true&url="+pdfUrl+"'"+" width='100%' height='100%' s tyle='border: none;'></iframe>";
13.mWebView.loadData(data, "text/html", "UTF-8");
以上两种方案尝试后都没有效果,最终不得不使用github第三方解析(android-pdfview),实现思路,将后台提供的PDF文件下载地址下载到本地sd卡中,解析后加载到webview中显示,当用户关闭当前活动页面时,删除相关文件。这个过程中,还有一个问题,就是app后台的PDF文件的下载地址是内网的,所以需要app后台将网站的PDF文件下载后以文件流的形式返回给app客户端,当然一样是下载文件。
第三方解析工具github地址:https://github.com/JoanZapata/android-pdfview.git