温馨提示:本文翻译自stackoverflow.com,查看原文请点击:emulation - Barcode wasn't printed as many as the Request
barcode-printing emulation zpl zpl-ii zebra-printers

emulation - 条形码打印的数量不及请求的数量

发布于 2020-05-02 18:20:36

我能够将原始的ZPL命令从PHP直接打印到打印机,除了TLP 2844-Z打印机上将更新到之后以及我第一次安装WebClientPrint Processor一次不能打印多个标签。(WCPP)当我尝试ZPL打印机应用程序中模拟ZPL打印机时它也发生了。唯一的例外是,当我在 Safari浏览器上尝试此操作时,它运行良好。


工作请求脚本(仍在Safari中运行,并且以前在所有其他浏览器中运行):

for(var i=0; i<rows.length; i++){
     javascript:jsWebClientPrint.print('useDefaultPrinter=' + $('#useDefaultPrinter').attr('checked') + '&printerName=' + $('#installedPrinterName').val() + '&param=' + rows[i].value);
}

阻止我的是允许询问:

wcp

在Chrome上生成请求的时间不多(在Safari上不是问题)。


请求为2时的示例: 请求

它只请求一次许可,结果(仅打印1个标签):

结果

应该是什么时候(打印了2个标签):

预期

我可以使用以下脚本重现以上内容:

for (var i = 0; i < rows.length; i++) {
  var url = ('useDefaultPrinter=' + $('#useDefaultPrinter').attr('checked') + '&printerName=' + $('#installedPrinterName').val() + '&param=' + rows[i].value);
  window.open('webclientprint:' + domain + url);
}

这是不理想的,因为许多选项卡仅会生成以进行打印,而以前您不需要任何新的选项卡即可进行打印。


任何想法如何解决这个问题?这样它就可以按照请求的要求打印多少?

查看更多

提问者
Mukyuu
被浏览
20
Mukyuu 2020-02-26 12:14

我要做的就是将每个请求放在单独的选项卡上,并在执行后关闭该选项卡。为简单起见,我将其设置为一个单独的函数。

请求脚本更改为:

for (var i = 0; i < rows.length; i++) {
  if (i > 0)
    delayPrint(rows[i], i); // separate function
  else
    javascript: jsWebClientPrint.print('useDefaultPrinter=' + $('#useDefaultPrinter').attr('checked') + '&printerName=' + $('#installedPrinterName').val() + '&param=' + rows[i].value);
}

用于延迟请求并在单独的选项卡上发出每个请求的单独函数,并在执行该选项卡后将其关闭:

function delayPrint(data, interval) {
  setTimeout(function() {
    var wnd =   window.open('webclientprint:' + domain + ('useDefaultPrinter=' + $('#useDefaultPrinter').attr('checked') + '&printerName=' + $('#installedPrinterName').val() + '&param=' + rows[i].value));
    setTimeout(function() {
      wnd.close(); // close once it's done
    }, 1000);
  }, interval * 3000);
}