最近在 手机上要显示 PDF 文件,在搜索引擎上找到了很多方案,大体上有以下几种:

  • 使用提供的在线服务,例如 Google 文档预览服务,mWebView.loadUrl(“http://docs.google.com/gview?embedded=true&url=”+ pdfUrl);
  • 使用 AndroidPdfViewer,这是一个 GitHub 上开源的库,除了体积大点别的都挺好, https://github.com/barteksc/AndroidPdfViewer
  • 使用 Moliza 开源的 Pdf.js 这个库是很强大的,配合 WebView ,可以支持预览,缩放,翻页等等功能
  • 使用 腾讯浏览服务 https://x5.tencent.com/

我是选择了 pdf.js 这个库,使用 WebView 配合 H5 页面,可以做到随意的自定义,并且体积很小,放在服务器的话就更小了。

  • 使用资源:https://github.com/mozilla/pdf.js
  • 版本 版本是 2.3.200

在这里记录下使用的过程也方便后来者。

考虑到网络不稳定的情况,所以我把 js 库下载下来了,不介意的可以直接使用网络库

  • https://www.jsdelivr.com/package/npm/pdfjs-dist
  • https://cdnjs.com/libraries/pdf.js
  • https://unpkg.com/pdfjs-dist/

刚开始使用时,直接使用提供的 API 创建 canvas ,每一页创建一个 canvas 然后排列下来,因为有其他的内容要显示。
开发测试的时候因为文件小,并且是在电脑上浏览的没有发现什么问题,在手机上测试的时候使用了一个稍微大点的文件,内存立马就爆了。
因为是在加载完成后,每页都创建一个 canvas 显示,没有做到逐页加载,也没有做任何循环使用和销毁的处理,内存就爆了。

在 pdf.js 的例子里看到了在手机上使用的例子,就改了改,它这个做到了循环使用 canvas,并且是逐页加载。
修改之后在手机上使用 32M 的文件轻松无压力。示例,传送门

简单写了个 Demo :https://github.com/skymxc/Example/tree/master/displaypdf

assets 目录是修改后的页面。

显示网络文件还是要下载到本地才可以,因为跨域访问的限制问题。

End

微信扫一扫,关注我的公众号

更多相关文章

  1. Android读取asserts和raw文件夹下的文件
  2. Android(安卓)TCP 文件客户端文件下载与服务器
  3. Android(安卓)Studio常用adb命令
  4. 【Android基础入门No.3】AndroidのListFragment
  5. Android中的界面去除标题和实现全屏的两种方法
  6. Android中关于Volley的使用(二)加载Json数据
  7. Android中BaseFragment封装多状态视图显示
  8. Android(安卓)NDK 异常 Error:No toolchains found in the NDK t
  9. Unity之调用AndroidWebView

随机推荐

  1. Android(安卓)Tab 控件详解及实例
  2. Android学习笔记之TabHost
  3. Android的MediaRecorder架构介绍
  4. Android快速开发02之仿京东底部Tab
  5. android studio ndk开发遇到的问题
  6. android Ant批打包学习(一):生成没有签名
  7. Android中的DownloadManager
  8. Android(安卓)Studio获取SHA1值
  9. ANDROID Porting系列三、Build Cookbook
  10. Android(安卓)中文 API (20) —— DatePick