这里推荐下载pdf.js 插件
PDF.js - Browse Files at SourceForge.net
特此注意 如果报 Promise.withResolvers is not a function 请去查看版本兼容问题
- 降低pdf.js版本
- 提高node版本
下载完成后 在 static 文件夹下新建 pdf 文件夹,将解压文件放进 pdf 文件夹下
在当前需要预览的vue页面中,先将文件链接下载为本地文件,代码如下
小tips 这里如果是超链接的形式 可以直接跳转 不需要再去下载 (因为客户需要在线看 而不是先下载)
openPdf(url) {
uni.downloadFile({
//需要预览的文件地址
url: url,
success: (res) => {
if (res.statusCode === 200) {
//下载成功,得到文件临时地址
console.log('下载成功', res.tempFilePath);
//条件编译,若为h5端则直接赋值文件地址
// #ifdef H5
let newUrl = res.tempFilePath
// #endif
//条件编译,若为App端,则需要将本地文件系统URL转换为平台绝对路径
// #ifdef APP-PLUS
let newUrl = plus.io.convertLocalFileSystemURL(res.tempFilePath)
// #endif
//这里新建一个vue页面,跳转并预览pdf文档
uni.navigateTo({
url: "/pages/previewArea/PdfPreview?url=" + url,
})
}
}
})
}
这是新建的vue页面,用于web-view预览pdf文件,代码如下
<template>
<view>
<!-- 全局pdf查看器 -->
<web-view :src="path"></web-view>
</view>
</template>
<script>
export default {
data() {
return {
viewerUrl: "/static/pdf/-pdf--master/hybrid/pdf.html",
path: "",
fileUrl: "",
}
},
onLoad(options) {
this.fileUrl = options.url;
},
onShow() {
//进行拼接即可
this.path = `${this.viewerUrl}?url=${this.fileUrl}`
}
}
</script>
可以直接跳转显示
static/pdf/-pdf--master/hybrid/pdf.html 这个页面 可以自定义添加下载按钮
<body>
<div>
<div id="pdf-view"></div>
<div class="down" id="downPdf">下载</div>
</div>
<script src="html/pdf/pdf.js"></script>
<script src="html/pdf/pdf.worker.js"></script>
<script src="html/pdf/jquery-1.11.3.min.js" type="text/javascript" charset="utf-8">
</script>
<script src="html/pdf/pdfh5.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
xxxx
xxx
// 点击调用下载
let downPdf = document.getElementById("downPdf");
document.getElementById("downPdf").addEventListener("click", async function (event) {
event.preventDefault();
try {
var downloadLink = document.createElement('a');
downloadLink.href = url; // 这里的url应该是你的PDF文件的URL
downloadLink.download = url.split("/").pop()// 设置下载后的文件名
downloadLink.style.display = 'none';
document.body.appendChild(downloadLink);
downloadLink.click();
document.body.removeChild(downloadLink);
} catch (error) {
console.log('error',error);
}
</script>
</body>
校验是否是pdf文件
let regPdf = /\.(pdf)$/.test(data.toLowerCase()) 是否pdf文件
let regImg = /\.(jpg|jpeg|png|gif)$/.test(data.toLowerCase()) 是否图片文件
let regDoc = /\.(doc|docx)$/.test(data.toLowerCase()) 是否doc 或者 docx文件