就目前而言,您正在使用的類(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