这将从我在摩托罗拉 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();
}
}
......但总的来说,就像一个半狂躁的青少年在 mosh 坑里 - 最后打印的条形码实际上是在纸上的最高点,“Hola el Mundo”和看起来像“FOIPM”的东西(怎么到达那里?!?),太。
如果"TEXT 4 0 30 40\r\n"
不是发送 CRLF 的方法,那是什么?
更新
我注意到我在打印条形码的参数中有一个错字。这个:
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)时,打印结果是相同的!对不起,我的法语,但是北达科他州在这里发生了什么?!?
更新 2
没关系,一旦我将修复程序添加到正确的位置,它确实有效(将“10”更改为“130”)。现在我必须让它“智能”,因为它会考虑到以前的打印区域,并总是在起始点 + 之前打印的高度下方打印后续行。