0

根据用户偏好(选择的标签类型,以及是否发送“Keep Alive”消息),不同的 CPCL 命令从手持设备发送到 Zebra QL[n]220 带式打印机。这段代码:

const string quote = "\"";
string keepPrinterOn = string.Format("! U1 setvar {0}power.dtr_power_off{0} {0}off{0}", quote);
string shutPrinterOff = string.Format("! U1 setvar {0}power.dtr_power_off{0} {0}on{0}", quote);
string advanceToBlackBar = string.Format("! U1 setvar {0}media.sense_mode{0} {0}bar{0}", quote);
string advanceToGap = string.Format("! U1 setvar {0}media.sense_mode{0} {0}gap{0}", quote);

...适用于(较新的)QLn220 打印机,但在(较旧的)QL220 上,不是打印机接收命令并对其进行操作,它只是将原始命令打印到标签上。IOW QL220 带式打印机不是将命令转换为操作或条形码,而是直接在标签上打印如下内容:

0 200 200 241 1
RIGHT
TEXT 4 3 0, 0 0.75
LEFT
TEXT 5 0 0 90 DRPEPPER (7X2) = 14
CENTER

BARCODE UPCA 1 1 50 0 137 054900000295
FORM
PRINT

是 QL220 和 QLn220 之间的 CPCL 协议发生了变化,还是……?

更新

好吧,这很奇怪;奇怪的是,我添加了这段代码:

string getDeviceLang = string.Format("! U1 getvar {0}device.languages{0}", quote); 
string setDeviceLangZPL = string.Format("! U1 setvar {0}device.languages{0} {0}ZPL{0}", quote); 
. . . 
String deviceLanguage = PrintUtils.GetSettingFromPrinter(getDeviceLang); 
MessageBox.Show(deviceLanguage); 
if (deviceLanguage.Equals("line_print")) 
{ 
PrintUtils.SendCommandToPrinter(setDeviceLangZPL); 
} 

...尽管对 GetSettingFromPrinter() 的调用返回一个空字符串(如 MessageBox.Show 中所示),但打印结果仍然可以按需要工作(它根据需要打印标签,而不仅仅是将原始命令打印到它们上面)! ?

更新 2

注意:我的 QLn220 Zebra 打印机确实有一个 USB 端口(导致问题的旧 QL220 没有)。当我使用 Zebra Setup Utils 向它发送“您使用什么语言”(getDeviceLang) 命令时,它回复为“hybrid_xml_zpl”

4

1 回答 1

2

Hybrid zpl 结合了 CPCL 和 ZPL 打印命令。

收据打印机(imz、em220...等)最初在工厂设置为行打印模式。一些较旧的 QL220 也是如此。最好将它们设置为混合,你应该没有问题。

布伦特箭头公司 - Zebra ISV

于 2014-09-16T03:04:46.890 回答