位置: IT常识 - 正文

后端返回PDF文件流,前端处理展示及打印(补:PDF多页不显示问题)(后端返回pdf文件地址,前端怎么渲染到页面)

编辑:rootadmin
后端返回PDF文件流,前端处理展示及打印(补:PDF多页不显示问题)

推荐整理分享后端返回PDF文件流,前端处理展示及打印(补:PDF多页不显示问题)(后端返回pdf文件地址,前端怎么渲染到页面),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:后端返回pdf文件流,后端返回pdf文件地址,前端怎么渲染到页面,后端返回pdf文件,并打印,后端返回pdf文件地址,前端怎么渲染到页面,后端返回pdf文件地址前端页面预览,后端返回pdf文件url,前端怎么处理,后端返回pdf文件流,后端返回pdf文件流,内容如对您有帮助,希望把文章链接给更多的朋友!

国庆突如其来的加班q.q,上午接到的需求,只能起床啦

自己也是第一次接触这种业务需求,进行了一顿cv大法,网上有很多版本,个人学习借鉴(cv)了一下,在这里做个学习记录,欢迎各位指正优化,参考学习,如有侵权立即删除。

printDialog.vue(PDF使用弹窗展示,确认btn打印)

HTML

<template> <div> <el-dialog title="打印" :visible.sync="dialogVisible" width="50%"> <div class="box"> <pdf ref="pdf" :src="pdfUrl"></pdf> </div> <span slot="footer" class="dialog-footer"> <el-button @click="dialogVisible = false">取 消</el-button> <el-button type="primary" @click="$refs.pdf.print()" >确 定</el-button > </span> </el-dialog> </div></template>

js

<script>//插件vue-pdf-signatureimport pdf from "vue-pdf-signature";import CMapReaderFactory from "vue-pdf-signature/src/CMapReaderFactory.js";export default { components: { pdf, }, data() { return { dialogVisible: false, pdfUrl:'' }; }, methods:{ init(res){ this.dialogVisible = true; this.getObjectURL(res) }, // 将返回的文件流数据转换为url(data: 文件流数据) getObjectURL(data) { let url = null; let file = new Blob([data], { type: "application/pdf" }); if (window.createObjectURL != undefined) { // 通用 url = window.createObjectURL(file); } else if (window.webkitURL != undefined) { // 兼容谷歌 try { url = window.webkitURL.createObjectURL(file); } catch (error) {} } else if (window.URL != undefined) { // 兼容其他 try { url = window.URL.createObjectURL(file); } catch (error) {} } //这里是重点,将处理的url使用CMapReaderFactory方法在进行处理 url = pdf.createLoadingTask({ url: url, CMapReaderFactory }); // 将转化后url赋值 this.pdfUrl = url; }, }};</script>父组件.vue(btn点击)

HTMl

<el-button size="small" type="primary" @click="subscriptionPrinting()" >打印</el-button>//弹窗<print-dialog ref="printDialog" ></print-dialog>

js

<script>import printDialog from "./printDialog.vue";export default { components: { printDialog, }, methods:{ subscriptionPrinting() { this.$http .get( `请求~~~`, { responseType: "blob",//这个必须带 } ) .then(({ data: res }) => { this.$refs['printDialog'].init(res); }); }, }</script>

以上就是全部代码了,坑还是比较多的以下来进行总结

1.插件的使用

后端返回PDF文件流,前端处理展示及打印(补:PDF多页不显示问题)(后端返回pdf文件地址,前端怎么渲染到页面)

  使用的是vue-pdf-signature而不是vue-pdf,是因为vue-pdf在第一次正常打开会正常显示,第二次打开会显示空白,控制台会提示报错(Error during font loading: Failed to execute 'postMessage' on 'Worker': ArrayBuffer at index 0 is already detached),vue-pdf-signature是大佬针对vue-pdf出现的这一问题进行的改良版。细看可前往大佬链接~

vue-pdf踩坑指南_快进小树林的博客-CSDN博客

2.不显示中文

  通过引入CMapReaderFactory.js解决,但是引入会出现1所描述的问题,所以采用了vue-pdf-signature进行解决(崇拜大佬ing)

3.向后端请求解析失败问题(显示空白,控制台提示报错)

  在请求中添加{              responseType: "blob",//这个必须带             }即可解决。

  请求回的文件流所做的数据处理在上面代码有注释,详看翻上

4.打印调用$refs.pdf.print()即可。

*补:PDF多页不展示问题

在处理返回流的方法(getObjectURL)中,this.numPages在data中

getObjectURL(data) { let url = null; let file = new Blob([data], { type: "application/pdf" }); if (window.createObjectURL != undefined) { // 通用 url = window.createObjectURL(file); } else if (window.webkitURL != undefined) { // 兼容谷歌 try { url = window.webkitURL.createObjectURL(file); } catch (error) {} } else if (window.URL != undefined) { // 兼容其他 try { url = window.URL.createObjectURL(file); } catch (error) {} } //这里是重点,将处理的url使用CMapReaderFactory方法在进行处理 url = pdf.createLoadingTask({ url: url, CMapReaderFactory }); url.promise.then(pdf=>{ this.unmPages = pdf.numPages // 将转化后url赋值 this.pdfUrl = url; },

html处

<div class="box"> <pdf ref="pdf" :src="pdfUrl" v-for="item in numPages" :key="index" :page="item"></pdf></div><el-button type="primary" @click="$refs.pdf[0].print()" >打 印</el-button >

处理pdf多页不展示问题

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

上一篇:Win7系统真三国无双提示无法找到XAPOFX1_5.dll的解决(真三国在哪下载)

下一篇:小孩不爱吃蔬菜怎么办(小孩不爱吃蔬菜怎么办?)

  • 同程旅行机票盲盒多久一期(同程旅行机票盲盒有几个目的地)

    同程旅行机票盲盒多久一期(同程旅行机票盲盒有几个目的地)

  • 降噪和通透模式有什么区别

    降噪和通透模式有什么区别

  • 探探一天能配对多少人(探探一天只能匹配到一个人)

    探探一天能配对多少人(探探一天只能匹配到一个人)

  • 微信好友删了怎么找回(微信好友删了怎么找回聊天记录)

    微信好友删了怎么找回(微信好友删了怎么找回聊天记录)

  • 云闪付付款码 多久有效(云闪付付款码截图发给别人能用吗)

    云闪付付款码 多久有效(云闪付付款码截图发给别人能用吗)

  • win10隐藏桌面图标快捷键(win10隐藏桌面图标软件)

    win10隐藏桌面图标快捷键(win10隐藏桌面图标软件)

  • 抖音亮灯牌是什么意思(抖音亮灯牌是什么意思呀)

    抖音亮灯牌是什么意思(抖音亮灯牌是什么意思呀)

  • 钉钉退出企业别人有提示吗(钉钉然后退出企业)

    钉钉退出企业别人有提示吗(钉钉然后退出企业)

  • 腾讯会议开启会议直播是什么功能(腾讯会议开启会议直播是什么意思)

    腾讯会议开启会议直播是什么功能(腾讯会议开启会议直播是什么意思)

  • 幻灯片放映类型(幻灯片放映类型在哪里设置)

    幻灯片放映类型(幻灯片放映类型在哪里设置)

  • 小米mix5什么时候发布(小米mix5什么时候发布最新)

    小米mix5什么时候发布(小米mix5什么时候发布最新)

  • 快手的动态为什么会自动减少(快手的动态为什么不刷新)

    快手的动态为什么会自动减少(快手的动态为什么不刷新)

  • 闲鱼资金保护中什么意思(闲鱼资金保护中 啥时候到账)

    闲鱼资金保护中什么意思(闲鱼资金保护中 啥时候到账)

  • mate30rs是5g吗(mate30rs好吗)

    mate30rs是5g吗(mate30rs好吗)

  • 手机怎么找到淘宝删除的订单(手机怎么找到淘宝购物车删除的东西)

    手机怎么找到淘宝删除的订单(手机怎么找到淘宝购物车删除的东西)

  • dlp是什么意思(医保dip是什么意思)

    dlp是什么意思(医保dip是什么意思)

  • 网易云附近人功能在哪里(网易云里附近的人)

    网易云附近人功能在哪里(网易云里附近的人)

  • 苹果6splus和苹果11屏幕对比(苹果6splus和苹果6plus有什么区别)

    苹果6splus和苹果11屏幕对比(苹果6splus和苹果6plus有什么区别)

  • 华为荣耀9x有没有指纹(华为荣耀9X有没有快充)

    华为荣耀9x有没有指纹(华为荣耀9X有没有快充)

  • 红米note8pro出厂带贴膜吗(红米note8pro出厂系统版本)

    红米note8pro出厂带贴膜吗(红米note8pro出厂系统版本)

  • 手机黑屏怎么唤醒小爱同学(手机黑屏怎么唤醒小v)

    手机黑屏怎么唤醒小爱同学(手机黑屏怎么唤醒小v)

  • cad图纸比例怎么看(cad图纸比例怎么换算)

    cad图纸比例怎么看(cad图纸比例怎么换算)

  • 苹果13黑夜模式在哪里(苹果13黑夜模式烧屏不)

    苹果13黑夜模式在哪里(苹果13黑夜模式烧屏不)

  • 电话打多了会封号吗(电话打多了会封卡了会使用不了吗)

    电话打多了会封号吗(电话打多了会封卡了会使用不了吗)

  • 网易云音乐为什么打不开(网易云音乐为什么会自动播放)

    网易云音乐为什么打不开(网易云音乐为什么会自动播放)

  • iqooneo手机发布时间(iqooneo7上市时间)

    iqooneo手机发布时间(iqooneo7上市时间)

  • 乐视视频如何定时关机(乐视视频怎么设置定时关闭)

    乐视视频如何定时关机(乐视视频怎么设置定时关闭)

  • iPhone手机怎么把搜狗输入法设为默认输入法(iphone手机怎么把电话号码转到sim)

    iPhone手机怎么把搜狗输入法设为默认输入法(iphone手机怎么把电话号码转到sim)

  • 电脑输入法设置默认教程(电脑输入法设置搜狗输入法)

    电脑输入法设置默认教程(电脑输入法设置搜狗输入法)

  • 目标检测算法——垃圾分类数据集汇总(附下载链接)(目标检测算法的主要目的是找到图像中用户感兴趣的)

    目标检测算法——垃圾分类数据集汇总(附下载链接)(目标检测算法的主要目的是找到图像中用户感兴趣的)

  • Python数学建模三剑客之Numpy(python数学建模资料)

    Python数学建模三剑客之Numpy(python数学建模资料)

  • day29--Java泛型02

    day29--Java泛型02

  • 财税2019 21号第二条
  • 移动发票抬头个人税号公司能报销吗
  • 安全生产费计提没用可以冲吗
  • 注册资本金实缴和认缴区别
  • 取得虚开增值税专用发票罪
  • 土地补偿款涉及哪些法律
  • 财务中预付账款是什么意思
  • 企业注销建造师流程
  • 企业支付的工伤赔偿需要什么材料
  • 没有建筑资质能办安全生产许可证吗
  • 汽车配件税收分类编码
  • 企业或员工获得的相关荣誉
  • 内含报酬率的计算公式插值法
  • 基础年收入是什么意思
  • 租赁产生的成本有哪些
  • 合并报表的收入
  • 出口货物收汇是什么意思
  • 企业所得税的计算公式及实例
  • 公司开13个点增值税交多少钱
  • 汇兑损益 纳税调整
  • mxoaldr.exe - mxoaldr是什么进程 有什么用
  • win11无法安装程序包
  • intel me有什么用
  • 开办费的账务处理实例
  • 经营出租的机器设备需要计提折旧吗
  • 实际缴纳消费税是什么意思
  • 企业的支出包括
  • 代理记账费用计入什么会计科目
  • 一头公牛和一头母牛,答五个字
  • 企业资产负债表有何作用
  • 费尔南迪纳岛气候类型
  • 企业股股票
  • 公司注销时做哪些财务处理
  • 工业设备类型分为以下三类
  • vue 百度地图 移动端
  • 雷达信号pri
  • 20221年最新
  • php中preg_replace_callback函数简单用法示例
  • 开了红字发票申请还要做进项税转出吗
  • 判断文件是否存在,存在则删除
  • 开源php 系统
  • 资产是指()
  • 子公司注销时的账务处理
  • 最新个人捐款是什么意思
  • 增量留抵税额怎么算
  • 个人工资薪金如何零申报
  • 金税四期对纳税人的影响有哪些
  • 一般纳税人企业所得税税率多少
  • 流动资产属于经营资产还是得经营资产
  • 新契税法商业
  • 3%税率专票为什么不能抵扣
  • 水果店的账务处理
  • 金蝶k3如何反记账
  • 结转本月销售材料成本
  • linux系统基本指令
  • linux终端基础命令
  • ubuntu系统如何
  • dae是什么文件
  • win7win8.1win10哪个好
  • mmtray2k.exe有什么作用 是什么进程 mmtray2k进程查询
  • linux中的top命令
  • win7系统无线网络
  • root什么玩意
  • linux卸载repo
  • 开发者学校
  • 深入理解新发展理念心得体会3篇
  • ext combox 下拉框不出现自动提示,自动选中的解决方法
  • 从《AndEngine游戏开发实践指南》开始,学习AndEngine引擎
  • 杂志内页广告
  • perl and
  • ide通道怎么打开
  • sed查找字符串
  • photon server 限制防火墙
  • js判断ua
  • android software
  • unity3drpg游戏
  • 重庆市国家税务局电子税务局官网
  • 湖北农信换手机登录不了
  • 2021年徐州农村合作医疗
  • 退休人员还写工作单位吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设