vue实现不预览PDF的情况下打印pdf文件

前景:默认情况,实现打印需要根据预览的内容进行打印。

但是当只有打印按钮存在,不预览文件内容的情况下,实现打印的话,可以通过后端接口返回服务器上PDF的地址,前端通过隐藏的iframe标签中src可实现预览功能
主要是根据pdf的链接地址实现打印pdf

实现方式1:通过fetch()将PDF地址转化为blob

js 复制代码
	print(row) {
      let contractUrl = "http://xxxxxx.pdf"
      fetch(contractUrl).then(res => {
        return res.blob() //将url地址转化为blob
      }).then(res => {
        var iframe = document.createElement('iframe')
        iframe.style.frameborder = 'no'
        iframe.style.display = 'none'
        iframe.style.pageBreakBefore = 'always'
        iframe.setAttribute('id', `printPdf${row.pk}`) //id要是唯一的,不然会获取到上一个PDF文件的内容
        iframe.setAttribute('name', `printPdf${row.pk}`)
        iframe.src = window.URL.createObjectURL(res) //创建一个包含指定对象的URL
        document.body.appendChild(iframe)
        this.doPrint(`printPdf${row.pk}`)
        window.URL.revokeObjectURL(iframe.src) //释放url
      })
    },
    doPrint(val) {
      var ordonnance = document.getElementById(val).contentWindow
      setTimeout(() => {
        ordonnance.print()
      }, 500)
    },

实现方式2:采用文档流的形式解决跨域的问题

js 复制代码
print() {
	// res为接口获取到的pdf文档流数据
	const blob = new Blob([res], {
		type: 'application/pdf'
	})
	var iframe = document.createElement('iframe')
	iframe.style.frameborder = 'no'
	iframe.style.display = 'none'
	iframe.style.pageBreakBefore = 'always'
	iframe.setAttribute('id', 'printPdf')
	iframe.setAttribute('name', 'printPdf')
	iframe.src = window.URL.createObjectURL(blob) //创建一个包含指定对象的URL
	document.body.appendChild(iframe)
	this.doPrint('printPdf')
	window.URL.revokeObjectURL(iframe.src) //释放url

},
doPrint(val) {
	var ordonnance = document.getElementById(val).contentWindow
	setTimeout(() => {
		ordonnance.print()
	}, 500)
},
相关推荐
GISer_Jing2 小时前
前端面试通关:Cesium+Three+React优化+TypeScript实战+ECharts性能方案
前端·react.js·面试
落霞的思绪3 小时前
CSS复习
前端·css
咖啡の猫5 小时前
Shell脚本-for循环应用案例
前端·chrome
百万蹄蹄向前冲7 小时前
Trae分析Phaser.js游戏《洋葱头捡星星》
前端·游戏开发·trae
朝阳5818 小时前
在浏览器端使用 xml2js 遇到的报错及解决方法
前端
GIS之路8 小时前
GeoTools 读取影像元数据
前端
ssshooter9 小时前
VSCode 自带的 TS 版本可能跟项目TS 版本不一样
前端·面试·typescript
Jerry9 小时前
Jetpack Compose 中的状态
前端
dae bal10 小时前
关于RSA和AES加密
前端·vue.js
柳杉10 小时前
使用three.js搭建3d隧道监测-2
前端·javascript·数据可视化