2014-01-14 2 views
1

Мне нужно закодировать «поле даты» на моем принтере Zebra M4Plus от UTF-8 до UTF-16. Для этого мне нужно использовать «необходимую таблицу перевода». В документации я нашел это:Дата кодирования в принтере Zebra

~DER:JIS.DAT,27848,300021213001... 

Но я не знаю, что такое JIS.DAT и почему 27848.

Это мой пример кода:

qz.append("^XA"); 
qz.append("^FO160,635"); 
qz.append("^[email protected],30,30,E:TT0003M_.FNT"); 
qz.append("~DER:.DAT,27848,Данные для вывода^FS"); - it not work. Printer go to offline. 

Кто имеет опыт работы с этим , Помоги пожалуйста.

ответ

1

Пожалуйста, попробуйте заставить апплет Java использовать Cyrilic: qz.setEncoding("cp1251"); или qz.setEncoding("windows-1251");, если принтер изначально не поддерживает UTF-16, а затем qz.setEncoding("UTF-16");

Обновление: В новых версиях QZ лотком, синтаксис qz.configs.create("My Printer", { encoding: 'UTF-8' });

Также не забудьте указать <meta charset="utf-8"> на своей странице.

Edit: Там есть подробное объяснение того, что вызывает это здесь: Printer ZebraZ4MPlus don't print Russian Cirillyc character

Java имеет привычку предполагая, какой набор символов вы хотите использовать, который часто cp1252 (Windows) или UTF-8 (* Никс). В зависимости от того, какую кодировку ожидает принтер (и какие кодировки он поддерживает), Java сначала должен перевести эти символы/команды на подходящий эквивалент перед отправкой. Полный список кодировок, поддерживаемых Java 7, доступен here.

Очень похожий вопрос был поставлен на трекер ошибок qz в отношении поддержки греческого символа. Трюк состоял в том, чтобы сказать как Java, так и принтер, в котором используется кодировка языка/символа.

Наконец, у меня были сценарии, в которых флаг BOM (знак байтового заказа) в файле html/js вызвал нежелательные результаты. В этом случае JavaScript знал о кодировке документа, и трансляция происходила перед отправкой на Java. Я использую Notepad ++ для включения/выключения спецификации UTF-8.

Кроме того, здесь приведена ссылка на отчет об ошибке qz, относящийся к другому языку печати (ESCP вместо ZPL), но имеет аналогичный симптом выхода из Java, который неправильно переносится для его принтера. https://code.google.com/p/jzebra/issues/detail?id=204#c10

-Tres

+1

Большое спасибо! Я установил кодировку qz.setEncoding («UTF-16»), и она сработала. – AlexSmith

+0

У меня также были сообщения о '' исправлении проблем с кодировкой. Добавление в исходное сообщение. :) – tresf

1

Руководство ZPL поясняет (на странице 171), что эта команда загружает таблицу переводов, чтобы преобразовать шрифт в unicode: ZPL manual. Число (27848) - размер загружаемого формата шрифта. Эти таблицы можно загрузить по адресу Zebra's Website как часть вашего пакета шрифтов. Какой шрифт вы пытаетесь использовать?

Кроме того, хотя это не устраняет проблему отключения принтера, вы должны положить конец своей команде ZPL с помощью «^ XZ». Это команда, используемая принтером для обозначения конца метки/задания/команды.

+0

Я пытаюсь использовать E: TT0003M_.FNT для печати русских символов. Эти символы я отправляю с jsp на принтер в формате utf8, но принтер понимает код ZPL и не понимает русских символов. Вот почему я пытаюсь использовать utf16. Не могли бы вы подробно описать, как это сделать? – AlexSmith

0

jason.zissman, спасибо за ссылку на новую документацию. Я нахожу там кодировку CI28. Я отправляю из JSP (<% @ страница CONTENTTYPE = "текст/html" pageEncoding = "UTF-8" %>) JS-код:

qz.append("^XA"); 
qz.append("^CWX,E:TT0003M_.FNT^FS"); 
qz.append("^CI28"); 
qz.append("^FO50,400^AX,80,70^FDCyrillic: ЖЛЗ^FS"); 
qz.append("^XZ"); 
qz.print(); 

Но принтер печатает только "Cyrilic:". В чем проблема? Когда я печатаю это из файла - все хорошо, а из jsp - не работает.

+0

Поскольку фактический автономный файл ZPL работает, мне остается полагать, что библиотека (qz) не поддерживает перенос символов. –

+0

QZ использует [транспорт Java] (http://stackoverflow.com/a/88863/3196753). JavaScript [infers page encoding] (http://stackoverflow.com/a/8833278/3196753), если он не указан вручную. Чтобы убедиться, что JavaScript не переводит его в первую очередь, я обычно рекомендую использовать экранированную шестнадцатеричную версию символа для устранения неполадок. например 'Qz.append ('λ')'; такая же, как 'qz.append ('\ u03bb');' кроме последнего работает с веб-страницей, отличной от UTF. Существуют слои трансляции кодирования, происходящие из JavaScript -> Java -> ОС, поэтому чем более явным вы можете быть с вашими данными на этапах отладки, тем лучше. – tresf

Смежные вопросы