【问题标题】:Windows Print Spool Driver - Status request sent incorrectlyWindows 打印假脱机驱动程序 - 状态请求发送不正确
【发布时间】: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

标签: c# printing driver


【解决方案1】:

过去,当我使用 ZPL 作为打印解决方案时,我的字符串必须以

开头

^XA

并以

结尾

^XZ

有一个在线编辑器,您可以在其中实时使用 ZPL 代码。我相信,当您使用此代码时,它只会直接写入打印机。虽然我对 EPL 不太熟悉,但我不确定为什么会更慢。

很难知道为什么会有延迟,或者 EPL 是否天生就慢

【讨论】:

  • 延迟是由打印驱动程序引起的。当您切换到 EPL 模式时,打印驱动程序会发送一个“状态”命令,以检查打印机是否正在工作并且处于活动状态。但是对于切换格式后的第一条消息,发送的命令是 ZPL 格式,打印机不理解它,而在典型的斑马格式中,它只是忽略命令。然后打印机驱动程序必须坐在那里等待超时,您会得到延迟。我 99% 确定没有解决方案,因为这是一个非常小众的用例。
猜你喜欢
  • 2020-05-12
  • 1970-01-01
  • 2013-09-19
  • 2017-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-03
  • 2013-01-20
相关资源
最近更新 更多