Android 在线预览PDF

目录

方法一:assets文件下创建 pdf.thml和pdf.js

 方法二:新的SDK


在网上找了很久,看到的不是不显示就是要先下载再去打开。

最后,功夫不负有心人,终于找到了两个解决方法。

方法一:assets文件下创建 pdf.thml和pdf.js

pdf.html 文件内容为:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width,initial-scale=1.0,maximum-scale=4.0,user-scalable=yes"/>
    <title>PDF查看</title>
    <style type="text/css">
        canvas {
            width: 100%;
            height: 100%;
            border: 1px solid black;
        }

    </style>
    <script src="https://unpkg.com/pdfjs-dist@2.3.200/build/pdf.min.js"></script>
    <script type="text/javascript" src="pdf.js"></script>
</head>
<body>
</body>
</html>

pdf.js 文件内容为:

var url = location.search.substring(1);
pdfjsLib.cMapUrl = 'https://unpkg.com/pdfjs-dist@2.3.200/cmaps/';
pdfjsLib.cMapPacked = true;
var pdfDoc = null;
function createPage() {
    var div = document.createElement("canvas");
    document.body.appendChild(div);
    return div;
}
function renderPage(num) {
    pdfDoc.getPage(num).then(function (page) {
        var viewport = page.getViewport({scale:2.0});
        var canvas = createPage();
        var ctx = canvas.getContext('2d');
        canvas.height = viewport.height;
        canvas.width = viewport.width;
        page.render({
            canvasContext: ctx,
            viewport: viewport
        });
    });
}
pdfjsLib.getDocument(url).promise.then(function (pdf) {
    pdfDoc = pdf;
    for (var i = 1; i <= pdfDoc.numPages; i++) {
        renderPage(i)
    }
});

我们在代码里使用方法:

//此方法可以在webview中打开链接而不会跳转到外部浏览器
                webView.setWebViewClient(new WebViewClient());
                //此方法可以启用html5页面的javascript
                webView.getSettings().setJavaScriptEnabled(true);
                webView.getSettings().setGeolocationEnabled(true);
                //自适应屏幕
                webView.getSettings().setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);
                webView.getSettings().setLoadWithOverviewMode(true);
                //设置可以支持缩放
                webView.getSettings().setSupportZoom(true);
                webView.getSettings().setUseWideViewPort(true);
                webView.getSettings().setBuiltInZoomControls(true);
                webView.getSettings().setDisplayZoomControls(false);
                webView.getSettings().setAllowFileAccess(true);
                webView.getSettings().setAllowFileAccessFromFileURLs(true);
                webView.getSettings().setAllowUniversalAccessFromFileURLs(true);
                webView.loadUrl(url);

最后,在测试的时候,发现这样去访问跨域的文件就不行;看了看前端同事的操作

突然去试着模仿这样写了写,发现是可行的

先把网络路径用  Base64进行编码 进行编码,再用 encodeURIComponent 进行编码。最后在加载的时候这样

//网址前面的部分是 文件预览的
webView.loadUrl("http://127.0.0.1:8012/onlinePreview?url=" + 转码后的地址);

 方法二:新的SDK

上面的方法可能在使用过程中有不便之处,后面发现了一个新的SDK,可以直接使用

首先,添加依赖

implementation 'com.wdeo3601:pdf-view:1.0.4'

注意:添加该依赖后,若要正常运行,所有module的minSdkVersion不可小于21,即 android 5.0

xml页面布局

<com.wdeo3601.pdfview.PDFView 
    android:id="@+id/pdfView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

activity中使用:

// 设置当前显示页的前后缓存个数,效果类似 ViewPager 的这个属性
pdfView.setOffscreenPageLimit(2)
// 是否支持缩放
pdfView.isCanZoom(true)
// 设置最大缩放倍数,最大支持20倍
pdfView.setMaxScale(10f)
// 从本地文件打开 pdf
pdfView.showPdfFromPath(filePath)
// 从网络打开 pdf
//pdfView.showPdfFromUrl("url")

至此,就可以加载PDF了

个人感觉如果只需要加PDF,方法二就可以直接使用了。如果还需要显示其它类型文件,建议使用方法一

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老杜_d

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值