为什么所有的东西都打印在同一行上,尽管我';m添加crlfs

本文关键字:管我 一行 crlfs 添加 打印 为什么 | 更新日期: 2023-09-27 17:58:19

这将通过我在摩托罗拉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的一种方式,那是什么?

更新

我注意到我在打印条形码的参数中有一个拼写错误。此:

    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")。现在我必须让它变得"智能",因为它将考虑以前的打印区域,并始终在起点+之前打印的高度以下打印后续行。

为什么所有的东西都打印在同一行上,尽管我';m添加crlfs

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

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

U1 setvar"device.glanguages"line_print"[此处为换行符]

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

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

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

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

我看到了"文本开始"(Text 4 0 30 40)和"条形码开始"(条形码128 1 1)的代码。

应该有一些"文本结束"或"条形码结束"的代码吗?

"下一行"的代码怎么样?