Мое тщательное исследование в Интернете дало мне несколько идей, но ни одна из них не работает правильно в моем конкретном случае использования. Вот что у меня есть:
1) принтер Zebra, использующий ZPL в качестве языка печати;
2) Строка на javascript, состоящая из 3-х форм ZPL для печати 3-х этикеток.
Наш системный инженер уже проверил правильность синтаксиса ZPL. Чего я пытаюсь добиться, так это отправить строку в виде простого текста, чтобы принтер принял ее как инструкции ZPL для печати этикеток. Лучшее, что я придумал до сих пор, выглядит так:
var mywindow = window.open('', 'Printing', 'width=800,height=600');
//mywindow.write("testDirectWrite"); // not working
mywindow.document.open('text/plain');
////mywindow.document.write('<html><head><title>Printing</title><meta charset="ISO-8859-1">');
///*optional stylesheet*/ //mywindow.document.write('<link rel="stylesheet" href="main.css" type="text/css" />');
////mywindow.document.write('</head><body>');
var theDiv = $(".test-printirane-po-usb");
var printContents = theDiv[0].innerText;
mywindow.document.write(printContents);
////mywindow.document.write('</body></html>');
//mywindow.document.close(); // necessary for IE >= 10
//mywindow.focus(); // necessary for IE >= 10
//mywindow.print();
//mywindow.close();
На данный момент (в целях тестирования) theDiv — это контейнер, в который я помещаю строку ZPL. В принципе, я понял, что лучшее решение — открыть новое всплывающее окно, заполнить его строкой ZPL и вызвать thePopupWindow.print(); Затем пользователь выбирает принтер Zebra и нажимает «Печать». Проблема: кажется, что принтер интерпретирует то, что печатается, как HTML-страницу (из-за
<html><head></head><body>theZPLString comes here</body></html>
теги, которые я вижу, например, когда просматриваю всплывающее окно в Chrome) и печатает код ZPL как обычный текст, а не интерпретирует его и печатает метку. Я полагаю, мне нужно что-то вроде thePopupWindow.write(), чтобы избежать записи в свойство документа окна, которое, очевидно, переносит строку в html-код. Чтобы проверить это, я использую драйвер Generic/Text Only и сохраняю то, что «напечатано», в файл .txt.
В Chrome я получаю пустой файл.
В Mozilla, когда я удаляю эту строку: mywindow.document.open('text/plain'); Я получаю ZPL в виде символов, по одному в строке. Когда я добавляю его, я получаю только дату и время, опять же по одному символу в строке.
В IE - я получаю это (с или без mywindow.document.open('text/plain');):
Page 1 o
^XA^PW400^LL37^
12.4.2016
Я нашел различные решения, но они включают использование php, c#, даже java, и я не хочу, чтобы это было на стороне сервера, как указано в заголовке. Любая помощь будет оценена. @forgivenson, спасибо за замечание. Прочитав ваш, я увидел маленький «x», по которому я могу щелкнуть, чтобы удалить свой комментарий, поэтому я добавил комментарий в вопрос. Я упустил очень важную вещь: принтер подключен через USB-порт!