【问题标题】:Zebra Label Printer with C#使用 C# 的 Zebra 标签打印机
【发布时间】:2014-06-03 11:16:58
【问题描述】:

我在使用 C# .NET 使用 ZDesigner GK420T 打印标签时遇到问题。 我将以下字符串转换为字节并传递给打印机。

^XA 
^FO3,3^AD^FDZEBRA^FS
^XZ

预期的结果是打印机应该打印“ZEBRA”,但它没有。

我的 C# 代码:

StringBuilder sb; sb = new StringBuilder();
if (frmPrintJob._type != 1) 
{
    sb.AppendLine("^XA"); 
    sb.AppendLine("^FO3,3^AD^FDZEBRA^FS"); 
    sb.AppendLine("^XZ"); 
} 
int intTotalPrinted = 0; 
for (int i = 1; i <= NoOfCopies; i++) 
{ 
    if (RawPrinterHelper.SendStringToPrinter(PrinterName, sb.ToString()) == true) 
        intTotalPrinted++; 
}

我在这里做错了什么? 我需要任何额外的代码吗?

【问题讨论】:

  • 欢迎来到 Stack Overflow。你的问题完全不清楚。请阅读FAQHow to Askhelp center 作为开始..
  • 我修改了问题,你现在能看懂了吗?
  • 显示您的代码。它没有打印。它做了什么吗?有没有抛出异常?
  • @user3702654 请将此代码添加到您的问题中,而不是此处。
  • 在将其发送到打印机之前,我是否必须将 ZPL 代码转换为字节

标签: c# .net printing label


【解决方案1】:

首先你需要搞清楚以下几点:

  • 您是在打印 RFID 标签还是条形码标签
  • 是通过 USB 或并口连接的打印机

例如,以下 sn-p 使用并行端口 lpt1 在 Zebra 打印机上打印 RFID 标签:

String strPath = "C:\\Zebra";
String zplStart = "CT~~CD,~CC^~CT~\r\n^XA\r\n^MMT\r\n^PW831\r\n^LL0599\r\n^LSO\r\n";
String zplMiddle = "^FT50,180^BY3^BCN,200,N,N,N^FD"; ///+barcode
String zplMiddle2 = "^FS\r\n^FT600,145^AAN,30,10,^FH\\^FD";///+barcode 

String zplMiddle3 = "^FS^^RS8,,800,5^RFW,H^FD";//+RFID

String splend1 = "^FS\r\n^RWH,H^FS\r\n^RR10^FS\r\n^PQ1\r\n^XZ";
string filePath = strPath + "\\Books" + ".zpl";
string Prefix="..." //Define tag ID Prefix
string Sufix =".."//Define tag ID suffix
RFID ="Prefix"+ barcode +Sufix;
StreamWriter strw = new StreamWriter(filePath);
strw.Write(zplStart + zplMiddle + barcode + zplMiddle2 + barcode+ zplMiddle3 + RFID+  splend1); // assemble the three parts of the ZPL code

string command = "copy " + filePath + " lpt1"; //prepare a string with the command to be sent to the printer
// The /c tells cmd that we want it to execute the command that follows, and then exit.
System.Diagnostics.ProcessStartInfo sinf = new System.Diagnostics.ProcessStartInfo("cmd", "/c " + command);

sinf.UseShellExecute = false;
sinf.CreateNoWindow = true;

System.Diagnostics.Process p = new System.Diagnostics.Process(); // new process            
p.StartInfo = sinf;//load start info into process. 
p.Start(); //start process (send file to printer)

以上是 RFID 标签的示例,在您的情况下,我猜要输入的 zpl 字符串是:

string zpl="^XA^\r\nFO3,3^AD^FDZEBRA^FS\r\n^XZ";

注意我正在使用\r\n 以便移动到下一行..

【讨论】:

  • 抱歉没用,请给我一个 zpl 字符串,它会在 GK420t 中打印“ZEBRA”
  • 在将它发送到打印机之前,我是否需要将此 zpl 字符串转换为字节
  • @user3702654 请考虑将我的答案标记为正确
【解决方案2】:

打印机处理纯 ASCII 编码。请务必使用Encoding.ASCII 输出文本。另一个问题是 C# 无法直接写入并行端口。 apomene 展示了对写入文件的创造性使用,然后将其复制到lpt1。问题是他没有使用 ASCII,而是发送UTF-16

我不知道您的 RawPrinterHelper 是什么,但它是以 ASCII 还是 Unicode 格式发送文本?

解决这些问题可能会导致打印成功。

我在这里找到了该打印机的文档: http://www.servopack.de/support/zebra/ZPLII-Prog.pdf

【讨论】:

  • RawPrinterHelper 是一个可以在页面support.microsoft.com/kb/322091 上找到的类。由于它导入了非 Unicode API 函数,因此将在内部处理编码。我使用它非常成功地将 ZPL 发送到通过 USB 连接的打印机。
  • 尝试一个只打印“Zebra”测试的更小的示例应用程序。确保在每行之后以换行符 (\r\n) 结尾。
猜你喜欢
  • 2016-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多