如何使用C#获取打印作业状态

我能够打印文档,但我不知道如何获得它的状态。 我经历了很多资源( MSDN , 用于检查工作状态的链接 ),但无法找到答案。

我实际上想要从打印机确认文档是否成功打印。 此外,我也有兴趣,如果我可以从打印机获得错误信号,如纸张卡住。

我有打印机发送的打印机名称和文档名称。 有没有人在这方面做过一些研究,可以告诉我如何做到这一点?

网上有样品…谷歌“在c#中发送PJL命令”(PJL代表打印机工作语言)

codeproject 直接从打印机读取数据是一篇很好的文章/样本

您可能可以使用WMI。 它提供了几个与打印相关的类 ,包括Win32_PrintJob 。

这是未经测试的,但是这样的事情应该让你开始:

SelectQuery query = new SelectQuery("Win32_PrintJob"); using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(query)) using (ManagementObjectCollection printJobs = searcher.Get()) foreach (ManagementObject printJob in printJobs) { // The format of the Win32_PrintJob.Name property is "PrinterName,JobNumber" string name = (string) printJob["Name"]; string[] nameParts = name.Split(','); string printerName = nameParts[0]; string jobNumber = nameParts[1]; string document = (string) printJob["Document"]; string jobStatus = (string) printJob["JobStatus"]; // Process job properties... }