为什么我的文字不能打印?

时间:2013-02-11 17:11:47

标签: c# compact-framework windows-ce zebra-printers opennetcf

意识到我应该使用行打印模式(而不是标签模式)将CPCL发送到Zebra QL 220带式打印机,我正在重构我的工作代码(Why does everything print on the same line, even though I'm adding crlfs?)到此:

serialPort.Write("! 0 200 200 210 1\r\n"); 

serialPort.Write(string.Format("! U1 setvar {0} {1}", "device.languages", "line_print"));
serialPort.Write("Hallo die Welt\r\n\r\n"); //Bonjour le Monde --- Hola el Mundo --- Hallo die Welt

serialPort.Write("BARCODE-TEXT 7 0 5\r\n"); 
serialPort.Write(string.Format("BARCODE 128 1 1 50 150 130 {0}\r\n\r\n", barcode));
serialPort.Write("POSTFEED 120\r\n"); // empirical observation shows 120 is about the right amount of extra tape to expel after printing
serialPort.Write("PRINT\r\n");

这将打印条形码及其下方的人类可读数字(“条形码”中的值),但不会打印文本“Hallo die Welt”。为什么不?我需要在每一行之后调用Print,或者...... ???

更新

它仍然只使用以下代码打印条形码(不是“Hallo die Welt”):

serialPort.Write("! 0 200 200 210 1\r\n");
serialPort.Write("! U1 SETLP 7 0 24\r\n"); 
serialPort.Write("Hallo die Welt\r\n\r\n"); 
serialPort.Write("BARCODE-TEXT 7 0 5\r\n"); 
serialPort.Write(string.Format("BARCODE 128 1 1 50 150 130 {0}\r\n\r\n", barcode));
serialPort.Write("POSTFEED 120\r\n");
serialPort.Write("PRINT\r\n");

更新2

这适用(标签模式):

serialPort.Write("! 0 200 200 210 1\r\n");
serialPort.Write("TEXT 4 0 30 40 Hallo die Welt\r\n\r\n"); //Bonjour le Monde --- Hola el Mundo --- Hallo die Welt
serialPort.Write("BARCODE-TEXT 7 0 5\r\n"); 
serialPort.Write(string.Format("BARCODE 128 1 1 50 150 130 {0}\r\n\r\n", barcode));
serialPort.Write("POSTFEED 120\r\n"); 
serialPort.Write("PRINT\r\n");

打印:

~~~~~~~~~~~~~~~~~~~~~~~
Hallo die Welt

<barcode as a barcode>
<barcode as a number>
~~~~~~~~~~~~~~~~~~~~~~~

...但这不起作用(行打印模式):

serialPort.Write(string.Format("! U1 setvar {0} {1}", "device.languages", "line_print"));
serialPort.Write("! U1 SETLP 7 0 24\r\n");
serialPort.Write("Hallo die Welt\r\n\r\n");
serialPort.Write("! U1 BARCODE-TEXT 7 0 5\r\n");
serialPort.Write(string.Format("! U1 BARCODE 128 1 1 50 150 130 {0}\r\n\r\n", barcode));
serialPort.Write("! U1 SETLP 5 2 46"); 
serialPort.Write(barcode);
serialPort.Write("! U1 PRINT\r\n");

问题是,我需要使用行打印模式。

1 个答案:

答案 0 :(得分:1)

在每个SGD命令之后还需要一个\ r \ n(在这种情况下是你的setvar)

应该是

  

! U1   setvar“device.languages”“line_print”\ r \ n

您还需要在SETVAR命令的2个参数周围加上双引号。

更新:

哦,顺便说一句,仅仅因为打印机处于line_print模式,并不意味着它不理解CPCL代码。因此,上例中的代码是CPCL代码,而不仅仅是行打印。如果你把TEXT放在前面,它应该可以工作