1

这将从我在摩托罗拉 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”)。现在我必须让它“智能”,因为它会考虑到以前的打印区域,并总是在起始点 + 之前打印的高度下方打印后续行。

4

3 回答 3

3

看起来您正在将 CPCL 直接写入打印机。您正在使用的 TEXT 命令在命令中包含 x 和 y 坐标本身 - 即您正在编写的“30”和“40”告诉您的打印机始终在坐标 30,40 处打印每一行文本。尝试使用您要打印的每一行后续文本更改这些坐标。据我所知,CPCL 没有“自动换行”功能,因此您必须为每一行文本手动执行此操作。

或者,您可以将打印机置于行打印模式。在这种模式下,打印机将简单地打印它接收到的任何文本,而 '\r\n' 将使打印机开始打印下一行。您可以通过向打印机发送以下命令来切换行打印模式:

!U1 setvar "device.languages" "line_print" [此处为新行字符]

来源:CPCL 手册 - h​​ttp: //www.zebra.com/content/dam/zebra/manuals/en-us/printer/cpcl-pm-en.pdf

于 2013-02-11T15:55:02.240 回答
1

作为一般规则,请考虑使用 System.Environment.Newline

但是,在这种情况下,听起来您可能需要检查您的设备 (Zebra QL220) 对换行的期望/要求。

于 2013-02-08T23:19:03.633 回答
1

我不知道如何写入 Zebra 打印机,但是:

我看到“文本开头”(TEXT 4 0 30 40)和“条形码开头”(BARCODE 128 1 1)的代码。

“文本结束”或“条码结束”是否应该有一些代码?

“下一行”的代码怎么样?

于 2013-02-09T16:38:50.130 回答