一次循环动态打印输出多张不同内容二维码 QRCODE方法is not a function 以及遇到的其他问题 已解决

关于循环生成动态二维码遇到的QRCODE.JS不调用生成图片方法打印图片不显示

JQUERY JS 请自行转化,本例俩种方法混合使用

  1. 需求
    由于有需求,需要做一个标签,左边是动态流水号,动态箱号,右边是根据左边内容变化,
    一次循环动态打印输出多张不同内容二维码 QRCODE方法is not a function 以及遇到的其他问题 已解决_第1张图片

  2. 在写代码的时候,把生成二维码的QRCODE 调用方法写在了循环里,结果调试发现,预览界面生成的都是CANVAS的二维码,但是window.print()打印inner HTML 打印不出来 CANVAS 内容.
    QRCODE 方法生成了一个CANVAS和一个IMG区域,默认CANVAS DISPLAY:BLOCK
    img DISPLAY:NONE
    一次循环动态打印输出多张不同内容二维码 QRCODE方法is not a function 以及遇到的其他问题 已解决_第2张图片查看QRCODE.js 发现了在这里生成的IMG,断点调试发现在进入循环后,生成二维码的方法就只进行了生成CANVAS的操作,后面没有,于是想到强转。

  3. 转化成功
    找了好多资料,都是直接说用.todataURL 转化,但是都不行,都会提示.todataURL is not a function,后来只在一个地方找到todataURL 只能针对原生CANVAS 也就是下例:

var c = document.createElement('canvas');
c.toDataURL();

针对非原生canvas,需要加一个定义

$("#qrCode" ).find("canvas")[0].toDataURL

自己的解决

    //能抓到第一个【0】的canvas转成IMG IMG 但是格式不对
              var img = $("#QRCode").find("canvas")[0].toDataURL("image/png");
              $("#QRCode").find("canvas").attr('style', 'display:none');
                 // 给QRCODE 方法生成的 IMG 赋SRC 属性
               $("#QRCode").find("img").attr('src', img);
                $("#QRCode").find("img").attr('style', 'display:block');

自己的代码部分(包括循环拼接到innerHTML)

                            for (i = 0 ; i < num1 ; i++){                       
                                $('#QRCode').html('');
                                //二维码规则
                                // 料号*数量*模号*生产日期*生产批次*订单号*供应商代码*供应商*箱号(此公式固定不可更改,缺少部分以“*”代表,模号为空
                                QRCodes = pnType + '*' + QTY + '**' + date + '*' + numlist[i] + '*PO' + po + '*F02*AISHI';
                                qrcode = new QRCode(document.getElementById("QRCode"), {
                                    text :QRCodes,
                                    width: 90, //设置宽高
                                    height: 90,
                                    correctLevel: 1,

                                });
              //能抓到第一个【0】的canvas转成IMG IMG 但是格式不对
              var img = $("#QRCode").find("canvas")[0].toDataURL("image/png");
              $("#QRCode").find("canvas").attr('style', 'display:none');
                 // 给QRCODE 方法生成的 IMG 赋SRC 属性
               $("#QRCode").find("img").attr('src', img);
                $("#QRCode").find("img").attr('style', 'display:block');


                                
                              
                               
                               printData1 += document.getElementById("PrintArea").innerHTML;
                               console.log(printData1);
                               console.log(document.getElementById("QRCode").innerHTML);
                                if (i != num1 - 1) {
                                    printData1 = printData1 + fenye;
                                }
                            }

                            var printData = printData1;// 获得 div 里的所有 html 数据
                            document.body.innerHTML = headstr + printData + footstr;
                            
                        // 二维码  一维码 可能是太长了 必须等待 要不然打印出来没有二维码
                            window.setTimeout(function () {
                                location.href = location.href;  //返回主界面
                            window.print();
                        }, 1000);

你可能感兴趣的:(项目学习)