vue前台解析pdf文件流(Vue实现在线预览pdf文件功能利用pdf.js/iframe/embed)
类别:编程学习 浏览量:1583
时间:2022-01-19 00:12:17 vue前台解析pdf文件流
Vue实现在线预览pdf文件功能利用pdf.js/iframe/embed前言
最近在做一个精品课程,需要在线预览课件ppt,我们的思路是将ppt转换为pdf在线预览,所以问题就是如何实现在线预览pdf了。
在实现的过程中,为了更好地显示效果,我采用了多种不同的方法,最终选择效果最好的pdf.js。
实现方法:
1:iframe
采取iframe将pdf嵌入网页从而达到预览效果,想法很美好,实现很简单,但显示很残酷…
虽然一行代码简洁明了,打开谷歌浏览器效果也还行,但缺点也是十分明显的!!!!
<iframe src="http......" width="100%"></iframe>
缺点:
(1)不兼容IE,因为iframe毕竟不规范,IE已经不采用它了
(2)下载弹窗!!!每次打开预览都弹出下载弹窗,用户体验极度不好
2:embed
embed和iframe感觉差不多的东西,用起来感觉一样简洁明了,打开IE效果也还行,但仍然无法避免下载弹窗的干扰。
<embed src="http......" width="100%" height="400" />
3:pdf.js(效果感觉最好)
实现步骤:
(1)下载pdf.js文件
因为pdf.js文件比较多,我们要用的只是核心文件,所以将核心文件抽出来(已处理跨域报错)。点击下载核心文件
(2)在static中引入核心文件
(3)使用
<template> <iframe :src="pathUrl" width="100%"></iframe> </template> <script> export default { data () { return { pathUrl:'' } }, mounted () { this.pathUrl = '../../../../../static/pdf/web/viewer.html?file=' + encodeURIComponent('https://lidn02.o%BA.pdf') // 找到之前引进来pdf文件中的的viewe.html并+pdf地址 }, } </script>
(4)效果
各大主流浏览器均兼容。
(5)以流的形式接收pdf
虽然上面已经实现效果了,但打开控制台还是有一行报错:
为了解决这个问题,或者遇到跨域时都采用流的形式接受pdf文件,再进行展示:
mounted(){ this.getData(你的pdf地址) } //接收文件流转换地址再显示 getData(url){ axios.get(url,{ responseType:'blob', }) .then(res => { let blob = new Blob([res.data], {type: "application/vnd.ms-excel"}) let objectUrl = URL.createObjectURL(blob) this.pathUrl = '../../../../../static/pdf/web/viewer.html?file=' + objectUrl }) .catch(err => { console.log(err) }) }
总结
到此这篇关于Vue实现在线预览pdf文件功能的文章就介绍到这了,更多相关Vue在线预览pdf文件内容请搜索开心学习网以前的文章或继续浏览下面的相关文章希望大家以后多多支持开心学习网!
您可能感兴趣
- vue指令使用技巧(Vue指令工作原理实现方法)
- vue离线地图有哪些(vue 集成腾讯地图实现api附DEMO)
- vue封装一个功能函数(vue中利用mqtt服务端实现即时通讯的步骤记录)
- vue实现添加一段代码功能(Vue实现动态查询规则生成组件)
- vue路由跳转自动定位在哪里(Vue路由this.route.push跳转页面不刷新的解决方案)
- vue统计代码行数(vue实现计数器简单制作)
- vue elementui 按钮样式修改(vue+elementui 实现新增和修改共用一个弹框的完整代码)
- vue3兼容的插件多吗(关于vue3编写挂载DOM的插件问题)
- vue 父组件传值(Vue两个同级组件传值实现)
- vue 计算一段时间的月份和天数(vue实现指定日期之间的倒计时)
- vuefor指令使用教程(Vue必学知识点之forEach的使用)
- vue-router底层实现原理(vue-router history模式服务器端配置过程记录)
- vue创建项目同时引入elementui(Vue Element前端应用开发之开发环境的准备工作)
- vue购物车简单项目(vue实现简单购物车案例)
- vue 单文件组件(vue实现一个单文件组件的完整过程记录)
- vue router用法(如何在Vue 3中扩展Vue Router链接详解)
- ()
- 百事大吉蓝底 绿底手机高清壁纸(绿底手机高清壁纸)
- 蓝底证件照怎么制作 证件照换底色 换尺寸快速搞定(蓝底证件照怎么制作)
- 你喜欢足球吗 足球如何点亮世界的(足球如何点亮世界的)
- 不可分鸽是什么梗(不可分鸽是什么梗)
- 古代的鸽子是爱情的象征,并非和平的使者(古代的鸽子是爱情的象征)
热门推荐
- css弹出框特效(利用CSS实现酷炫的下拉框特效)
- python弹跳小球(python GUI实现小球满屏乱跑效果)
- docker容器启动执行脚本(在docker容器中使用非root用户执行脚本操作)
- 自己怎么选网站服务器(网站空间服务器的正确选择方法)
- docker同步宿主机配置(docker容器间跨宿主机通信-基于overlay的实现方法)
- django怎么设置数据库(django配置连接数据库及原生sql语句的使用方法)
- .Net中Immutable(不可变)集合
- php生成json信息(php使用json-schema模块实现json校验示例)
- 简单的sql注入举例(分享一个简单的sql注入)
- MySQL中查询数据库的大小
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9