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

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

  • 微信朋友圈营销要掌握的要点(微信朋友圈营销方案)

    微信朋友圈营销要掌握的要点(微信朋友圈营销方案)

  • 华为手机运动步数开关在哪里(华为手机运动步数不准确,如何矫正)

    华为手机运动步数开关在哪里(华为手机运动步数不准确,如何矫正)

  • 微信群投票怎么发起(微信群投票怎么搞)

    微信群投票怎么发起(微信群投票怎么搞)

  • 华为手环心率准吗(华为手环心率准不准)

    华为手环心率准吗(华为手环心率准不准)

  • b站私信频率太高多久恢复(b站私信太频繁)

    b站私信频率太高多久恢复(b站私信太频繁)

  • 手机爱奇艺怎么扫描二维码(手机爱奇艺怎么退出登录)

    手机爱奇艺怎么扫描二维码(手机爱奇艺怎么退出登录)

  • 网上共享的资源有哪三种(网上共享资源有什么软件)

    网上共享的资源有哪三种(网上共享资源有什么软件)

  • 怎么没有极速退款了(怎么没有极速退款了淘宝)

    怎么没有极速退款了(怎么没有极速退款了淘宝)

  • vivo手机照片怎么传到另一个手机(vivo手机照片怎么备份到云端)

    vivo手机照片怎么传到另一个手机(vivo手机照片怎么备份到云端)

  • 5g来了wifi版ipad能用吗(ipad5g版和wifi版是什么意思)

    5g来了wifi版ipad能用吗(ipad5g版和wifi版是什么意思)

  • 电脑进入guest怎么退出(电脑直接进入guest)

    电脑进入guest怎么退出(电脑直接进入guest)

  • 华为荣耀20lite是什么型号(华为荣耀20lite价格多少)

    华为荣耀20lite是什么型号(华为荣耀20lite价格多少)

  • v2ray是什么(v2ray是什么代理)

    v2ray是什么(v2ray是什么代理)

  • 苹果手机怎么放大图片中的一部分(苹果手机怎么放小屏)

    苹果手机怎么放大图片中的一部分(苹果手机怎么放小屏)

  • 怎么使图片更清晰(怎么使图片更清晰?)

    怎么使图片更清晰(怎么使图片更清晰?)

  • iphone11怎么关闭应用通知(iphone11怎么关闭勿扰模式)

    iphone11怎么关闭应用通知(iphone11怎么关闭勿扰模式)

  • vivox27没有人脸识别(vivox27没有人脸识别功能吗)

    vivox27没有人脸识别(vivox27没有人脸识别功能吗)

  • 淘宝锁单是什么意思啊(淘宝锁单的时间是多久)

    淘宝锁单是什么意思啊(淘宝锁单的时间是多久)

  • 华为云空间怎么删除(华为云空间怎么转到小米手机上)

    华为云空间怎么删除(华为云空间怎么转到小米手机上)

  • 怎么用ps换照片底色(怎么用ps换照片衣服颜色)

    怎么用ps换照片底色(怎么用ps换照片衣服颜色)

  • 苹果怎么下载qq的文件(苹果怎么下载qq软件并安装)

    苹果怎么下载qq的文件(苹果怎么下载qq软件并安装)

  • 余额宝账单明细怎么删除(余额宝账单明细只显示消费为什么)

    余额宝账单明细怎么删除(余额宝账单明细只显示消费为什么)

  • 织梦dedecms手机站m目录下不生成index.html实现动态更新(织梦cms怎么样)

    织梦dedecms手机站m目录下不生成index.html实现动态更新(织梦cms怎么样)

  • 2023年印花税如何计算
  • 个税app正式启用
  • 培训会议费能否抵扣
  • 公司买车计算方式
  • 应付账款暂估余额
  • 微信支付宝收入计入科目
  • 作废的支票银行怎么处理
  • 如何申请办理残疾证
  • 房产税收取标准有哪些
  • 现金收据为什么也在自制原始凭证的范畴呢?
  • 免税申请怎么办理
  • 地税能不能查到个人的贷款行为?
  • 固定资产的计税基础6种情况
  • 工厂出租厂房税率
  • 工程完工进项税税务局不给退,走那个科目销毁
  • 专票金额怎么计算
  • 业务招待费中的营业收入包括哪些
  • 住房公积金是全部提取还是留一部分
  • 企业银行密码器
  • 工程施工会计核算方法
  • 分公司注销时有未分配利润需要交税吗
  • 消防安装工程会计核算
  • 企业涉及应付利息的税金
  • 处置报废车辆如何缴纳增值税
  • 跨年销项税红字发票会计处理?
  • windows10找不到用户和组
  • mac菜单栏怎么调出来
  • 开具红字发票后所冲销的销项税应怎么处理?
  • 收到银行电子汇票已入账怎么做账
  • 预计负债是什么原则
  • touch id反应慢
  • PHP:mb_regex_set_options()的用法_mbstring函数
  • 在win10中显示我的电脑
  • 不动产增值税总结
  • kpk是什么文件
  • php extract函数
  • 企业购买预付卡送人分录
  • 什么是实际成本计价
  • 长期股权投资资本化
  • php 写入excel
  • php底层原理
  • tomcat服务器在哪个位置
  • eterm指令退出a
  • laravel实战教程
  • 融资租赁方式的条件
  • 固定资产折旧如何进行会计处理
  • 物业管理费开票类目
  • js中var的用法
  • 劳务公司社保手续办理
  • 土地使用权使用寿命不确定要摊销吗
  • 出口资质证书
  • 简述sql server 2008的新增功能
  • 如何做一份有效的面包
  • 跨年取得的费用票怎么做账
  • 存货报废的会计分录怎么做
  • Linux环境mysql5.7.12安装教程
  • 数据库高并发怎么解决
  • 微软补丁修复时出现蓝屏现象
  • windows10显示
  • centos7.6ssh
  • 怎么快速判断哪些角是第几象限
  • windows软件类型最新版本
  • 苹果电脑如何访问windows共享文件
  • win10应用商店是灰的
  • 虚拟网卡在哪里设置
  • 查看电脑是否可以装两个固态
  • cocoscreator lua
  • android app 源码
  • Particle system study section 1
  • 输入法不跳出中文
  • cocos2dx4.0入门
  • 批量修改ssh配置端口
  • Windows10下安装fastdfs
  • jquery validation plugin
  • 基于vue的ui框架
  • 置顶快手作品怎么弄
  • 江西低保查询系统
  • 湖北省税务申报流程 个体户
  • 个人所得税申请专项扣除有什么用
  • 税务开通需要什么东西
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设