用uniapp开发H5,客户需求需要直接预览.pdf文件,最开始想到了uni提供的方法uni.openDocument(OBJECT)
但是仔细一看该方法不支持h5使用,果断就放弃了。
又尝试使用iframe
嵌套的形式,在电脑端运行的时候发现是可以使用的,但到了真机发现这种方法也是不行,都是直接跳转到了web浏览器进行下载。
通过查阅,发现使用一个插件可以实现在线预览的效果,也就是本篇文章的主角pdf.js
官方网站
pdf.js
: 点击查看.如下,官网也是非常简洁。
可以点击download进行下载,这里选择了如下版本。
下载后把压缩包解压到自己的项目的static文件夹中,
1.在static文件夹创建一个pdf的文件夹
2.把刚下载的pdf.js压缩包解压在新建的文件中
3.在需要使用的页面中添加如下代码
<template>
<!-- 可以使用这种方式 -->
<web-view :src="url"></web-view>
<!-- 也可以使用 -->
<iframe scrolling="none" :src="`/static/pdf/web/viewer.html?file=${fileUrl}`" style="width:100%;height:100%;"></iframe>
</template>
<script>
export default {
data() {
return {
// pdf.js的viewer.htm所在路径
viewerUrl: '/static/pdf/web/viewer.html',
// 要访问的pdf的路径
fileUrl: 'https://www.tt.com/test.pdf',
// 最终显示在web-view中的路径
url: ''
};
},
onLoad() {
// h5,使用h5访问的时候记得跨域
// #ifdef H5
this.url = `${this.viewerUrl}?file=${encodeURIComponent(this.fileUrl)}`;
// #endif
// 判断是手机系统:安卓,使用pdf.js
// #ifdef APP-PLUS
if(plus.os.name === 'Android') {
this.url = `${this.viewerUrl}?file=${encodeURIComponent(this.fileUrl)}`;
}
// ios,直接访问pdf所在路径
else {
this.url = encodeURIComponent(this.fileUrl);
}
// #endif
},
methods: {}
};
</script>
6.如果出现跨域问题,如下设置
直接修改源代码在viewer.js
中,也可以全局搜素file origin does not match viewer
,注释该代码块
通过以上操作,在项目中可以完美实现,交工~