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。

 

posted @ 2017-07-27 17:25  XinYiBuFang  阅读(459)  评论(0编辑  收藏  举报