Штрих-код был напечатан не так много, как запрос - PullRequest
0 голосов
/ 12 февраля 2020

Мне удалось распечатать исходные команды ZPL из PHP непосредственно на принтер , за исключением того, что я не могу печатать более 1 этикетки сразу после обновления на принтере TLP 2844-Z и мой первый раз при установке Процессор WebClientPrint (W CPP) в . Когда я пытался эмулировать принтер ZPL в приложении ZPL Printer , это также происходило. Единственное исключение было, когда я пробовал это в браузере 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: request

он только спрашивал для разрешения один раз, в результате (печатается только 1 этикетка):

result

, когда это должно быть (напечатано 2 этикетки):

expected

Мне удалось воспроизвести вышесказанное с помощью следующего сценария:

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);
}

, которые не являются идеальными, поскольку многие вкладки будут создаваться только для печати, где ранее вам не нужны были новые вкладки, чтобы делать то же самое.


Есть идеи, как решить эту проблему? Чтобы было напечатано столько, сколько запрос попросил?

1 Ответ

0 голосов
/ 26 февраля 2020

Чтобы решить эту проблему, я сделал каждый запрос на отдельной вкладке и закрыл вкладку после его выполнения. Для простоты я превращаю его в отдельную функцию.

Сценарий запроса изменен на:

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);
}
...