【问题标题】:Validating PrintJob Status (Thermal)验证 PrintJob 状态(热)
【发布时间】:2018-11-03 06:25:02
【问题描述】:

我看到 this question 已作为 this question. 的副本关闭,除非我误解了答案,否则这两个问题对我来说都没有有效的解决方案。

我正在尝试创建 POS 样式打印。我的要求似乎很简单。

  1. 发送到热敏打印机 (RawPrinterHelper)
  2. 验证打印作业是否成功 (?)
  3. 如果失败或队列时间过长,发送到备份打印机。 (RawPrinterHelper)

对于第一点和第三点,我使用了RawPrinterHelper。它工作得很好,但只要安装了打印机,SendStringToPrinter 将始终返回 true。即使打印机设置不正确,也永远无法完成打印作业。我认为我不能使用 RawPrinterHelper 进行验证。

上面链接的问题使用Win32_PrintJob 上的ManagementObjectSearcher 来轮询有关打印作业的信息。我还使用Win32_PrintJob 上的ManagementEventWatcher 来轮询新的和已删除的打印作业事件。这些解决方案在大多数情况下都适用于验证打印作业,但很少使用热敏打印机(总页数可以'不可依赖)。轮询信息以验证打印作业似乎不是最佳选择。我很容易错过信息打印测试页。

由于这些原因,ManagementObjectSearcher 和 ManagementEventWatcher 对我也不起作用。

我似乎能找到的唯一可靠解决方案是Duncan Edwards Jones here。顺便说一句,如果您遇到此问题,我会从您那里学到很多东西。 Duncan 展示了如何使用FindFirstPrinterChangeNotification 来获取有关工作状态的事件。我已经对此进行了测试,我可以说它可以很好地验证从打印队列中删除打印作业是否成功打印。

虽然 Duncans 解决方案很棒,但我需要通过它并使其 x64 与我的项目兼容,并且可能需要更多的学习和理解才能将其融入 c#。

使用 FindFirstPrinterChangeNotification 的 Duncans 方法仍然是确定打印作业是否成功离开队列的合适方法吗?

我的一部分感觉我的工作时间太早了,.NET 现在必须有解决这个问题的方法。

更新:最终用户需要安装打印机并在 Windows 中测试页面功能。我不会支持任何 Windows 无法识别的东西。

【问题讨论】:

  • 是的,您在这里追求的是相当具体的东西,而热敏打印机因其出色的热敏打印机而臭名昭著。它取决于语言和固件以及您如何对其进行编程以自行处理,有时 Windows 驱动程序不知道它们。不过好在你找到了一些有用的东西,至少这是一线希望。但是我可以看到这个问题需要赏金
  • @TheGeneral 听起来这会很有趣。我明天有资格获得赏金,我将提供一个。谢谢

标签: c# printing thermal-printer printqueuewatch


【解决方案1】:

PrintQueueWatch 库已实现 x64 安全,并在 GitHub 上:

https://github.com/MerrionComputing/PrintQueueWatch

但是,正如 Michael Randall 指出的那样,热敏打印机并不总是使用 Microsoft 打印机驱动程序子系统或 API,因此它可能不适用于这种情况。

【讨论】:

  • 我做了一些广泛的测试,显示器不是很完美。有时它会将错误的打印作业名称报告为“低级文档”
  • 是的 - 监视器报告打印后台处理程序拥有的信息 - 这是执行打印的应用程序提供给它的信息。
  • 我编写了一个空应用程序来加载 1000 个名为 Job1、Job2、Job3、Job4 等的打印作业。在作业删除事件中,它经常告诉我删除的打印作业被命名为“低级文档”,而不是应用程序给它的相应名称。 PrintQueueWatch 非常棒,它可以让我省去很多麻烦,但我似乎无法解决这个问题。我只在 Windows 7 Professional 64bit 上见过这种情况。
  • 很抱歉给您带来了困惑。我认为它被错误地报告为“本地下级文档”而不是我在之前的帖子中指定的“低级文档”。
  • 嗨 - 您正在打印的打印机是否连接到本地机器?在我看来,这就像一个异步通信的东西——即当假脱机监视器试图获取它已经被删除或以某种方式标记为删除的文档的名称时?您可以将每个 JOB_ID 的名称放入 JOB_ADDED 和/或 JOB_WRITTEN 事件中的并发字典中。但感觉有点笨拙。这里有一些来自 PaperCut 的额外信息:papercut.com/kb/Main/RemoteDownlevelDocument 可能有帮助吗?
猜你喜欢
  • 1970-01-01
  • 2012-05-03
  • 1970-01-01
  • 1970-01-01
  • 2020-06-19
  • 1970-01-01
  • 1970-01-01
  • 2022-10-06
相关资源
最近更新 更多