android APP内显示PDF文件

https://blog.csdn.net/u013605159/article/details/76886522


最近公司要做一个小功能,显示在APP内部显示pdf文件,刚接到任务感觉非常简单的一小功能,做的时候才发现在真的很不好实现。 因为android的webView与iOS的UIWebView不一样,不能够直接支持在线观看pdf文件,虽然谷歌官方给了个“http//docs.google.com/gviewembedded=true&url=”这样的解决方案,但是需要翻墙才能看。所以这种方法不可行。 
经过调研发现目前只有三种方法接入到APP里面是没有问题的如下: 
1.是接入第三方的jar包(如android-pdfview、AndroidPdfViewer 、PdfViewPager、MuPdf等)这里面接入到项目里增加APP体积最小的就属android-pdfview了,但是也是增加了4m左右,这还是我只加了arm和arm-v7a,但是这个jar包有个致命的大坑,就是不能播放带有超链接的pdf文件,会报类型转换错误的crash,这个是我项目快要上线才发现的问题,而且作者也停更了,网上没有好的解决方法,只能把源码导入到项目里在报错的位置作相应的处理才能解决,而且可能会导致pdf显示不出来。别的jar包都因为实在是太大了,考虑到APP的体积都放弃了。 
2. 是我偶尔发现的官方的simple PdfRendererBasic这个主要是把pdf文件读出来把每一页ppt转成图片显示出来,不过这个每次只能显示一张,虽然可以做一个下一页按钮,但是实在是跟我的需求不符就也放弃了。 
3. 接入pdf.js。这是个开源的把pdf转换成图片的工具,在网上有很多资料,但是大部分都是服务器解决的,官网上的例子也大部分都是用服务器解决的例子,android端可能用到的人很少,也没有详细的教程,其实很简单,主要是把pdf.js和pdf.worker.js这两个js文件考到你项目里的assets文件里面,然后在你的项目里直接用webview调用就好了。

final WebView webView = (WebView) findViewById(R.id.web_view);

        WebSettings settings = webView.getSettings();
        // 开启 javascript 功能;原因:站点采用了 javascript
        settings.setJavaScriptEnabled(true);
        // 这句解决本地跨域问题,如果你的 PDF 文件在站点里,是不需要的,但是,我们一般情况是加载站点外部 PDF 文件
        settings.setAllowFileAccessFromFileURLs(true);

        // demo code
        /*
         * "file:///android_asset/index.html?pdf="这里是固定的,指的是你项目里asset文件夹
         * 取决于开发者自己目录名称
         * 参数:pdf = 这里是 PDF 文件路径
         * 这个路径有两种写法一种是file:///sdcard/+“文件路径” 
         * 第二种就是直接在代码里获取sd卡路径+“文件路径”
         * 这里是直接在webview中加载JS文件。
         */
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                webView.loadUrl("file:///android_asset/index.html?pdf=" + file.toString());
            }
        });
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

android基于pdf.js内部显示PDF文件demo


猜你喜欢

转载自blog.csdn.net/leansmall/article/details/80466843