Как установить значение переменных для этикетки при печати на принтер Zebra с помощью SDK на Android

Как распечатать готовую этикетку (созданную с помощью Zeba Label Designer), содержащую переменные, и установить эти переменные перед печатью.

У меня есть следующий код, но я не знаю, как установить переменную (например, у меня есть QR-код на разработанной мной этикетке, и я хотел бы установить его данные перед печатью).

TcpPrinterConnection zebraPrinterConnection = new TcpPrinterConnection("192.168.1.100", TcpPrinterConnection.DEFAULT_ZPL_TCP_PORT);
 try {
     ZebraPrinter printer = ZebraPrinterFactory.getInstance(zebraPrinterConnection);
     printer.getFileUtil().sendFileContents("/sdcard/documents/labels/sample.lbl");
     zebraPrinterConnection.close();
 } catch (ZebraPrinterConnectionException e) {
     e.printStackTrace();
 } catch (ZebraPrinterLanguageUnknownException e) {
     e.printStackTrace();
 } catch (ZebraIllegalArgumentException e) {
     e.printStackTrace();
 }

person MindWire    schedule 11.10.2011    source источник


Ответы (1)


Вам нужно просмотреть выходные данные Zebra Label Designer, чтобы получить свои переменные, а затем подключить их через SDK.

Ознакомьтесь с документацией, прилагаемой к ZebraLink SDK, в ней есть множество хороших примеров того, как печатать сохраненные форматы. Вот один из примеров. В этом примере переменная «Имя» имеет номер 12. Переменная «Фамилия» имеет номер 11.

 ^XA
 ^DFE:FORMAT.ZPL
 ^FS
 ^FT26,243^A0N,56,55^FH\^FN12"First Name"^FS
 ^FT26,296^A0N,56,55^FH\^FN11"Last Name"^FS
 ^FT258,73^A0N,39,38^FH\^FDVisitor^FS
 ^BY2,4^FT403,376^B7N,4,0,2,2,N^FH^FDSerial Number^FS
 ^FO5,17^GB601,379,8^FS
 ^XZ

 TcpPrinterConnection zebraPrinterConnection = new TcpPrinterConnection("192.168.1.32", TcpPrinterConnection.DEFAULT_ZPL_TCP_PORT);
 try {
     zebraPrinterConnection.open();
     ZebraPrinter printer = ZebraPrinterFactory.getInstance(zebraPrinterConnection);
     Map<Integer, String> vars = new HashMap<Integer, String>();
     vars.put(12, "John");
     vars.put(11, "Smith");
     printer.getFormatUtil().printStoredFormat("E:FORMAT.ZPL", vars);
     zebraPrinterConnection.close();
 } catch (ZebraPrinterConnectionException e) {
     e.printStackTrace();
 } catch (ZebraPrinterLanguageUnknownException e) {
     e.printStackTrace();
 }
person Ovi Tisler    schedule 11.10.2011
comment
Спасибо за пример, однако, когда я смотрю на содержимое файла lbl, сгенерированного дизайнером зебры, он оказывается в двоичном формате. Есть ли способ сохранить или преобразовать файл .lbl в формат zpl, или я ошибаюсь? - person MindWire; 12.10.2011
comment
файл lbl приложения для разработки этикеток предназначен для части приложения с графическим интерфейсом, размещения полей и т. д. Вам необходимо экспортировать формат в виде файла ZPL, который выглядит как текст ASCII сверху, зажатый между ^XA ^XZ . Чтобы получить файл ZPL для принтера, нажмите Файл->Экспорт на принтер в ZebraDesigner. (вы должны правильно настроить драйвер принтера) Это сохранит формат на вашем принтере. И наоборот, если вы не хотите, чтобы он сохранялся на вашем принтере, вы можете настроить свой драйвер так, чтобы он указывал на текстовый файл, захватывать текст и отправлять файл каждый раз, как вы делаете в своем примере. - person Ovi Tisler; 12.10.2011
comment
Имеет смысл, но я застрял в правильной настройке драйверов принтера. Я искал и искал в Интернете (отсюда мой задержанный ответ) и просмотрел каждый экран в диалоговых окнах свойств принтера и настроек принтера, но безрезультатно. Любые подсказки или статьи, которые могут помочь мне настроить вещи, были бы замечательными, чтобы я мог двигаться вперед. Извиняюсь за перемотку туда-сюда! - person MindWire; 13.10.2011
comment
Какая у вас модель принтера? Скорее всего, вы могли бы использовать утилиты настройки Zebra — zebra.com/id/products/global/en/drivers/barcode/ Это должно помочь вам настроить драйверы. Если это не помогло, перейдите на вкладку «Свойства принтера» «Порты», выберите «Добавить новый порт» -> «Локальный порт». Назовите его C:\out.txt. Теперь каждый раз, когда вы печатаете в свой драйвер, он отправляет его в этот файл, и вы можете захватить этот вывод и отправить его через SDK, как вы делаете выше. - person Ovi Tisler; 13.10.2011
comment
Я установил инструменты и не вижу ничего об изменении конфигурации по мере необходимости. Я использую модель принтера RW420 Zebra. По вашим инструкциям я добавил локальный порт и распечатал файл, однако, когда я открываю файл, я вижу: ! DF 1.FMT ! 0 200 200 406 1 PW 812 TONE 0 SPEED 3 ON-FEED IGNORE NO-PACE BAR-SENSE T 4 0 27 23 I print? BOX 6 4 797 392 8 T 4 0 22 99 \\ PRINT - person MindWire; 13.10.2011
comment
Ах, вы используете мобильный принтер. Это язык CPCL, поэтому он работает немного по-другому. «\\» означает переменную, и с ними не связано число, предполагается, что первый «\\» — это var1, второй «\\» — это var2 и т. д. Таким образом, вы можете просто использовать код I добавлено в мой ответ и используйте 1 в качестве вашей переменной - person Ovi Tisler; 13.10.2011
comment
Для протокола, я ценю вашу настойчивость в помощи с этим. - person MindWire; 13.10.2011
comment
Ok. Эврика. Хорошо работает сейчас. Еще раз спасибо, надеюсь вернуть услугу в один прекрасный день! - person MindWire; 13.10.2011