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://www.fushidao.cc/wangluobiancheng/237.html
您可能感兴趣的文章
- 02-11js中基本事件的总结(onclick、onblur、onchange等)
- 02-11详解如何在Node.js中使用中间件处理请求
- 02-11Vue3中Provide和Inject的用法及工作原理详解
- 02-11Vue+vant实现图片上传添加水印
- 02-11快速解决 keep-alive 缓存组件中定时器干扰问题
- 02-11uniapp 使用 tree.js 解决模型加载不出来的问题及解决方法
- 02-11基于uniapp vue3 的滑动抢单组件实例代码
- 02-10JavaScript 中的 Map使用指南
- 02-10vue3中使用print-js组件实现打印操作步骤
- 02-10Vue 中v-model的完整用法及v-model的实现原理解析


阅读排行
推荐教程
- 04-23JavaScript Array实例方法flat的实现
- 04-23THREE.JS使用TransformControls对模型拖拽的代码实例
- 04-23Vue3使用v-if指令进行条件渲染的实例代码
- 04-23vue3+ts项目搭建的实现示例
- 04-23JavaScript实现下载超大文件的方法详解
- 04-23vue如何使用pdf.js实现在线查看pdf文件功能
- 04-23vue.js调用python脚本并给脚本传数据
- 12-18使用JavaScript遍历输出页面中的所有元素的方法详解
- 04-23JS加密解密之保存到桌面书签
- 12-18Vue实现滚动加载更多效果的示例代码