1.Office文档服务

Office的文档服务,直接在WebView中使用即可。

pdfUrl必须为http://或 https://形式,文档必须是WordExcel或PowerPoint文档

webView.loadUrl("http://view.officeapps.live.com/op/view.aspx?src=" + pdfUrl));//pdfUrl必须为http://或 https://形式,文档必须是WordExcel或PowerPoint文档

优点:无须翻墙,不增加体积。
缺点:只能访问链接且只能是word,excel,ppt这三种文件。

2.谷歌文档服务

webView.loadUrl("http://docs.google.com/gviewembedded=true&url=" + pdfUrl);

与1一样直接在WebView中使用即可,但是这种方式国内网络环境是无法访问的,需要翻墙。所以除非是特殊环境或者之需要在国外使用的App就不要考虑的了。

3.mozilla部署在github pages上的Viewer

webView.loadUrl("http://mozilla.github.io/pdf.js/web/viewer.html?file=" + pdfUrl);//pdfUrl只能是链接

优点:可以直接访问,不增加体积,界面美观。
缺点:不稳定,有时访问速度过慢。移动端的自带页面很多功能无法使用,会造成体验不好。

4.Android PdfViewer框架

经过博主实践,比较得出该框架是目前最流行,最稳定,速度最快的框架,也是使用框架的最优选择。
使用起来非常简单,可以直接访问GitHub主页查看使用方法:GitHub:https://github.com/barteksc/AndroidPdfViewer

优点:使用方便,稳定,速度快,可监听文件打开的各项事件。
缺点:App体积增大16M,只能打开本地pdf文件。

如果是体积较小的App不建议使用,如果是专业的阅读功能的App则可以使用。

5.PDF.js

使用步骤:

  1. 下载PDF.jshttp://mozilla.github.io/pdf.js/放到assets目录下
  2. 先把文件下载到本地
  3. 然后传入本地文件路径预览pdf:
webView.loadUrl("file:///android_asset/pdfjs/web/viewer.html?file=" + pdfUrl);//pdfUrl只能是本地文件路径

优点:速度快,稳定,界面美观。
缺点:体积增大5M,移动端的自带页面很多功能无法使用,会造成体验不好。

PDF.js本身是一个比较大的库,如果全部放到本地的话apk差不多会增大5m左右。所以我们可以考虑吧PDF.js部署到服务端或者使用cdn的方式。

6.自定义预览界面,PDF.js使用cdn的方式导入

源码:https://github.com/DeMonLiu623/DeMon-JS-PDF

使用步骤:

  1. 首先写一个预览的index.html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport"content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=no"/><title>Document</title><style type="text/css">canvas {width: 100%;height: 100%;border: 1px solid black;}</style><script src="https://unpkg.com/pdfjs-dist@1.9.426/build/pdf.min.js"></script><script type="text/javascript" src="index.js"></script>
</head>
<body>
</body>
</html>
  1. 实现预览index.js
var url = location.search.substring(1);PDFJS.cMapUrl = 'https://unpkg.com/pdfjs-dist@1.9.426/cmaps/';
PDFJS.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(2.0);var canvas = createPage();var ctx = canvas.getContext('2d');canvas.height = viewport.height;canvas.width = viewport.width;page.render({canvasContext: ctx,viewport: viewport});});
}PDFJS.getDocument(url).then(function (pdf) {pdfDoc = pdf;for (var i = 1; i <= pdfDoc.numPages; i++) {renderPage(i)}
});
  1. 将index.html,index.js放到assets目录下
  2. WebView加载html:
webView.loadUrl("file:///android_asset/index.html?" + pdfUrl);//pdfUrl可以是本地文件,也可以是网页链接

优点:访问速度快,可以打开网页链接和本地文件。
缺点:功能简单,需要比较强的前端知识。

WebView配置

WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setAllowFileAccess(true);
webSettings.setAllowFileAccessFromFileURLs(true);
webSettings.setAllowUniversalAccessFromFileURLs(true);
webSettings.setSupportZoom(true);   //缩放开关,设置此属性,仅支持双击缩放,不支持触摸缩放
webSettings.setBuiltInZoomControls(true);  //设置是否可缩放,会出现缩放工具(若为true则上面的设值也默认为true)
webSettings.setDisplayZoomControls(false);  //隐藏缩放工具

若WebView想要缩放加载的html代码中,必须去掉:

<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />

参考

https://www.jb51.net/article/136364.htm
https://www.cnblogs.com/jdhdevelop/p/6373272.html

Android 实现PDF预览的全面解析相关推荐

  1. Android实现PDF预览打印

    最近在做一个项目,需要用到android手机连接打印机进行打印的功能,目前在网上找到的教程介绍的都是蓝牙连接热敏打印机(pos机大小的打印机)和蓝牙打印机,如果连接日常所见到的网络打印机,进行打印,很 ...

  2. Android PDF原生实现 PDF阅读、PDF手势伸缩、PDF目录、PDF预览缩略图 PDF方案选择 google doc android-pdfview mupdf pdf.js x5

    ##1.背景 近期,公司希望实现安卓原生端的PDF功能,要求:高效.实用. 经过两天的调研.编码,实现了一个简单Demo,如上图所示. 关于安卓原生端的PDF功能实现,技术点还是很多的,为了咱们安卓开 ...

  3. 实现微信小程序和手机app(基于vue)PDF预览功能

    引言:最近在做微信小程序和手机端app开发(基于vue),实现一个pdf预览功能. 需求:点击pdf列表,跳转到预览pdf页面,页面上强制阅读10s后,显示一个按钮返回,更新阅读状态: 要求:不能调用 ...

  4. pdfh5.js 基于pdf.js和jQuery,web/h5/移动端PDF预览手势缩放插件。

    pdfh5.js 基于pdf.js和jQuery,web/h5/移动端PDF预览手势缩放插件. 注意:本地绝对路径地址不能加载,跨域问题用代理或者服务端解决. svg模式渲染存在缺陷,只能渲染普通pd ...

  5. PDF 预览和下载你是怎么实现的?

    在开发过程中要求对 PDF 类型的发票提供 预览 和 下载 功能,**PDF** 类型文件的来源又包括 H5 移动端 和 **PC 端**,而针对这两个不同端的处理会有些许不同,下文会有所提及. 针对 ...

  6. 前端实现 PDF 预览的常见方案

    前端实现 PDF 预览的常见方案 由于在搭建个人博客时,想实现在线预览 pdf 格式的个人简历,经过查阅大致有三大类实现方案:本文共涉及以下 5 种实现方案,如下所示: 使用 HTML 标签 ifra ...

  7. pdf预览在vue项目中的使用兼容ie浏览器

    最近做项目有需求需要pdf在线预览并支持下载,而且还要兼容ie浏览器,之前又是使用过vue-pdf插件在chrome上没有问题但是在ie上不兼容.最后使用了pdf.Js这个原生库,虽然网上有许多使用教 ...

  8. Vue前端JavaScript实现PDF预览与图片预览

    Vue前端JavaScript实现PDF预览与图片预览 说明 PDF.JS 代码实现 预览测试 embed与iframe标签 `<embed>` `<iframe>` 浏览器预 ...

  9. Android Wear开发者预览版入门

    Android Wear开发者预览版包括工具和API,增强了应用程序通知功能,提供针对Android可穿戴设备的最佳用户体验. 利用Android Wear开发者预览,你可以: 在Android模拟器 ...

最新文章

  1. (转)软件测试的分类软件测试生命周期
  2. [bbk4966]第70集 第8章 -性能维护 01
  3. java网页爬虫xml_基于webmagic的java网页爬虫,抓取网页指定节点,然后使用dom4j分析xml数据...
  4. GridView中实现CheckBox的全选
  5. 738. 单调递增的数字(贪心算法)
  6. 闪退补丁_ArcGIS打开amp;闪退问题
  7. python理论知识选择题_python基础知识练习题(一)
  8. 随笔2010.01.25
  9. C#文件过滤器filter
  10. Eclipse maven构建springmvc项目
  11. 阿里海量大数据平台的运维智能化实践
  12. 开源demo| 你画我猜——让你的生活更有趣
  13. windows 7远程桌面和被远程连接电脑启动远程桌面服务
  14. TARA-Asset穷举
  15. iOS_数据库3_sqlite3基本操作
  16. python中bytearray函数_Python bytearray() 函数
  17. be [prove] a great boon to [for]
  18. java.lang.NumberFormatException For input string 错误及解决办法
  19. 机械臂控制C语言程序,ROS机械臂开发:MoveIt!编程
  20. SQL Server视频总结(一):SQL Server概述

热门文章

  1. 无法连接到ppa.launchpad.net(91.189.95.83)
  2. CSP考试笔记:C++篇(第四章、面向对象)(牛客网学习)
  3. java实验指导书答案_(Java实验指导书答案2.doc
  4. 加快网站访问速度——Yslow极限优化
  5. 访问非法内存 越界等
  6. 射影几何----过定点的直线求斜率之积的简单方法
  7. CreateFont函数为什么改变不了字体?该怎么解决
  8. Hexagon Binutils GNU 手册(19)
  9. CSS总结div中的内容垂直居中的四种方法
  10. 【Linux】TIME_WAIT的作用、影响、解决方法