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

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

  • 12306怎么订儿童票(12306如何儿童买票)

    12306怎么订儿童票(12306如何儿童买票)

  • 哔哩哔哩声音太小(哔哩哔哩声音太小电脑)

    哔哩哔哩声音太小(哔哩哔哩声音太小电脑)

  • 苹果手机显示耳机模式怎么调回来(苹果手机显示耳朵怎么取消)

    苹果手机显示耳机模式怎么调回来(苹果手机显示耳朵怎么取消)

  • 微信关注过的公众号怎么找(微信关注过的公众号有记录么)

    微信关注过的公众号怎么找(微信关注过的公众号有记录么)

  • 华为p40防抖功能怎么设置(华为p40手机防抖功能怎么打开)

    华为p40防抖功能怎么设置(华为p40手机防抖功能怎么打开)

  • 图片为什么在word里面显示一部分(图片为什么在word里面放不到边)

    图片为什么在word里面显示一部分(图片为什么在word里面放不到边)

  • 手机充电冒烟还能用吗(手机充着电突然冒烟)

    手机充电冒烟还能用吗(手机充着电突然冒烟)

  • 荣耀十屏幕尺寸(华为荣耀十手机屏幕尺寸)

    荣耀十屏幕尺寸(华为荣耀十手机屏幕尺寸)

  • 三星s20国行和港版有什么区别(三星s20国行和港行有什么区别)

    三星s20国行和港版有什么区别(三星s20国行和港行有什么区别)

  • 手机模型和手机的区别(手机模型和手机一样吗)

    手机模型和手机的区别(手机模型和手机一样吗)

  • 怎样拍电脑照片无条纹(怎么拍电脑图片效果会好)

    怎样拍电脑照片无条纹(怎么拍电脑图片效果会好)

  • 联想小新背光键盘怎么开(联想小新背光键盘怎么开启背光)

    联想小新背光键盘怎么开(联想小新背光键盘怎么开启背光)

  • iphone8双卡双待吗(苹果八双卡双待)

    iphone8双卡双待吗(苹果八双卡双待)

  • 华为nova3长度和宽度(华为nova3手机长度和宽度)

    华为nova3长度和宽度(华为nova3手机长度和宽度)

  • 苹果手机抬头灯在哪里(苹果手机抬头灯怎么设置)

    苹果手机抬头灯在哪里(苹果手机抬头灯怎么设置)

  • vivos1微信视频美颜怎么弄(vivos1微信视频美颜在哪里)

    vivos1微信视频美颜怎么弄(vivos1微信视频美颜在哪里)

  • 手机照片太大不能上传(手机照片太大不能做微信头像)

    手机照片太大不能上传(手机照片太大不能做微信头像)

  • 京东账号是什么(怎么查看自己的京东账号)

    京东账号是什么(怎么查看自己的京东账号)

  • lol分辨率多少合适(lol 分辨率)

    lol分辨率多少合适(lol 分辨率)

  • 新时达08故障怎么处理(新时达08故障怎么处理视频)

    新时达08故障怎么处理(新时达08故障怎么处理视频)

  • xbox软件能不能卸载(xbox可以装哪些软件)

    xbox软件能不能卸载(xbox可以装哪些软件)

  • 美图秀秀怎么发表(美图秀秀怎么发布配方)

    美图秀秀怎么发表(美图秀秀怎么发布配方)

  • 绿钻怎么关闭自动续费(绿钻怎么关闭自动续费会员)

    绿钻怎么关闭自动续费(绿钻怎么关闭自动续费会员)

  • 羊毛衫变形、起小绒球,怎么办?(羊毛衫变形了还能变回来吗)

    羊毛衫变形、起小绒球,怎么办?(羊毛衫变形了还能变回来吗)

  • 织梦调用文章属性的名称(调用自定义属性名称)(织梦怎么采集文章)

    织梦调用文章属性的名称(调用自定义属性名称)(织梦怎么采集文章)

  • 自然人电子税务局
  • 如何判断销售额含税还是不含税
  • 支付电费未开具发票
  • 开普票的销项税额
  • 企业外币账户怎么开通
  • 公司商标注册费用属于什么费用
  • 什么是居民纳税人
  • 所有者投入的资本属于什么科目
  • 自然灾害导致的车损可以理赔嘛
  • 估算成本的会计要素
  • 销售收入包括应收销货款
  • 利息收入可以作为业务招待费的基数吗
  • 影院分成为什么那么高
  • 职工旅游费计入什么科目
  • 公司租土地建厂房合法吗
  • 办理完税务手续是否还需要报税?
  • 非全日制员工个税扣除标准
  • 原始凭据
  • 电子银行承兑汇票到期选择线上清算
  • 租税联动政策
  • 民办学校会计分录 百度网盘
  • 纳税所得额怎么算个税
  • 固定资产摊销怎么做
  • 生产企业出口需要什么手续
  • 药店 医保收入占比
  • 拍短视频服务费怎么算
  • 企业所得税计算方法公式
  • php静态变量生命周期
  • linux中怎么安装GUI
  • 购货方收到红字发票怎么报税
  • 房产证办理流程图
  • 若依框架讲解
  • json格式字符串提取值
  • 应扣未扣应收未收税款是什么意思
  • 宝塔面板安装zabbix
  • php实用教程
  • 报销单跨月怎么记账
  • 个体工商户必须报税吗
  • 质量扣款可以放到费用吗
  • sql server 2008打开界面
  • sql2008r2怎么用
  • 企业固定资产折旧可以按照其价值和使用情况
  • 增值税进项税销项税月末需要结转吗
  • 专用发票不抵扣联可以当普票用吗?
  • 主营业务收入借方表示
  • 一般纳税人抵扣进项税流程
  • 开票金额大于付款金额 多余部分为返点
  • 如何办理公司注册地址变更
  • 销项负数发票怎么冲减成本
  • 营业成本包括哪些会计科目
  • jdbc数据库连接步骤
  • linux彻底卸载软件
  • 更新最新版win11,任务栏不见了
  • CentOS操作系统
  • xp系统如何查询配置
  • mac系统不能升级怎么办
  • 支持iphone
  • win7系统的wlan在哪里?
  • linux 翻译
  • js时间日期
  • unity urp 性能
  • javascript怎么设置
  • excel表格布局
  • angular.js
  • node.js server-side
  • Unity3D游戏开发pdf
  • jquery教程w3c
  • node.js如何运行
  • nodejs gyp
  • javascript实现3D切换焦点图
  • JavaScript 入门·JavaScript 具有全范围的运算符
  • javascript要怎么学
  • bootstrap和css的关系
  • 税票开票员的职责
  • 金税盘联网步骤
  • 公司0申报怎么申报视频
  • 地税的发票是什么样
  • 南通买房首付规定
  • 跨境电商上什么货源好
  • 网上订机票怎么取票
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设