vue如何使用pdf.js实现在线查看pdf文件功能
需求:
有一个列表页,用户点击查看,弹层展示后台接口返回的pdf内容(不是文件、地址之类的,乱码的pdf铭文(二进制文件流))
1、pdf.js安装
npm install --save vue-pdf
2、正文代码
<template>
<div>
<el-table :data="dataList">
<el-table-column prop="fieldName" width="120" label="操作">
<template slot-scope="scope">
<span @click="look(scope.row)">查看</span>
</template>
</el-table-column>
</el-table>
<el-dialog title="预览" :visible.sync="dialogVisible" :before-close="closePdf">
<pdf v-for="i in numPages" :key="i" :src="pdfSrc" :page="i" />
</el-dialog>
</div>
<template>
<script>
import pdf from 'vue-pdf'
export default {
components: {
pdf
},
data() {
return {
dialogVisible: false,
numPages: 1,
pdfSrc:"",
close:false,
}
},
methods: {
// 查看预览
look(row) {
const that = this;
that.pdfSrc = "";
// 接口文件地址(接口入参拼出来的路径)
const url = `${Host}xxxxxx/xxxx/xxx?fileId=${row.fileId}&fileName=${row.fileName}.pdf`;
// 如果调用接口(接口的responseType一定要是blob,默认json,不然解析出来的pdf是空白的)后拿的返回的值(乱码的pdf铭文(二进制文件流))则需要转一下
// const url = window.URL.createObjectURL(new Blob([res]), { // res为接口返回值
// type: "application/msword"
// });
that.pdfSrc = pdf.createLoadingTask(url)
that.pdfSrc.promise.then(pdf => {
that.dialogVisible = true;
that.numPages = pdf.numPages
//保证pdf加载成功,否则不能关闭弹层
setTimeout(() => {
that.close = true;
}, 2000);
})
.catch(error => {
that.$message.error("无效的PDF文件!");
})
},
//此方法解决第一次查看pdf文字没有加载完成影响后续查看
closePdf(done){
if(this.close) {
this.numPages = 1;//必须重置,多次查看会出现头部内容缺失
this.close = false;
done();
} else {
this.$message.warning("PDF文件加载中");
}
}
}
}
</script>遇到的问题:
1、多次查看后头部内容不显示。 设置numPages = 1;
2、上一条pdf查看没有加载完成,下一条pdf查看pdfSrc清空了还是无法正常加载。 延迟关闭弹层(这个方法有点暴力,希望能找到好的解决方法);
3、头部会有点多余内容溢出,内容没啥,就是感觉有类似border的东西。 头部其他内容设置样式盖住(具体css略)。
在后续项目中又实现了该功能,没有遇到以上问题,盲猜是因为pdf dialog标签上加了v-if,光设置visible.sync只会控制元素的显示隐藏,不会重新渲染。
总结:只要是dialog最好加上v-if,会避免很多问题。
拓展:
如果后端返回的是html格式,前端调用的接口responseType就不要用blob了,直接将返回结果放在v-html里面。例:
<div v-html="responseData"/>
总结
到此这篇关于vue如何使用pdf.js实现在线查看pdf文件功能的文章就介绍到这了,更多相关vue在线查看pdf文件内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持科站长!
上一篇:JavaScript实现导入和导出Excel的示例详解
栏 目:JavaScript
本文标题:vue如何使用pdf.js实现在线查看pdf文件功能
本文地址:https://fushidao.cc/wangluobiancheng/237.html
您可能感兴趣的文章
- 02-04javascript解码揭秘,JavaScript核心原理及高效编码技巧之谜?
- 02-04javascript电子书涵盖哪些编程技巧与实战案例,适合哪些开发者阅读?
- 02-04JavaScript如何高效操作javascript二维数组的元素和方法选择?
- 02-04JavaScript全局变量如何影响代码的模块化和性能优化?
- 02-04javascript赋值
- 02-04a标签javascript如何正确运用和优化?探讨技巧与最佳实践疑问长尾标题
- 02-04javascript设计
- 02-04JavaScript翻译中的常见难点和高效策略探讨?
- 02-04javascript变量名
- 02-04JavaScript隐藏技巧,揭秘30种不为人知的隐藏方法之谜?
阅读排行
推荐教程
- 02-01如何选择最适合你的JavaScript视频教程?
- 04-23JavaScript Array实例方法flat的实现
- 04-23Vue3使用v-if指令进行条件渲染的实例代码
- 04-23THREE.JS使用TransformControls对模型拖拽的代码实例
- 07-21JavaScript判断数据类型的四种方式总结
- 07-21基于vue3与supabase系统认证机制详解
- 07-22JavaScript随机数生成各种技巧及实例代码
- 07-21JavaScript检查变量类型的常用方法
- 04-23vue3+ts项目搭建的实现示例
- 07-21JavaScript双问号操作符(??)的惊人用法总结大全
