验证PrintJob状态(热)

时间:2018-11-03 06:25:03

标签: c# printing thermal-printer printqueuewatch

我已经看到this questionthis question.的副本,除非我对答案有误解,否则这两个问题都不对我有效。

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

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

对于第一点和第三点,我求助于RawPrinterHelper。效果很好,但是只要安装了打印机,SendStringToPrinter始终会返回true。即使打印机安装不正确,也永远无法完成打印作业。我认为我无法使用RawPrinterHelper进行验证。

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

由于这些原因,ManagementObjectSearcher和ManagementEventWatcher也不会帮我这个忙。

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

尽管Duncans解决方案很棒,但我仍需要仔细研究它并使它与我的项目x64兼容,并且可能还需要进行更多的学习和理解才能将其纳入c#。

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

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

更新:最终用户需要在Windows中安装打印机并测试页正常运行。我不支持Windows无法识别的任何内容。

1 个答案:

答案 0 :(得分:0)

已将PrintQueueWatch库设置为x64安全的,并已在GitHub上发布:

https://github.com/MerrionComputing/PrintQueueWatch

但是,正如Michael Randall所指出的那样,热敏打印机并不总是使用Microsoft打印机驱动程序子系统或API,因此在这种情况下可能无法正常工作。