【发布时间】:2020-01-20 11:57:26
【问题描述】:
我的 WinForms c# 应用程序广泛使用 Zebra 标签打印机,我们同时使用 EPL 和 ZPL 打印模式。经过大量测试,我们发现当windows print spooler 向打印机发送命令时,它会在打印后立即向同一台打印机发送状态命令。它以某种方式从驱动程序或打印机本身知道状态命令是什么,即“^HS”。
问题是当我们将打印机切换到 EPL 模式时,发送了状态命令,但它是 ZPL 格式,并且打印机没有响应。这种缺乏响应会导致 windows 打印后台处理程序在等待响应时超时。
我正在使用下面链接中的标准代码进行打印。
https://github.com/andyyou/SendToPrinter/blob/master/Printer/RawPrinterHelper.cs
当我们使用 Zebra 直接连接 SDK 时,我们可以直接与打印机对话,忽略 Windows 打印假脱机程序,并且不会发送此类状态命令。这是我们想要的行为,但 Zebra SDK 不适合我们的目的。
有谁知道我们可以如何改变 windows spooler 的这种行为?
示例代码,使用上面链接中的 RawPrinterHelper :
//Standard Zebra SGD to set ZPL language
string SetZPL = "! U1 setvar \"device.languages\" \"zpl\"\n";
//Standard Zebra SGD to set EPL language
string SetEPL = "! U1 setvar \"device.languages\" \"epl\"\n";
//Push to ensure printer is in ZPL mode
RawPrinterHelper.SendStringToPrinter(printerName, SetZPL);
//Set printer into EPL mode - This is where the delay occurs
RawPrinterHelper.SendStringToPrinter(printerName, SetEPL);
【问题讨论】:
-
到目前为止,我找到了与您链接的代码类似的代码。 here。检查其他人是否有与您遇到的类似问题。
-
他使用相同的 MS 示例类来发送 ZPL,但问题在于他的格式(我不是 EPL 专家,但我可以看到它真的很乱)。其中一个人确实提到您不应该向打印机发送“页面”命令以进行直接端口打印。我会试一试,回来报告。
-
实际上,我抢了先机。打印机说它可以工作,但没有文档标题,它只是在骗我假装工作。我非常讨厌这些打印机。抱歉,这不是修复,将删除之前的评论。
-
注明。我想回到绘图板。我会留意的。
-
我找到了 Zebra 的文档:Zebra EPL Printer Line Print Mode,其中指出行打印模式开关是:
! U1 setvar "device.languages" "line_print"手册 (pdf) 是 here