Fork me on GitHub

Ant Design + qrcode实现打印功能

react本身有一些打印的组件,但都不好用,都是基于window.print()window.print()直接打印的话,处理直接当前网页的body设置为你要打印的区域,但是当你取消打印的时候你会发现整个网页都被你要打印的区域占满了,你还得用window.reload()重新加载一下页面,用户交互很不好,建议不要采用这种方式。

React

QRCode.js 生成二维码

QRCode.js 是一个用于生成二维码图片的插件。

使用方法

载入 JavaScript 文件

1
<script src="qrcode.js"></script>

DOM 结构

1
<div id="qrcode"></div>

调用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// 简单方式
new QRCode(document.getElementById('qrcode'), 'your content');

// 设置参数方式
var qrcode = new QRCode('qrcode', {
text: 'your content',
width: 256,
height: 256,
colorDark : '#000000',
colorLight : '#ffffff',
correctLevel : QRCode.CorrectLevel.H
});

// 使用 API
qrcode.clear();
qrcode.makeCode('new content');

Ant Design里使用

react中一般生成二维码都是用react.qrcode,但是发现这玩意生成的是canvas,不是图片,打印的时候预览不出来。所以我想进一切办法去把canvas转成图片,无奈拿不到这个canvas标签。最后还是用js的qrcode来生成二维码,这样生成的默认是base64位的图片,打印正常。代码如下:

安装

cnpm install qrcode --save

在页面上引入

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59

import React, { Component} from 'react';
import styles from './ActivityDetail.less';
import {
Button,
message
} from 'antd';
import * as QrCodeEs from 'qrcode';


class ActivityDetail extends Component {
state = {
qrcodeImg:'', // 二维码图片地址
};


// 生成二维码点击
pathQRCodeClick(item) {
QrCodeEs.toDataURL(item._id)
.then(url => {
console.log('url=====<<<<',url)
this.setState({
qrcodeImg:url
})
})
.catch(err => {
console.error(err)
})
}

// 确定-打印二维码
handleOk = e => {
const { item } = this.props.location;
const win = window.open('','printwindow');
let codeHtml = '<div style="text-align: center;color: red;font-size: 40px;margin-bottom: 10px;margin-top: 40px">活动二维码</div><br/>\n' +
'<div style="font-size: 26px;text-align: center;">'+ item.name +'</div><br/>\n' +
'<img style="font-size: 26px;width: 340px;position: absolute;left: 50%;margin-left: -170px;" src='+ this.state.qrcodeImg +' alt="教科所" />\n'
win.document.write(codeHtml);
win.print();
win.close()
message.success('打印成功!');
this.setState({
visible: false,
});
};

render(){
return(
<div>
<Button onClick={()=>{this.pathQRCodeClick(item)}} style={{marginLeft:'24px'}} type="primary">生成二维码</Button>
<div style={{width:'50%',margin:'auto'}}>
<img id='imgCode' style={{width: '100%'}} src={this.state.qrcodeImg} alt="二维码" ></img>
</div>
</div>
)
}
}

export default ActivityDetail;

本文标题:Ant Design + qrcode实现打印功能

文章作者:DRLong

发布时间:2019年06月13日 - 18:06

原始链接:https://duanruilong.github.io/2019/06/13/Ant-Design-qrcode实现打印功能/ 复制文章链接==>

-------------我是一条分割线感谢您的阅读-------------
DRLong WeChat Pay

微信打赏

DRLong Alipay

支付宝打赏