批量生成带编号的二维码

今天需要打印一百张带编号的二维码,类似于小黄的二维码,底部有编号。就是这种:

我把网址提供给采购,淘宝居然让我们提供一百张图片。

做为一个心地善良的程序员,我绝对不可能发给设计狮 100 张二维码,让她加班 PS 添加编号一百次。同时做为一个会偷懒的程序员,首先要去 Google,寻找现成的轮子。

一番忙碌后,在线版、excel 插件版、软件版,没有一个满足需求。自己动手,丰衣足食。

原理很简单,首先生成二维码的 base64 编码,然后画在 canvas 里,同样写上文字,在循环生成批量下载就 OK 啦!

生成二维码的 base64 编码(详见参考资料里的 node-qrcode 文档)

QRCode.toDataURL('https://ofo.so/plate/'+i, function (error, url) {
    if (error) console.error(error)
    console.log(url);
});

在 canvas 画二维码

var canvas = document.getElementById('canvas');
var ctx = canvas.getContext('2d');
var image = new Image();
image.onload = function() {
  ctx.drawImage(image,  0, 0);
};
image.src = url;

在二维码下方写上文字

ctx.font = '25px 黑体';
ctx.fillText(i, 15, 150);

下载

var a = document.createElement('a'), 
e = document.createEvent('MouseEvents'); 
e.initEvent('click', false, false); 
a.href = href; 
a.download = name; 
a.dispatchEvent(e); 

效果如下:


参考资料:

https://github.com/soldair/node-qrcode
http://www.jq22.com/webqd4287
https://developer.mozilla.org/en-US/docs/Web/API/Canvas_API