jquery.qrcode和jqprint的联合使用,实现html生成二维码并打印(中文也ok)
属性:
debug: false, //如果是true则可以显示iframe查看效果(iframe默认高和宽都很小,可以再源码中调大),默认是false importCSS: true, //true表示引进原来的页面的css,默认是true。(如果是true,先会找$("link[media=print]"),若没有会去找$("link")中的css文件) printContainer: true, //表示如果原来选择的对象必须被纳入打印(注意:设置为false可能会打破你的CSS规则)。 operaSupport: false //表示如果插件也必须支持歌opera浏览器,在这种情况下,它提供了建立一个临时的打印选项卡。默认是true
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 <html xmlns="http://www.w3.org/1999/xhtml"> 3 <head> 4 <title>JQuery QRcode</title> 5 <style> 6 @media screen 7 { 8 #canvas 9 { 10 display: block; 11 } 12 #image 13 { 14 display: none; 15 } 16 } 17 @media print 18 { 19 #canvas 20 { 21 display: none; 22 } 23 #image 24 { 25 display: block; 26 } 27 } 28 </style> 29 30 <script src="jquery/jquery-1.11.3.min.js" type="text/javascript"></script> 31 32 <script src="jquery/jquery.qrcode.min.js" type="text/javascript"></script> 33 34 <script src="jquery/jquery.jqprint-0.3.js" type="text/javascript"></script> 35 36 <script> 37 function encode(){ 38 $("#code").html(''); 39 var str=$('#txt').val(); 40 str=toUtf8(str); 41 //$('#code').qrcode(str); 42 $("#code").qrcode({ 43 render: "canvas", //table方式 44 width: 100, //宽度 45 height:100, //高度 46 text: str //任意内容 47 }); 48 } 49 50 function toUtf8(str) { 51 var out, i, len, c; 52 out = ""; 53 len = str.length; 54 for(i = 0; i < len; i++) { 55 c = str.charCodeAt(i); 56 if ((c >= 0x0001) && (c <= 0x007F)) { 57 out += str.charAt(i); 58 } else if (c > 0x07FF) { 59 out += String.fromCharCode(0xE0 | ((c >> 12) & 0x0F)); 60 out += String.fromCharCode(0x80 | ((c >> 6) & 0x3F)); 61 out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F)); 62 } else { 63 out += String.fromCharCode(0xC0 | ((c >> 6) & 0x1F)); 64 out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F)); 65 } 66 } 67 return out; 68 } 69 70 function print(){ 71 var img = document.getElementById("image"); /// get image element 72 var canvas = document.getElementsByTagName("canvas")[0]; /// get canvas element 73 img.src = canvas.toDataURL(); /// update image 74 75 $("#image").jqprint({ 76 debug:false, 77 importCSS:true, 78 printContainer:true, 79 operaSupport:false 80 }); 81 } 82 </script> 83 84 </head> 85 <body> 86 <input type="text" id="txt" /> 87 <button id="btnEncode" onclick="encode();"> 88 生成QRcode</button> 89 <button id="btnPrint" onclick="print();"> 90 打印</button> 91 <hr /> 92 <div id="code"> 93 </div> 94 <img id="image" src="" /> 95 </body> 96 </html>
encode方法是在#code的标签上生成二维码的,其中调用了toUtf8的函数,这是使中文可以正常编译为二维码的方法;
print方法就是打印了,需要说明的是,canvas标签并不能直接打印,因为是动态的,打印会显示空白,
我这里是借用了一个img标签,先把canvas图像赋予给img,再打印img,由于上方有定义img标签的display属性为none,所以不会显示。
注意:71行和72行,标签选择方法尽量不使用jquery,本人试过使用$选择器,但提示对象无法调用toDataURL(),大概是jquery没有这个属性吧,所以需要用javascript的选择方法,这个问题,困扰了我很久。
jquery.qrcode二维码的生成方法是,在#code的div中,生成一个canvas的动画,
43行的渲染方法,可以改为“table”,那就是在#code的div中生成一个table,通过调整样式,使td显示出一个个黑点的二维码,但这个方式无法打印,因为不是图像,不能转移为img。