Android使用js方案实现在线浏览pdf文档

由于公司在项目中新增一个开发票的功能,而从第三方返回的数据(文档所在服务器地址,即一个url)来看,既有图片格式,也有PDF格式,因此需要在项目中实现查看PDF文档的功能。
从目前的实现方案来看,分别有以下几种:
一、先将远程服务器的pdf文档下载到本地,然后在本地中进行操作,但是考虑到这样做体验不大好,因此排除了;
二、使用第三方库的实现:https://github.com/barteksc/AndroidPdfViewer,但是使用该库,一下子项目会增大16MB左右,至于原因,文档中有解释,感兴趣的童鞋可以去看看;
三、使用webview的方式配合JS实现,目前网上成熟的方案Mozilla(火狐)的pdf.js,这种方式也可以浏览本地pdf文档:https://github.com/mozilla/pdf.js。因此,这篇文章讲的就是怎么把这种方案集成到android项目中。

1、到Mozilla pdf.js的官网(http://mozilla.github.io/pdf.js/getting_started/#download)下载最新的稳定版本

q.png

2、解压下载后的压缩文件,将解压后的文件夹整份粘贴到项目中的asset文件夹下(记得解压后改成一个合法的名称)

5H8HZ`YN4)2D61JFC0$U}GA.png

3、在所要展示pdf文档的页面对web进行代码配置

    WebSettings settings = pdfViewerWeb.getSettings();
    settings.setSavePassword(false);
    settings.setJavaScriptEnabled(true);
    settings.setAllowFileAccessFromFileURLs(true);
    settings.setAllowUniversalAccessFromFileURLs(true);
    settings.setBuiltInZoomControls(true);

    pdfViewerWeb.setWebViewClient(new WebViewClient() {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return true;
        }
    });
    pdfViewerWeb.setWebChromeClient(new WebChromeClient());

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {//api >= 19
        pdfViewerWeb.loadUrl("file:///android_asset/pdfjs/web/viewer.html?file=" + docPath);
    } else {
        if (!TextUtils.isEmpty(docPath)) {
            byte[] bytes = null;
            try {// 获取以字符编码为utf-8的字符
                bytes = docPath.getBytes("UTF-8");
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
            if (bytes != null) {
                docPath = new BASE64Encoder().encode(bytes);// BASE64转码
            }
        }
        pdfViewerWeb.loadUrl("file:///android_asset/pdfjs_compatibility/web/viewer.html?file=" + docPath);
    }

其中,pdfViewWeb是webview对象,docPath则是远程服务器上的pdf文档地址。

需要对上段代码说明的是,我在手机上试验了下,最新版本的pdf.js在android4.3以上显示都是正常的,在4.3的系统上(android4.3以下的系统我没测试)则无法正常显示,因此我做了兼容,android4.3及以下的系统都是用pdf.js v1.4.20的版本,添加过程也和最新版本(v1.9.426)一样,进一步说明的是,这样做以后,打出来的apk大小也增大了4MB多左右。

资源下载地址:http://download.csdn.net/download/j236027367/10049937

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 由于公司在项目中新增一个开发票的功能,而从第三方返回的数据(文档所在服务器地址,即一个url)来看,既有图片格式,...
    洛莫阅读 1,087评论 0 0
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,929评论 25 708
  • 今天感觉自己非常焦躁,坐立不安。安排的学习计划也没有完成,原因是一直想到孩子今天就要开始断奶了。说到断奶,其实对每...
    经典_cj阅读 205评论 1 1
  • 据说你是2016年后六百多万二宝大军中的一员,但是亲爱的,对于我而言:你是我的唯一,是我的百分之百!从你诞生的第一...
    赵国兴阅读 532评论 0 5
  • 早上好!#幸福实修#~每天进步1%#幸福实修10班@吕敏一富阳 20170819(25/30) 【幸福三朵玫瑰】 ...
    嘟嘟妈妈2727阅读 155评论 3 0