为什么发送到Zebra QLn220打印机的CPCL代码有效,而相同的代码在发送到Zebra QL220时不起作用?

时间:2014-06-09 23:00:19

标签: compact-framework windows-ce zebra-printers motorola handheld

根据用户偏好(所选标签的类型,以及是否发送"保持活动"消息),将不同的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

对于CPCL协议,QL220和QLn220之间有什么变化,或者...... ???

更新

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

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,导致问题的那个,没有)。当我发送它时,您正在使用哪种语言" (getDeviceLang)命令使用Zebra Setup Utils,它回复了," hybrid_xml_zpl"

1 个答案:

答案 0 :(得分:2)

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

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

布伦特 Arrowhead Corp - Zebra ISV