【问题标题】:QZ TRAY PRINITING ORDER NOT IN SEQQZ 托盘打印顺序未按顺序排列
【发布时间】:2019-01-17 13:29:38
【问题描述】:

我正在尝试从 javascript 打印 qz 托盘。 我有编号按升序排列的条形码 1,2,3,4,5 等等。 我正确循环了 seq 。但是打印出来的时候就乱了。

    setTimeout("directPrint2()",1000);

function sleep(milliseconds) {
  var start = new Date().getTime();
  for (var i = 0; i < 1e7; i++) {
    if ((new Date().getTime() - start) > milliseconds){
      break;
    }
  }
}

function directPrint2(){
  var data;
  var xhttp;
  var v_carton = "' || x_str_carton ||'";       
  var carton_arr = v_carton.split('','');                                                                                                        
  var v1 =  "' ||
replace(x_zebra_printer_id, '\', '|') ||
'".replace(/\|/g,"\\");
  if(v1 == ""){
      alert("Please setup ZPL Printer");
  }
  else{                                                   
      xhttp=new XMLHttpRequest();
      xhttp.onreadystatechange = function() {
          if (this.readyState == 4 && this.status == 200) {
              data = [ toNative(this.responseText) ];
              printZPL(data, v1);
          }
      };

     for (var j = 0; j < carton_arr.length; j++){                                                         

      var url = "' || x_wms_url ||
'WWW_URL.direct_print_label?in_carton_no="+toValidStr(carton_arr[j]);

      xhttp.open("GET", url, false);                                                                                                       
      xhttp.send();   
      sleep(5000);                                                                                                             
    }  
  }               
};

',
'javascript'

【问题讨论】:

    标签: qz-tray


    【解决方案1】:

    您的示例中缺少什么:

    • 在调用printZPL 函数的示例中,我没有看到任何循环逻辑,
    • printZPL 不是 QZ Tray 函数,您缺少它调用的代码 sn-p。通常是qz.print(config, data);

    不管缺少什么信息,qz.print(...) API 是基于 ES6/Promise/A+ 的意思如果你想连续多次调用qz.print,你需要使用与 Promise 兼容的技术。 (例如.then(...) 语法) 在您的打印调用之间,如Chaining Requests 指南中所述。

    为避免这种情况,您可以将所有 ZPL 数据连接到一个大的 data 数组中。注意不要spool too much data at once

    如果您确切知道要附加多少作业,则可以对承诺链进行硬编码:

    qz.websocket.connect()
    .then(function() { 
       return qz.printers.find("zebra");              // Pass the printer name into the next Promise
    })
    .then(function(printer) {
       var config = qz.configs.create(printer);       // Create a default config for the found printer
       var data = ['^XA^FO50,50^ADN,36,20^FDRAW ZPL EXAMPLE^FS^XZ'];   // Raw ZPL
       return qz.print(config, data);
    })
    .catch(function(e) { console.error(e); });
    

    最后,如果您事先不知道对qz.print(...) 的调用次数,您可以按照Promise Loop 指南中的说明使用Promise 循环。

    function promiseLoop() {
        var data = [
            "^XA\n^FO50,50^ADN,36,20^FDPRINT 1 ^FS\n^XZ\n",
            "^XA\n^FO50,50^ADN,36,20^FDPRINT 2 ^FS\n^XZ\n",
            "^XA\n^FO50,50^ADN,36,20^FDPRINT 3 ^FS\n^XZ\n",
            "^XA\n^FO50,50^ADN,36,20^FDPRINT 4 ^FS\n^XZ\n"
        ];
        var configs = [
            { "printer": "ZDesigner LP2844-Z" },
            { "printer": "ZDesigner LP2844-Z" },
            { "printer": "ZDesigner LP2844-Z" },
            { "printer": "ZDesigner LP2844-Z" }
        ];
        var chain = [];
    
        for(var i = 0; i < data.length; i++) {
            (function(i_) {
                //setup this chain link
                var link = function() {
                    return qz.printers.find(configs[i_].printer).then(function(found) {
                        return qz.print(qz.configs.create(found), [data[i_]]);
                    });
                };
    
                chain.push(link);
            })(i);
            //closure ensures this promise's concept of `i` doesn't change
        }
    
        //can be .connect or `Promise.resolve()`, etc
        var firstLink = new RSVP.Promise(function(r, e) { r(); });
    
        var lastLink = null;
        chain.reduce(function(sequence, link) {
            lastLink = sequence.then(link);
            return lastLink;
        }, firstLink);
    
        //this will be the very last link in the chain
        lastLink.catch(function(err) {
            console.error(err);
        });
    }
    

    注意:在 QZ Tray 2.1 中不再需要 Promise Loop。相反,从 2.1 开始,array of config objects and data arrays can be provided instead.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多