位置: 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的解决(真三国在哪下载)

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

  • 色素分子主要存在于哪里(色素构成)

    色素分子主要存在于哪里(色素构成)

  • 腾讯会议手机共享屏幕没有声音(腾讯会议手机共享屏幕声音)

    腾讯会议手机共享屏幕没有声音(腾讯会议手机共享屏幕声音)

  • 怎么用抖音直播电影(电脑怎么用抖音直播)

    怎么用抖音直播电影(电脑怎么用抖音直播)

  • 电脑打字怎样分段

    电脑打字怎样分段

  • 苹果手机锁屏后自动亮屏(苹果手机锁屏后时间显示变暗了)

    苹果手机锁屏后自动亮屏(苹果手机锁屏后时间显示变暗了)

  • windows ssd是什么意思(windows—ssd)

    windows ssd是什么意思(windows—ssd)

  • 打qq电话对方正在通话中是什么意思(打QQ电话对方正在其他设备)

    打qq电话对方正在通话中是什么意思(打QQ电话对方正在其他设备)

  • 苹果手机充满电不拔有事吗(苹果手机充满电怎么显示)

    苹果手机充满电不拔有事吗(苹果手机充满电怎么显示)

  • 微信扬声器播放,为什么还是从听筒播放(微信扬声器播放语音)

    微信扬声器播放,为什么还是从听筒播放(微信扬声器播放语音)

  • 抖音拉黑和删除的区别(抖音拉黑和删除的哪个更伤人)

    抖音拉黑和删除的区别(抖音拉黑和删除的哪个更伤人)

  • 微信群为什么只能加40人(微信群为什么只能3个管理员)

    微信群为什么只能加40人(微信群为什么只能3个管理员)

  • 小米平板网速慢(小米平板网速慢怎么回事)

    小米平板网速慢(小米平板网速慢怎么回事)

  • 苹果11promax按开机键没反应(苹果11promax开机按半天没反应)

    苹果11promax按开机键没反应(苹果11promax开机按半天没反应)

  • 产品激活失败有影响吗(产品激活失败有什么影响)

    产品激活失败有影响吗(产品激活失败有什么影响)

  • 怎么让字体竖着(ae怎么让字体竖着)

    怎么让字体竖着(ae怎么让字体竖着)

  • 华为字幕功能有什么用(华为字幕开启后怎么用)

    华为字幕功能有什么用(华为字幕开启后怎么用)

  • 如何用ps缩小图片内存(如何用ps缩小图片大小kb)

    如何用ps缩小图片内存(如何用ps缩小图片大小kb)

  • word怎么增加目录(word怎么添加目录页)

    word怎么增加目录(word怎么添加目录页)

  • 手机qq怎么加分组(手机qq怎么增加好友分组)

    手机qq怎么加分组(手机qq怎么增加好友分组)

  • 苹果信号edge什么意思(描写建筑工人的文章)

    苹果信号edge什么意思(描写建筑工人的文章)

  • qq怎么发动态说说(qq怎么发动态说说不显示手机型号)

    qq怎么发动态说说(qq怎么发动态说说不显示手机型号)

  • 手机wifi无法访问互联网(手机WiFi无法访问互联网)

    手机wifi无法访问互联网(手机WiFi无法访问互联网)

  • 电脑网速测试是什么,在哪里能够打开?(电脑自带网速测试)

    电脑网速测试是什么,在哪里能够打开?(电脑自带网速测试)

  • 在路由器设置中禁止别人连接自己WIFI的操作方法?(在路由器设置中怎么设置)

    在路由器设置中禁止别人连接自己WIFI的操作方法?(在路由器设置中怎么设置)

  • 为远程群辉NAS配置固定二级子域名【内网穿透】(远程访问群晖nas)

    为远程群辉NAS配置固定二级子域名【内网穿透】(远程访问群晖nas)

  • 税务基本任务和稽查范围?
  • 往年有亏损本年没有亏损
  • 税控技术服务费280每年都可以抵
  • 偶然所得税起征点800是每月吗
  • 实际负税计算公式
  • 用友t6会计科目在哪里找
  • 报表中的存货是如何填报的
  • 出差加油算什么费用
  • 技术合同免税备案流程2022年
  • 未提供一般纳税人证明
  • 增值税怎么纳税比率
  • 交易性金融资产公允价值变动计入
  • 增资后调减资本怎么计算
  • 股权转让金是什么意思
  • 个体工商户开具增值税专用发票
  • 个体行业哪些不需要交税
  • 从境外取得的佣金
  • 上海市购销合同印花税计税金额怎么算?
  • 出口退税退的是进项税还是销项税
  • 招行理财产品哪些可靠
  • 公司房产税如何计算器
  • 电动车固定资产报废年限是多少年
  • 利润表有盈利能力吗
  • 计提利息收入怎么做账
  • 劳务费的现金流量是什么
  • 出口转内销的销项税怎么计算
  • 税务稽查可以不罚款的情形
  • 个税汇算清缴申报错误怎么办
  • svchost很多进程
  • 网络和共享中心在哪里打开
  • 购货款先到支付后付款
  • PHP:pg_untrace()的用法_PostgreSQL函数
  • PHP:proc_get_status()的用法_命令行函数
  • 进货退回的会计处理
  • 文化传媒公司的部门
  • 销售产品的运输费属于什么会计科目
  • php最安全的登录功能
  • 百度地图api的使用
  • 期末余额跟年初余额是什么意思
  • php json格式
  • php cat
  • vue项目移动端怎么做适配
  • 【JavaScript】【5】定时器(包含回调函数与Promise)
  • 牛客前端刷题怎么样
  • 微信收款怎么做会计分录
  • 帝国cms灵动标签怎么调用
  • 公司扣除保险费会计分录
  • 成本核算的意义是什么
  • 退个税需要提供哪些资料
  • 筹资活动产生的现金流量净额减少说明什么
  • 现金收支月报表
  • 小规模纳税人增值税计算公式
  • acca考试安排及时间
  • 营改增后不动产转让增值税
  • 招待费住宿
  • 成本不够如何计算出来
  • 非正常损失的原因是什么
  • 预付账款怎么转
  • 银行对账单上借贷方什么意思
  • 商品储存的基本要求是什么?
  • 延期支票可以撤回吗
  • freebsd软件包存储库
  • linux系统怎么切换到命令行
  • 获取windows的最新信息
  • win7系统玩游戏怎么样
  • js里的this指向
  • 批处理文本文件如何建立
  • shell脚本编程实例
  • unity3d手机怎么打开
  • jquery弹出div遮罩层
  • javascript学习指南
  • android fragmentactivity
  • jquery访问本地html
  • android图片压缩库
  • 怎样学好js中的逻辑
  • 如何抵扣
  • 财税公司经营范围介绍
  • 常态化与长效化的区别
  • 江苏税务局人工电话
  • 百旺税控盘口令错误被锁了怎么办
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设