首页 > 其他分享 >vue实现预览pdf功能

vue实现预览pdf功能

时间:2023-02-20 18:02:24浏览次数:44  
标签:vue 预览 res window 全屏 pdf

vue页面中的一部分实现预览pdf功能

一、全屏预览模式

先说直接全屏预览的,直接axios获取到数据,将流转为二进制文件,

  • 可以window.open(后端返回文件流,前端把流转成url,在使用window.open就会打开一个新标签页全屏展示pdf)
  • 也可以嵌入到a标签的href属性中

二、利用pdf.js嵌入到iframe中预览

第一步跟全屏一样,就是最后打开方式不一样
pdf.js官网下载pdf.js文件
将文件解压缩,将里面的build和web文件夹放在static目录下面,一定要是static目录
目录结构如下
在这里插入图片描述
接着在组件里就可以直接使用了,
iframe的原理是将一个html页面嵌入在另一个html页面中

1 <iframe ref="pdfCotainer" :src="pdfUrl" width="100%"></iframe>

 

附代码:
vue组件中:

1 <iframe ref="pdfCotainer" :src="pdfUrl" width="100%"></iframe>

首先通过axios调用后台接口获取流数据

 1 // 获取流
 2 export function getStream(url, params) {
 3   return new Promise((resolve, reject) => {
 4     axios.get(url, {
 5       params: params,
 6       responseType: 'arraybuffer' // 关键,必须要设置响应类型,否则pdf没有内容都是空白页 
 7     }).then(res => {
 8       resolve(res.data)
 9     }).catch(err => {
10       reject(err.data)
11     })
12   })
13 }

 

流转成二进制文件方法

 1 // 生成数据报告->pdf预览
 2     pdfPreview(year) {
 3       let param = {
 4         types: this.types,
 5         year: this.year
 6       }
 7       console.log('传递的参数为', param)
 8       getDatareportData(param).then(res => {
 9         console.log('调用生成数据报告接口返回数据', res)
10         const binaryData = [];
11         binaryData.push(res);       
12         this.pdfUrl = window.URL.createObjectURL(new Blob(binaryData, {type: 'application/pdf'}));
13         // window.open(this.pdfUrl);
14       })
15     }

 

但是这样iframe的高度始终是固定的,需要再动态改变一下高度

1 // 改变iframe高度
2 changeFrameHeight() {
3    var pdfCotainer = this.$refs.pdfCotainer;
4    pdfCotainer.height = document.documentElement.clientHeight;
5 }

 

标签:vue,预览,res,window,全屏,pdf
From: https://www.cnblogs.com/jackal1234/p/17138395.html

相关文章

  • Vue 06
    Vue06vue-cli创建项目在使用前端做项目的时候我们会使用到一个工具:vue-cli 1.创建出一个vue项目,单页面开发,组件化开发,把App.vue,ts,saas,less编译成能够在浏览器中......
  • vue2中的v-for
    数组更新检测变更方法Vue将被侦听的数组的变更方法进行了包裹,所以它们也将会触发视图更新。这些被包裹过的方法包括:push()pop()shift()unshift()splice()sort()......
  • python之路73 vue框架 vue-cli创建项目、vue项目目录介绍、es6导入导出语法、登录功
    vue-cli创建项目前端做成项目---》使用工具(vue-cli),创建vue项目,单页面应用(spa),组件开发,把xx.vue,ts,saas,less---》编译---》在浏览器中执行vue-cli创建项目开发,在项......
  • Vue-cli项目搭建
    Vue-cli项目搭建VueCLI是一个基于Vue.js进行快速开发的完整系统。它依赖nodejs解释器环境,这个解释器是基于谷歌v8引擎编写的,能过在操作系统上执行js代码(原本js只能运......
  • vue-element-admin 给页面添加水印
     1:/src/utils/waterMark.js 创建文件,代码直接贴:'usestrict'constwatermark={}/****@param{要设置的水印的内容}str*@param{需要设置水印的容......
  • svg矢量二维码加盖在PDF文件中
    正常行驶的bitmap类型的二维码格式,加载到PDF中,将会导致二维码失真,无法扫描。矢量图可根据尺寸大小进行调节,不会出现失真模糊情况所用依赖<PackageReferenceInclude="Fr......
  • vue3 reactive值不更新
    即上一个随笔里面的form表单数据定义的问题之后,又出现了另一个问题。页面里面有一个数组:letruleForm=reactive([  {name:'123456'}])......
  • vue中watch监听计算总价总数量
    应用场景,当购物车添加了一个商品时,购物车的总数和其总价格需重新计算这里有4个商品,现在对任意一个进行添加或删除总价格和总数量都要进行变化1.定义变量dataList:[......
  • pdf转MD、HTML、word网址收集
    PDF转Word,Excel,PPT,JPG的网址:https://smallpdf.com/cn/pdf-to-wordPDF转Markdown的网址:https://pdf2md.morethan.io/PDF转HTML的网址:https://www.pdftohtml.net/......
  • vue3中对于/deep/和::v-deep的警告信息处理
    目前发现两处警告信息:::v-deepusageasacombinatorhasbeendeprecated.Use:deep()instead.the>>>and/deep/combinatorshavebeendeprecated.Use:deep()......