js 调用浏览器打印功能

编程入门 行业动态 更新时间:2024-10-18 22:34:21

功能需求:店家从商家后台调用打印机打印送货单,送货单信息:二维码,地址,电话等等

首先拆分功能点:生成二维码、调用浏览器打印机打印订单 (二维码使用qrcode.react第三方生成,二维码格式为canvas,但是浏览器打印不能识别canvas格式,qrcode.react (v7.1.2) 。具体如下)

  1. 二维码生成使用qrcode.react
             <QRCode value={`${orderInfo.orderSn}`} size={80}/>
             {/*value(string) 写法{`${orderInfo.orderSn}`}*/} 
             文档要求value值string,v7.1.2
  1. 调用浏览器打印机 window.print()
			// html
			<div id="order-print" style={{ display: 'none'}}>
				<!--content-->
         	 </div>

		 	//javascript
		 	  printOrder = async () => {
		 	  	await this.convertCanvasToImage();
		 	  	//获取打印内容最外层dom节点
    			let bdHtml = window.document.getElementById("order-print").innerHTML;
    			//打印内容赋值innerHTML绘制新页面(window.print()打印当前页)
    			window.document.body.innerHTML = bdHtml;
    			//调用浏览器打印机
    			window.print(); 
    			//刷新页面返回当前页
   				location.reload();
 			 };

执行代码发现,二维码无法显示在打印内容中,通过查看qrcode.react底层图形绘制,发现生成得二维码是canvas格式,浏览器的打印无法识别canvas,所以不能显示在打印内容上面,可以服务端生成二维码,前端拿url放img显示打印,也可以知道二维码图像格式canvas,我们就可以把canvas转为image格式,再去打印,前端实现方法如下如下:

 			//首页在页面初始渲染时将二维码生成,并隐藏(视业务需求而定)
 			<div style={{display: 'none'}}>
              <QRCode value={`${orderInfo.orderSn}`} size={80}/>
              {/*value(string) 写法{`${orderInfo.orderSn}`}*/}
            </div>
            
			//需要在调用打印方法之前将canvas转为image,所以在打印内容中添加一个img-qrcode节点,
			将初始渲染的二维码转为image格式,再插入到打印内容的img-qrcode节点中,然后调用打印事件。
			<div id="order-print" style={{ display: 'none'}}>
				<!--content-->
				<div id="img-qrcode"></div>
         	 </div>
		
  			convertCanvasToImage = () => {
  				//因为当前页只要一个canvas节点,所以获取第一个canvas节点
    			let myCanvas1 = document.getElementsByTagName('canvas')[0]; 
    			//获取二维码所在父级dom节点
    			let element = document.getElementById("img-qrcode");
    			//实例化image对象
   			    let image = new Image();
   			    //将canvas格式二维码转为image/png格式
    			image.src = myCanvas1.toDataURL("image/png");
    			//插入所需节点
    			element.appendChild(image);
 	 		 };

链接打印机,执行打印事件,打印浏览器打印,打印所需内容


如有疑问请留言。

更多推荐

js 调用浏览器打印功能

本文发布于:2023-06-14 02:27:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1428110.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:浏览器   功能   js

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!