位置: 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)(一只躺在沙滩上的鸟)

  • QQ群中推广需要注意的七大事项(qq群推广网站)

    QQ群中推广需要注意的七大事项(qq群推广网站)

  • 苹果7p是双卡吗(苹果7p是双卡吗?)

    苹果7p是双卡吗(苹果7p是双卡吗?)

  • 微信登录不了(微信登录不了怎么办?手机号也无法登录)

    微信登录不了(微信登录不了怎么办?手机号也无法登录)

  • 华为激活锁可以弄掉吗(华为激活锁可以解吗)

    华为激活锁可以弄掉吗(华为激活锁可以解吗)

  • 小米8se听筒声音小怎么办

    小米8se听筒声音小怎么办

  • 华为声音变小怎样解决(华为手机声音调小)

    华为声音变小怎样解决(华为手机声音调小)

  • 抖音不花钱能上热门吗(抖音不花钱上热门的几率)

    抖音不花钱能上热门吗(抖音不花钱上热门的几率)

  • vsco为什么安卓用不了(vsco 安卓)

    vsco为什么安卓用不了(vsco 安卓)

  • 淘花下单商家会知道吗(淘宝下单用淘花商家能看出来吗)

    淘花下单商家会知道吗(淘宝下单用淘花商家能看出来吗)

  • 华为p40怎么下载铃声(华为P40怎么下载铃声)

    华为p40怎么下载铃声(华为P40怎么下载铃声)

  • 抖音黄v认证的条件是什么(抖音黄v认证的步骤)

    抖音黄v认证的条件是什么(抖音黄v认证的步骤)

  • 卖家拉黑买家能投诉吗(卖家拉黑买家能收到钱吗)

    卖家拉黑买家能投诉吗(卖家拉黑买家能收到钱吗)

  • 苹果几可以双卡双待(苹果几可以双卡双待?5g)

    苹果几可以双卡双待(苹果几可以双卡双待?5g)

  • 58同城app怎么没有个人中心(58同城为什么没有我的信息)

    58同城app怎么没有个人中心(58同城为什么没有我的信息)

  • 电脑插耳机说话对方听不到(电脑插耳机说话有杂音滋滋)

    电脑插耳机说话对方听不到(电脑插耳机说话有杂音滋滋)

  • yy实名认证能注销吗(yy实名认证能注销账号吗)

    yy实名认证能注销吗(yy实名认证能注销账号吗)

  • 怎么设置软件密码(怎么设置软件密码vivo)

    怎么设置软件密码(怎么设置软件密码vivo)

  • 快手企业认证好处(快手企业认证有什么好处?怎么认证?)

    快手企业认证好处(快手企业认证有什么好处?怎么认证?)

  • 华为p20pro自带钢化膜吗(华为p20pro后盖有塑料的吗)

    华为p20pro自带钢化膜吗(华为p20pro后盖有塑料的吗)

  • 苹果11微信提示音怎么换(苹果11微信提示音怎么改其他声音)

    苹果11微信提示音怎么换(苹果11微信提示音怎么改其他声音)

  • 优活手环m3如何调中文(优活手环怎么关机教程)

    优活手环m3如何调中文(优活手环怎么关机教程)

  • b站如何锁屏后继续播放(b站 锁屏)

    b站如何锁屏后继续播放(b站 锁屏)

  • 模式识别受体的概念(模式识别受体的总称)

    模式识别受体的概念(模式识别受体的总称)

  • 微信二维码怎么改店名(微信二维码怎么打印出来)

    微信二维码怎么改店名(微信二维码怎么打印出来)

  • 手机上hd1怎么取消(怎么才把手机上的hd去取呢)

    手机上hd1怎么取消(怎么才把手机上的hd去取呢)

  • 探探暗恋成功怎么取消(探探暗恋成功会发短信吗)

    探探暗恋成功怎么取消(探探暗恋成功会发短信吗)

  • 微信办理的etc多久可以收到(微信办理的etc多久能用)

    微信办理的etc多久可以收到(微信办理的etc多久能用)

  • 苹果6home键在哪里设置(苹果8home键在哪)

    苹果6home键在哪里设置(苹果8home键在哪)

  • rx580配什么cpu(rx580配什么cpu性价比高)

    rx580配什么cpu(rx580配什么cpu性价比高)

  • 电脑没有管理员权限怎么办(电脑没有管理员权限)

    电脑没有管理员权限怎么办(电脑没有管理员权限)

  • iphone热点怎么踢人(苹果手机热点怎么踢人)

    iphone热点怎么踢人(苹果手机热点怎么踢人)

  • 旧设备出口增值税处理
  • 收据收到写什么
  • 电子税务局能不能抄税
  • 房屋租赁费如何计提
  • 不含税销售收入含消费税吗
  • 货到发票没到
  • 物业企业门禁卡如何记账?
  • 损益类科目计入哪个表
  • 辅助生产车间最后结转到哪里
  • 土地储备机构也称为什么
  • 缴纳补充公积金的外企
  • 所得税多交但又不想去税务局退税怎样做账?
  • 年终一次性奖金个税计算
  • 有合同未收到租金税务如何处理?
  • 备件和耗材的定义
  • 外汇局网上申报
  • 合伙制创投企业与合伙制创投基金
  • 固定资产处置要交所得税吗
  • 已经计提的税金怎么做账
  • 预算与决算对比分析
  • 其他权益工具投资交易费用计入哪里
  • 桌面级cpu天梯图2023
  • 金税盘技术维护费可以抵扣吗
  • win10 批量安装软件
  • 中投公司投资的股票
  • Win10 20H1/20H2 KB5001391补丁今日发布(内附下载)
  • php字符串定义
  • 金银首饰在哪个软件买
  • PHP函数func_num_args用法实例分析
  • 为什么磁盘会消失
  • thinkphp 数据库查询
  • 购进免税农产品进行进项税额抵扣时,其抵扣率为
  • php 可变变量
  • 跨市设立分公司
  • 高德地图api是什么意思
  • 购进食用油的会计分录
  • javascriptz
  • web前端 css
  • 什么是资产评估的价值类型
  • mkfifo命令
  • c++怎么创建文件夹
  • mongodb如何修改数据
  • sql server 2008使用说明
  • 合作社分红计入什么科目
  • 工程施工会计如何记账
  • 公司把股权转让给个人员工该怎么办
  • 委托加工业务中需要计算缴纳增值税销项税
  • 其他应收款账务核销后放在哪个科目里
  • 现金支票存根金额怎么写
  • 进货没开发票,销货却开发票应怎么做帐?
  • 支付贷款利息属于筹资活动吗
  • 应收账款记账凭证怎么写
  • 少做收入第二年怎么算
  • 加油票的发票抬头怎么写
  • SQL Server 2016 CTP2.3 的关键特性总结
  • mysql安装与配置的步骤与常用命令
  • win10系统微软
  • java调用so库文件
  • windowsxp停止服务的时间
  • Ubuntu软件源更新
  • WIN XP下VMware Tools(虚拟机)安装的详细方法(图文教程)
  • 手机用xp系统
  • Remind_XP.exe - Remind_XP是什么进程 有什么用
  • WIN10系统中引导修复不工作
  • win7的语言栏不见了
  • win7系统的桌面图标怎么调出来
  • cocos2dx schedule
  • php运行linux命令
  • Node.js中的事件循环是什么
  • jquery的dialog怎么使用
  • nodejs重命名文件
  • js中push和pop
  • JavaScript中的变量名不区分大小写
  • window运行怎么打开
  • 前端开发的工作流程
  • 土地增值额未超过20%
  • 江西国税局电话客服热线
  • 中华人民共和国刑法
  • 12366纳税服务热线存在的问题
  • 车辆购置税多久能退回来
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设