这将使用在Motorola MC3100手持设备上运行的CE / CF应用程序在Zebra QL220皮带打印机上打印(尽管仍然很难看):
public void PrintBarcode(string barcode, string UPC, string description, decimal listPrice)
{
using (SerialPort serialPort = new SerialPort())
{
serialPort.BaudRate = 19200;
serialPort.Handshake = Handshake.XOnXOff;
serialPort.DataBits = 8;
serialPort.Parity = Parity.None;
serialPort.StopBits = StopBits.One; // other choice is Two (see p. 14-21 in CPCL pdf)
serialPort.PortName = "COM1:";
serialPort.Open();
Thread.Sleep(2500); // I don't know why this is needed, or if it really is...
serialPort.Write("! 0 200 200 210 1\r\n");
serialPort.Write("TEXT 4 0 30 40 Hola el Mundo\r\n"); //Bonjour le Monde --- Hola el Mundo --- Hallo die Welt
serialPort.Write("TEXT 4 0 30 40 \r\n");
serialPort.Write("BARCODE-TEXT 7 0 5\r\n");
serialPort.Write(string.Format("BARCODE 128 1 1 50 150 10 {0}\r\n", barcode));
serialPort.Write("TEXT 4 0 30 40\r\n");
serialPort.Write("FORM\r\n");
serialPort.Write("PRINT\r\n");
serialPort.Close();
}
}
......但是所有的一起,就像在一个笨拙坑里的半躁狂的青少年一样 - 最后打印的条形码实际上是在纸上的最高点,而“Hola el Mundo”和看起来像“FOIPM”的东西(那怎么去那里?!?)。
如果"TEXT 4 0 30 40\r\n"
不是发送CRLF的方式,那是什么?
我注意到我在args中输入了打印条形码的拼写错误。这样:
serialPort.Write(string.Format("BARCODE 128 1 1 50 150 10 {0}\r\n", barcode));
......这应该是这样的:
serialPort.Write(string.Format("BARCODE 128 1 1 50 150 130 {0}\r\n", barcode));
...但是当我“修复”它(将垂直起点从10改为130)时,打印结果完全相同!请原谅我的法语,但北达科他州在这里发生了什么?!?
没关系,一旦我将修复程序添加到正确的位置,它确实有效(将“10”更改为“130”)。现在我必须让它“聪明”,因为它会考虑以前的打印区域,并且始终在先前打印的起点+高度以下打印后续行。
答案 0 :(得分:3)
看起来就像是在将CPCL直接写入打印机。您正在使用的TEXT命令在命令中包含x和y坐标 - 即,您正在编写的'30'和'40'告诉打印机始终在坐标30,40处打印每行文本。尝试使用要打印的每个后续文本行更改这些坐标。据我所知,CPCL没有“自动换行”功能,因此您必须为每行文本手动执行此操作。
或者,您可以将打印机置于行式打印模式。在此模式下,打印机将只打印它收到的任何文本,'\ r \ n'将使打印机开始在下一行打印。您可以通过向打印机发送以下命令来切换行打印模式:
! U1 setvar“device.languages”“line_print”[新行字符]
来源:CPCL手册 - http://www.zebra.com/content/dam/zebra/manuals/en-us/printer/cpcl-pm-en.pdf
答案 1 :(得分:1)
作为一般规则,请考虑使用System.Environment.Newline
但是,在这种情况下,您可能需要检查设备(Zebra QL220)对换行符的期望/要求。
答案 2 :(得分:1)
我不知道怎么写Zebra打印机,但是:
我看到“文本开头”(TEXT 4 0 30 40)和“条形码开始”(BARCODE 128 1 1)的代码。
是否应该有“文本结束”或“条形码结束”的代码?
“下一行”的代码怎么样?