• jquery.qrcode和jqprint的联合使用,实现html生成二维码并打印(中文也ok)


    在公司的生产现场中,常常会在一些部品或设备上贴上二维码,用于扫描录入数据,免去手动输入的麻烦。

    以前曾经做过winform的程序,生成二维码,并打印出来,使用的是zxing的类库,

    但是如果二维码是附在其他界面上的,使用winform就需要用到Graphics的方法,但是这个方法很难绘制出想要的效果,并且不容易修改。

    后来,发现html静态网页能生成二维码,并且界面排版简单,就使用jquery.qrcode生成二维码,

    打印的时候,使用jqprint,打印指定的div就可以了,非常方便。

    下面分享一个本人作成的测试样例:

     1 <!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              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。

    代码页面的效果如下:

     

    使用以上的方法,还能在div的其他地方添加其他元素,就能生成自己想要的图像了。

  • 相关阅读:
    UOJ#310. 【UNR #2】黎明前的巧克力(FWT)
    cf24D. Broken robot(高斯消元)
    loj#2483. 「CEOI2017」Building Bridges(dp cdq 凸包)
    给博客园加一个会动的小人-spig.js
    loj#6033. 「雅礼集训 2017 Day2」棋盘游戏(二分图博弈)
    loj#6032. 「雅礼集训 2017 Day2」水箱(并查集 贪心 扫描线)
    洛谷P4103 [HEOI2014]大工程(虚树 树形dp)
    Oracle DB SQL 性能分析器
    ORA-000845 与 /dev/shm(tempfs)
    ID3DXMesh接口 创建自己的立方体网格
  • 原文地址:https://www.cnblogs.com/chenyucong/p/5996544.html
Copyright © 2020-2023  润新知