位置: IT常识 - 正文

接收后端返回的pdf文件流 前端使用Vue-pdf实现预览(分页)(后端接口返回数据类型规范)

编辑:rootadmin
接收后端返回的pdf文件流 前端使用Vue-pdf实现预览(分页) vue系列文章目录

推荐整理分享接收后端返回的pdf文件流 前端使用Vue-pdf实现预览(分页)(后端接口返回数据类型规范),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:后端返回数据格式有哪些,前端接收后端返回值,后端接口返回数据类型规范,后端接收对象,后端返回数据格式有哪些,前端接收后端返回值,后端接口返回数据类型规范,前端接收后端返回值,内容如对您有帮助,希望把文章链接给更多的朋友!

需求:后端返回文件流前端将文件流转为成blob地址预览pdf文件

提示:以下是本篇文章正文内容,下面案例可供参考

一、安装PDF插件依赖

npm install vue-pdf --save

二、封装vuePdf组件为预览页面,通过Management.vue路由传参形式跳转到预览页面1.Management.vue

代码如下(示例):

封装的请求pdfDocument 一定要加上 { responseType: "blob", }

后台返回的pdf文件流 也就是result.data 附代码:

// 预览 async scanSubmit(row) { // 这个代码我不多做解释,接口请求而已 const result = await pdfDocument(this.fileId); // 直接使用createObjectURL可能会出现问题 // 所以我建议使用下面这种方式将文件流转化为本地blod地址 var binaryData = []; binaryData.push(result.data); console.log(binaryData); // 记得一定要设置application的类型 let url = window.URL.createObjectURL( new Blob(binaryData, { type: "application/pdf;charset=utf-8", }) ); if (url != null && url != undefined && url) { // vue路由跳转并以问号形式携带vue-pdf预览时所需要的pdf地址 const { href } = this.$router.resolve({ path: "/vuePdf", query: { //要传的参数 url: url, }, }); // 新页面打开 window.open(href, "_blank"); this.openTheScanningdialog = false; } },2.vuedf.vue接收后端返回的pdf文件流 前端使用Vue-pdf实现预览(分页)(后端接口返回数据类型规范)

HTML部分,无需修改,复制可直接使用

<template> <div id="container"> <!-- 上一页、下一页 --> <div class="right-btn"> <!-- 输入页码 --> <div class="pageNum"> <input v-model.number="currentPage" type="number" class="inputNumber" @input="inputEvent()" /> / {{ pageCount }} </div> <div @click="changePdfPage('first')" class="turn">首页</div> <!-- 在按钮不符合条件时禁用 --> <div @click="changePdfPage('pre')" class="turn-btn" :style="currentPage === 1 ? 'cursor: not-allowed;' : ''" > 上一页 </div> <div @click="changePdfPage('next')" class="turn-btn" :style="currentPage === pageCount ? 'cursor: not-allowed;' : ''" > 下一页 </div> <div @click="changePdfPage('last')" class="turn">尾页</div> </div> <div class="pdfArea"> <!-- // 不要改动这里的方法和属性,下次用到复制就直接可以用 --> <pdf :src="src" ref="pdf" v-show="loadedRatio === 1" :page="currentPage" @num-pages="pageCount = $event" @progress="loadedRatio = $event" @page-loaded="currentPage = $event" @loaded="loadPdfHandler" @link-clicked="currentPage = $event" style="display: inline-block; width: 100%" id="pdfID" ></pdf> </div> <!-- 加载未完成时,展示进度条组件并计算进度 --> <div class="progress" v-if="loadedRatio != 1"> <el-progress type="circle" :width="70" color="#53a7ff" :percentage=" Math.floor(loadedRatio * 100) ? Math.floor(loadedRatio * 100) : 0 " ></el-progress> <br /> <!-- 加载提示语 --> <span>{{ remindShow }}</span> </div> </div></template>

JS部分,无需修改,复制可直接使用

<script>import pdf from "vue-pdf";export default { components: { pdf, }, data() { return { // ----- loading ----- remindText: { loading: "加载文件中,文件较大请耐心等待...", refresh: "若卡住不动,可刷新页面重新加载...", }, remindShow: "加载文件中,文件较大请耐心等待...", intervalID: "", // ----- vuepdf ----- // src静态路径: /static/xxx.pdf // src服务器路径: 'http://.../xxx.pdf' src: "", // 当前页数 currentPage: 0, // 总页数 pageCount: 0, // 加载进度 loadedRatio: 0, }; }, created() { // 页面加载,拿到路由中的url复制给data中的src this.src = this.$route.query.url; console.log(this.src); }, mounted() { // // 更改 loading 文字 this.intervalID = setInterval(() => { this.remindShow === this.remindText.refresh ? (this.remindShow = this.remindText.loading) : (this.remindShow = this.remindText.refresh); }, 4000); }, methods: { // 页面回到顶部 toTop() { document.getElementById("container").scrollTop = 0; }, // 输入页码时校验 inputEvent() { if (this.currentPage > this.pageCount) { // 1. 大于max this.currentPage = this.pageCount; } else if (this.currentPage < 1) { // 2. 小于min this.currentPage = 1; } }, // 切换页数 changePdfPage(val) { if (val === "pre" && this.currentPage > 1) { // 切换后页面回到顶部 this.currentPage--; this.toTop(); } else if (val === "next" && this.currentPage < this.pageCount) { this.currentPage++; this.toTop(); } else if (val === "first") { this.currentPage = 1; this.toTop(); } else if (val === "last" && this.currentPage < this.pageCount) { this.currentPage = this.pageCount; this.toTop(); } }, // pdf加载时 loadPdfHandler(e) { // 加载的时候先加载第一页 this.currentPage = 1; }, }, destroyed() { // 在页面销毁时记得清空 setInterval clearInterval(this.intervalID); },};</script>

CSS部分,可根据自己的需求自行修改

<style scoped>#container { position: absolute !important; left: 0; right: 0; bottom: 0; top: 0; background: #f4f7fd; overflow: auto; font-family: PingFang SC; width: 100%; display: flex; /* justify-content: center; */ position: relative;}/* 右侧功能按钮区 */.right-btn { position: fixed; right: 5%; bottom: 15%; width: 120px; display: flex; flex-wrap: wrap; justify-content: center; z-index: 99;}.pdfArea { width: 900px; margin: 0 auto;}/* ------------------- 输入页码 ------------------- */.pageNum { margin: 10px 0; font-size: 18px;}/*在谷歌下移除input[number]的上下箭头*/input::-webkit-outer-spin-button,input::-webkit-inner-spin-button { -webkit-appearance: none !important; margin: 0;}/*在firefox下移除input[number]的上下箭头*/input[type="number"] { -moz-appearance: textfield;}.inputNumber { border-radius: 8px; border: 1px solid #999999; height: 35px; font-size: 18px; width: 60px; text-align: center;}.inputNumber:focus { border: 1px solid #00aeff; background-color: rgba(18, 163, 230, 0.096); outline: none; transition: 0.2s;}/* ------------------- 切换页码 ------------------- */.turn { background-color: #164fcc; opacity: 0.9; color: #ffffff; height: 70px; width: 70px; border-radius: 50%; display: flex; align-items: center; justify-content: center; margin: 5px 0;}.turn-btn { background-color: #164fcc; opacity: 0.9; color: #ffffff; height: 70px; width: 70px; border-radius: 50%; margin: 5px 0; display: flex; align-items: center; justify-content: center;}.turn-btn:hover,.turn:hover { transition: 0.3s; opacity: 0.5; cursor: pointer;}/* ------------------- 进度条 ------------------- */.progress { position: absolute; right: 50%; top: 50%; text-align: center;}.progress > span { color: #199edb; font-size: 14px;}</style>效果图

**

实现下载/在线打开

**

①安装downloadjs

npm install downloadjs

②在需要的地方引入

import download from 'downloadjs'

③在下载的方法里调用download就可以实现下载了

文件流数据 保存的名字 要下载的文件类型

本文链接地址:https://www.jiuchutong.com/zhishi/283607.html 转载请保留说明!

上一篇:fs20.exe是什么进程 有什么作用 fs20进程查询(电脑fs0是什么)

下一篇:一只躺在沙滩上的港海豹幼崽,德国黑尔戈兰岛 (© Fotofeeling/Westend61/Offset)(一只躺在沙滩上的鸟)

  • 米兔儿童电话手表怎么关机(米兔儿童电话手表5C)

    米兔儿童电话手表怎么关机(米兔儿童电话手表5C)

  • 拼多多怎么夸夸别人(拼多多夸夸怎么看)

    拼多多怎么夸夸别人(拼多多夸夸怎么看)

  • 如何从sim卡带入通讯录到手机(如何从sim卡带入网络)

    如何从sim卡带入通讯录到手机(如何从sim卡带入网络)

  • 微视有访客记录吗(微视访客记录在哪查看)

    微视有访客记录吗(微视访客记录在哪查看)

  • 红米有红外线功能吗(红米有红外线功能吗手机)

    红米有红外线功能吗(红米有红外线功能吗手机)

  • 抖音取关一个人她会知道么(抖音取关一个人还会刷到吗)

    抖音取关一个人她会知道么(抖音取关一个人还会刷到吗)

  • 荣耀play4tpro有nfc吗(荣耀play4tpro有没有nfc功能)

    荣耀play4tpro有nfc吗(荣耀play4tpro有没有nfc功能)

  • 拼多多限时秒杀怎样快速抢(拼多多限时秒杀活动技巧)

    拼多多限时秒杀怎样快速抢(拼多多限时秒杀活动技巧)

  • 苹果手机快手通讯录好友怎么删除(苹果手机快手通知开了也没消息)

    苹果手机快手通讯录好友怎么删除(苹果手机快手通知开了也没消息)

  • 小米无线耳机怎么串联(小米无线耳机怎么调声音大小)

    小米无线耳机怎么串联(小米无线耳机怎么调声音大小)

  • 苹果闹钟开着会一直响吗(苹果闹钟开着会耗电吗)

    苹果闹钟开着会一直响吗(苹果闹钟开着会耗电吗)

  • 喵喵机怎么打印不出来(喵喵机怎么打印错题)

    喵喵机怎么打印不出来(喵喵机怎么打印错题)

  • 华为p20耳机插哪(华为p20手机耳机插口在哪)

    华为p20耳机插哪(华为p20手机耳机插口在哪)

  • 小米9pro怎么添加桌面小工具(小米9怎么添加桌面)

    小米9pro怎么添加桌面小工具(小米9怎么添加桌面)

  • Reno Ace怎么打开全屏多任务(opporenoace怎么用)

    Reno Ace怎么打开全屏多任务(opporenoace怎么用)

  • ios13系统缓存怎么清理(ios13缓存清理)

    ios13系统缓存怎么清理(ios13缓存清理)

  • 淘宝看直播怎么关注主播(淘宝看直播怎么改自己的名字)

    淘宝看直播怎么关注主播(淘宝看直播怎么改自己的名字)

  • 华为p30是快充吗(华为p30是快充吗还是慢充)

    华为p30是快充吗(华为p30是快充吗还是慢充)

  • hwitl00是什么型号(hwial00是华为什么型号)

    hwitl00是什么型号(hwial00是华为什么型号)

  • 快手库存怎么弄(快手如何占库存秒杀)

    快手库存怎么弄(快手如何占库存秒杀)

  • 如何保护Word文档(如何保护word文件不被他人修改)

    如何保护Word文档(如何保护word文件不被他人修改)

  • MAC facetime怎么用	Mac OS系统Facetime使用中文视频教程介绍(macbookprofacetime)

    MAC facetime怎么用 Mac OS系统Facetime使用中文视频教程介绍(macbookprofacetime)

  • Escarpment Trail in Porcupine Mountains Wilderness State Park, Michigan (© Pat & Chuck Blackley/Alamy)

    Escarpment Trail in Porcupine Mountains Wilderness State Park, Michigan (© Pat & Chuck Blackley/Alamy)

  • 像巨大指纹一样的Bavljenac岛,克罗地亚 (© Julien Duval/Amazing Aerial Agency)(像指纹一样的图形)

    像巨大指纹一样的Bavljenac岛,克罗地亚 (© Julien Duval/Amazing Aerial Agency)(像指纹一样的图形)

  • 如何利用ChatGPT搞科研?(如何利用数据有效性制作单元格菜单)

    如何利用ChatGPT搞科研?(如何利用数据有效性制作单元格菜单)

  • 推荐一个跨平台内存分配器  feixuwu  C++博客(跨平台 gui)

    推荐一个跨平台内存分配器 feixuwu C++博客(跨平台 gui)

  • 社保阶段性减免延长到年底
  • 股东购买自己公司产品
  • 其他项目工会筹备金怎么报税
  • 企业出租房屋增值税发票怎么开
  • 过路费是来回收费还是单向
  • 其他权益工具投资是什么类科目
  • 存货项目包括哪些具体内容
  • 长期待摊费用属于无形资产吗
  • 小规模购买金税盘
  • 贷款 保险费
  • 其他业务收入需要结转成本吗
  • 生产企业出口退税流程及账务处理
  • 可转债税前收益和税后收益
  • 开具红字发票后发现购买方已做抵扣怎么办
  • 其他应付款社保贷方余额怎么冲平
  • 电子普通发票进什么科目
  • 房屋盘盈入账须要交税吗
  • 买入返售金融资产是资产还是负债
  • 城建税有哪些征税项目
  • 零申报工会经费滞纳金怎么算
  • 工程上的材料费进什么科目
  • window10怎么用wifi上网
  • win11正式版好用吗
  • 五险一金个人缴纳部分
  • Win11怎么自定义鼠标指针图案
  • win11如何修改任务栏颜色
  • 辅导期纳税人领票预缴税款
  • win10正版免费下载
  • macOS Big Sur 11.1 开发者预览版 Beta 2推送更新
  • 月末增值税计算公式
  • php后端技术栈
  • 废品损失的核算一定要设废品损失账户吗
  • thinkphp yii
  • php中验证码如何实现登录验证
  • nyud数据集
  • rf-kill
  • 用于应酬用的烟有哪些
  • 进项大于销项怎么做分录
  • 利润分配财务管理
  • 管理费用明细账余额累加吗
  • springbootredis密码加密
  • mysql批量查询
  • 食堂菜金属于什么费用
  • 应收款项减值讲解视频
  • 小规模企业提现到自己个人银行卡需要交多少税
  • 没有收到房租发票
  • 广告类的公司
  • 新成立的公司怎样建账
  • 成本法和权益法的转换
  • 工伤七至十级有伤残津贴吗
  • 发票缴销了还能恢复吗
  • 过路费属于差旅费还是办公费
  • 公司里的废品的处理一般是谁负责
  • 赞助费入账需要多久
  • 第一份工作的五个条件
  • 坏账准备的会计核算
  • 对会计人员继续教育的目的包括了保障
  • unix系统采用什么结构
  • 如何win8.1升级win10正式版
  • 怎么快速隐藏电脑下方一排
  • xp怎么解压文件
  • win7自带xp虚拟机怎么安装驱动
  • linux系统中用户密码保存在什么文件中
  • openbsd 6.9
  • win8恢复出厂设置方法
  • ubuntu顶部菜单栏
  • linux安装和配置
  • linux 网页
  • cocos2dx怎么用
  • android studiojava报错
  • curl发送formdata
  • nodejs快速入门
  • python中2和2.0的区别
  • linux shell 中 2>&1的含义
  • 点击按钮显示
  • jQuery tagsinput在h5邮件客户端中应用详解
  • android camera setParameters failed 类问题分析总结
  • Warning: Build-tool 17.0.0 is missing AAPT at F:adt-bundle-windows-x86sdk
  • 股权转让所得怎么申报
  • 基层税务稽查具体内容
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设