就目前而言,您正在使用的类(PrintDocument)不理解打印机的本机语言(EPL - 我认为!)。即使您的标签设计很简单,PrintDocument也无法生成EPL,因此只需创建一个与整个标签大小相同的图像,然后将图像发送到Zebra打印机驱动程序。由于驾驶员仅仅是被传递了一个图像,它并不知道你真的只是在打印文本和一个或两个盒子。相反,它将整个标签发送到打印机进行打印。因此,不是仅仅发送一些轻量级的EPL文本命令,而是将表示整个标签区域的数据作为图像发送。这意味着您发送的是千字节的数据而不是数据字节。此外,驱动程序不得不努力将图像数据转换为大型EPL图形命令。
我看到一个明显的选择,取决于您使用的是什么连接。它要求您阅读一些EPL手册,并将标签设计放在一起,以便于您使用。您可以在此处看到示例EPL标签:https://support.zebra.com/cpws/docs/eltron/common/epl2_samp.htm,此处的EPL手册为:https://support.zebra.com/cpws/docs/eltron/epl2/EPL2_Prog.pdf。
如果使用USB:
使用RawPrinterHelper通过驱动程序发送纯EPL命令到打印机:
http://support.microsoft.com/kb/322091
string printerName = "Your_Printer_Driver_Name";
string eplCommand = "N\r\nA50,0,0,1,1,1,N,\"Example 1\"\r\nP1\r\n";
RawPrinterHelper.SendStringToPrinter(printerName , eplCommand);
如果您使用的是TCP(以太网):
你的工作甚至是sim PLER。你甚至不需要司机。只需通过TCP连接将EPL下载到打印机:
string eplString = "N\r\nA50,0,0,1,1,1,N,\"Example 1\"\r\nP1\r\n";
// Open connection
System.Net.Sockets.TcpClient client = new System.Net.Sockets.TcpClient();
client.Connect(ipAddress, port);
// Write EPL String to connection
System.IO.StreamWriter writer = new System.IO.StreamWriter(client.GetStream());
writer.Write(eplString);
writer.Flush();
// Close Connection
writer.Close();
client.Close();
嗨杰森,谢谢你的回答。其实我也尝试过使用EPL命令。 (我也使用RawPrinterHelper类)通常,如果我们发送EPL而不是使用PrintDocument,打印机会更快地启动作业。有趣的是,如果我发送“P2,1”命令来打印2份标签,它会毫不拖延地打印出来。但是,如果我尝试使用“N ... P1 ... N ... P1”命令打印两个不同的标签,它将在每个标签后等待视频中的2-3秒。这里有一个有趣的部分:如果我为标签发送非常短的EPL命令(例如只打印一个文本),它不会在标签之间休眠。 – jetblack
..如果我使用“Zebra Setup Utilities”中的“与打印机直接通信”,这种情况不会改变。 – jetblack