【问题标题】:Why does my text not print?为什么我的文字不打印?
【发布时间】:2013-02-11 17:11:46
【问题描述】:

意识到我应该使用行打印模式(而不是标签模式)将 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");

这会打印条形码及其下方的人类可读数字(“barcode”中的值),但不会打印文本“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");

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

【问题讨论】:

  • what happens when you change this line serialPort.Write("Hallo die Welt\r\n\r\n");` to this serialPort.Write("Hallo die Welt" + Environment.NewLine);
  • 如果您使用 string.Format() 方法获得正确的输出,则保持一致并在您尝试编写的任何地方使用它。也尝试将返回字符反转为\n\r\n\r
  • 文档显示了“\r\n”的用法,它适用于条形码...
  • 如果您尝试使用 Environment.NewLine .. 会发生什么?
  • 我在这个项目中使用 .NET 1.1,其中 Environment.NewLine 似乎不可用。

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


【解决方案1】:

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

应该是

! U1 setvar "device.languages" "line_print"\r\n

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

更新:

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

【讨论】:

  • ?我确实在“device.languages”和“line_print”周围加了双引号。我必须将它们设为 string.Format() 的参数,否则我会在双引号中嵌入双引号,这会导致编译器将它的双手抛向空中。我在上面添加了更新。
  • 你总是可以用反斜杠转义双引号(例如 "\"line_print\"" )......即使在 SGD 之后使用 \r\n 它仍然不起作用?尝试完全删除该行。反正你只需要设置一次
  • 什么是新元?施利茨正版草稿?不幸的是,我认为这也无济于事。
  • 试图像你显示的那样转义引号,我想出了:serialPort.Write("!U1 setvar "\"device.languages\"" "\"line_print\"" \r\n ); ...但我在第一个反斜杠上得到“)预期”(然后是几个更多的错误消息)
猜你喜欢
  • 2015-06-16
  • 1970-01-01
  • 2015-08-11
  • 2015-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-22
  • 1970-01-01
相关资源
最近更新 更多