在pc比较容易实现pdf在线浏览,但在H5手机移动端在线浏览pdf文件,同时支持手指缩放功能插件,这里推荐几个开源的pdf移动在线预览插件。
这里为网友推荐一下比较好用的在线浏览pdf插件。
一 pdfh5.js插件。支持js和vue模块化引入方式
演示:https://www.gjtool.cn/pdfh5/pdf.html
git地址:https://gitee.com/pjjg/pdfh5
效果:

script标签引入方式(需下载本项目文件夹css/pdfh5.css、js内所有文件)
<link rel="stylesheet" href="css/pdfh5.css" /> <div id="demo"></div> <script src="js/pdf.js" type="text/javascript" charset="utf-8"></script> <script src="js/pdf.worker.js" type="text/javascript" charset="utf-8"></script> <script src="js/jquery-1.11.3.min.js" type="text/javascript" charset="utf-8"></script> <script src="js/pdfh5.js" type="text/javascript" charset="utf-8"></script>
实例化
var pdfh5 = new Pdfh5('#demo', {
pdfurl: "./default.pdf"
});
npm安装方式(适应于vue)
npm install pdfh5
vue使用
<template>
<div id="app">
<div id="demo"></div>
</div>
</template>
<script>
import Pdfh5 from "pdfh5";
export default {
name: 'App',
data() {
return {
pdfh5: null
};
},
mounted() {
//实例化
this.pdfh5 = new Pdfh5("#demo", {
pdfurl: "../../static/test.pdf"
});
//监听完成事件
this.pdfh5.on("complete", function (status, msg, time) {
console.log("状态:" + status + ",信息:" + msg + ",耗时:" + time + "毫秒,总页数:" + this.totalNum)
})
}
}
</script>
<style>
@import "pdfh5/css/pdfh5.css";
*{
padding: 0;
margin: 0;
}
html,body,#app {
width: 100%;
height: 100%;
}
</style>
API接口方法
注意: pdf路径地址用相对路径加载速度最快,网络地址比较慢,本地绝对路径地址不能加载。
注意: pdf路径地址用相对路径加载速度最快,网络地址比较慢,本地绝对路径地址不能加载。
注意: pdf路径地址用相对路径加载速度最快,网络地址比较慢,本地绝对路径地址不能加载。
实例化
pdfh5实例化的时候传两个参数,selector选择器,options配置项参数,options可以不填写,会自动获取浏览器地址栏?file=后面的地址。会返回一个pdfh5实例对象,可以用来操作pdf,监听相关事件
var pdfh5 = new Pdfh5(selector, options);
参数名称
类型
取值
是否必须
作用
selector {String} - √ pdfh5的容器选择器
options {Object} - × pdfh5的配置项参数
options配置项参数列表
示例: 配置项参数 lazy:true 开启懒加载,默认是false,不开启懒加载
var pdfh5 = new Pdfh5('#demo', {
pdfurl: "./default.pdf",
lazy:true
});
二 TouchPDF
git:https://github.com/May1st/pdf-online-h5-in-IOS-ANDROID.git
公共的pdf页面可以自己写,调用插件的代码也相对简单:
seePDF.html
<!-- 头部导入,注意jquery版本 --> <meta name="viewport" content="initial-scale=1.0, user-scalable=no" /> <script type="text/javascript" src="jquery.min.js"></script> <script type="text/javascript" src="pdf.compatibility.js"></script> <script type="text/javascript" src="pdf.js"></script> <script type="text/javascript" src="jquery.touchSwipe.js"></script> <script type="text/javascript" src="jquery.panzoom.js"></script> <script type="text/javascript" src="jquery.mousewheel.js"></script> <script type="text/javascript" src="jquery.touchPDF.js"></script> <link href="jquery.touchPDF.css" rel="stylesheet" media="screen" /> <!-- body中放个div --> <div id="myPDF" style="height: 95%; width: 95%; margin: auto;"></div>
seePDF.js
$(function() {
//文件服务器的路径
var picDownloadServerUrl = window && window.weapon ? window.weapon.picDownloadServer : '',
//url中传递的pdf文件路径
pdfURL = Utils.getParamFromUrl('pdfURL'),
//pdf浏览路径
s = picDownloadServerUrl + pdfURL;
//开始使用TouchPDF插件
$("#myPDF").pdf( {
title: '',
source: s,
loadingWitdh: loadingWitdh,
loadingHeight: loadingHeight
} );
alert('可左右滑动翻页');
})
项目中自己做了个简单的公共插件modal,是一个可以展示图片或者pdf的弹窗,pdf则使用iframe动态将自己的seePDF页面路径插入src。此处要注意src的路径以防出现跨域问题,可以使用一下代码对iframe中的pdf路径进行预测试:
Utils.js
var Utils = {
//展示文件类的页面
showFilePage: function(fileName) {
if (fileName.indexOf('.pdf') > -1) {
var s = window.location.host + '/test/pdf/pdfURL=' + fileName;
if (!s.indexOf('http') > -1) {
s = 'http://' + s;
}
Utils.tetPage(s).then(function(){
window.location.href = s;
},
function(){
Utils.errorPage('文件不存在,请联系后台管理员!');
});
}
}
//预测试文件类页面
tetPage: function(url) {
return $.ajax({
type: "GET",
cache: false,
url: url,
data: "",
success: function() {
console.log('1')
},
error: function() {
console.log('2')
}
});
}
}
某个业务模块的pdf展示页面:
newDetails.js
Utils.showFilePage(pdfName);


