Android加载PDF方案(pdf.js,支持缩放)

本文介绍了Android平台下利用Mozilla的PDF.js库实现PDF预览的方法,包括集成步骤和解决跨域、缩放问题的技巧。在Android WebView中,通过加载PDF.js,可以支持PDF的在线和本地预览,并实现缩放操作。
摘要由CSDN通过智能技术生成

都知道,Android本身的webview是不支持pdf加载的(比不上iOS的webview,谁让人家NB呢),因此通过连接Google的一个服务器转换成功后返回给WebView显示。但是,但是,但是呢,大家都懂的,天朝和Google之间有一道高高的墙。方法还是贴出来,作为国际化APP的一种方案。

mWebView.loadUrl("http://docs.google.com/gview?embedded=true&url="+ pdfUrl);

所以得借助第三方的库来实现,这里推荐几个第三方的库:

  • Github上有一个Java开源项目 https://github.com/barteksc/AndroidPdfViewer ,
    这个库的大致原理,是内置了一个PDF解析器,以流的方式将网络PDF从网上Down下来,然后再以流的方式将其还原成PDF展示出来(具体细节没关注)。亲测中,这个库每次进入webview页面都会解析加载一遍PDF,如果PDF过大,费时无缓存不说,最致命的问题乃是,

    APK包体积会瞬间增大15M左右,
    具体原因不明,估计应该是内置PDF解析器的问题。于是,此方法被我抛弃了。

  • 使用Moliza开源的Pdf.js

    这个JS类库也是很强大的,配合原生的WebView使用,支持预览,缩放,翻页的功能,实现效果和WKWebView没差。同样也有体积问题,全部放到本地apk的话包大小差不多会增加5M左右。但相比上一种方式还是轻量一些:

  • PDFium:Google 和 Foxit 合作开源的 Foxit 的 PDF 源码,作为 Chrome 浏览器的 PDF 渲染引擎组件,当然这是 C/C++ 实现的;
  • PdfiumAndroid:mshockwave 基于 PDFium 基础上适配 Android 平台的函数库;
  • AndroidPdfViewer:barteksc 基于 PdfiumAndroid 基础上实现的一个 PDF 阅读 Demo,支持常见的手势,缩放,双击等效果。
Hammer.js是一个用于处理触摸手势的JavaScript库,它提供了丰富的手势事件和手势识别功能。而pdf.js是Mozilla开发的一个用于在Web上显示PDF文件的JavaScript库。 要在使用Hammer.js实现手势缩放pdf.js的功能,你可以按照以下步骤进行操作: 1. 引入Hammer.js和pdf.js的库文件到你的HTML页面中。 2. 创建一个用于显示PDF文件的容器元素,例如一个div元素。 3. 使用pdf.js加载并显示PDF文件到容器元素中。 4. 初始化Hammer.js,并将其绑定到PDF容器元素上。 5. 监听Hammer.js的手势事件,例如pinch(缩放)事件。 6. 在手势事件的回调函数中,根据手势的缩放比例来调整PDF的显示大小。 下面是一个简单的示例代码: ```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Hammer.js手势缩放PDF.js</title> <script src="path/to/hammer.js"></script> <script src="path/to/pdf.js"></script> </head> <body> <div id="pdfContainer"></div> <script> // 加载并显示PDF文件 pdfjsLib.getDocument('path/to/pdf_file.pdf').promise.then(function(pdf) { pdf.getPage(1).then(function(page) { var canvas = document.createElement('canvas'); var context = canvas.getContext('2d'); var viewport = page.getViewport({ scale: 1 }); canvas.width = viewport.width; canvas.height = viewport.height; page.render({ canvasContext: context, viewport: viewport }); document.getElementById('pdfContainer').appendChild(canvas); }); }); // 初始化Hammer.js并绑定到PDF容器元素 var pdfContainer = document.getElementById('pdfContainer'); var hammer = new Hammer(pdfContainer); // 监听pinch(缩放)事件 hammer.on('pinch', function(event) { var scale = event.scale; // 获取缩放比例 // 根据缩放比例调整PDF的显示大小 var canvas = document.querySelector('#pdfContainer canvas'); var context = canvas.getContext('2d'); var viewport = page.getViewport({ scale: scale }); canvas.width = viewport.width; canvas.height = viewport.height; page.render({ canvasContext: context, viewport: viewport }); }); </script> </body> </html> ``` 希望以上代码能帮助到你实现Hammer.js手势缩放pdf.js的功能。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值