使用 C# 检索从打印机打印的文档

Retrieve documents printed from printer using c#

最近我一直在开发一项服务,该服务可将 PDF 文件发送到网络打印机并使用 C# 和 GhostscriptProcessor 库有效地打印它。

但现在我真的被我想做的下一步(也是最后一步)困住了。我需要知道文件是否真的打印出来了。我尽我所能(例如我尝试实现这个 powershell script 但我对 powershell 一点都不熟悉而且我很沮丧,因为我遇到了太多我无法解决的错误)但我找不到回答。

是否有任何方法可以使用 C#(任何库)检索文档是否已打印。或者检索打印文件的整个日志?我可以通过 C# 调用的任何脚本(或者不是,我可以绕过它)告诉我我需要的信息?

我想补充一点,我可以使用 System.Drawing.Printing 库访问打印机,如下所示:

var printServer = new PrintServer();
var myPrintQueues = printServer.GetPrintQueues(new[] { EnumeratedPrintQueueTypes.Local, EnumeratedPrintQueueTypes.Connections });
foreach (PrintQueue pq in myPrintQueues)
    {
        pq.Refresh();
        string printerName = "ES7470 MFP(PCL)";
        if (!pq.Name.ToUpper().Contains(printerName.ToUpper())) break;
        PrintJobInfoCollection jobs = pq.GetPrintJobInfoCollection();
        //And here I can use pq or jobs but I can't retrieve the log at all.
    }

我认为问题出在 PrintServer我不在你的环境中,所以我无法告诉你的设置,但 LocalPrintServer.GetPrintQueue 应该可以解决问题.

string printerName = "ES7470 MFP(PCL)";
LocalPrintServer localPrintServer = new LocalPrintServer();
PrintQueueCollection printQueues = localPrintServer.GetPrintQueues(new[] { EnumeratedPrintQueueTypes.Local, EnumeratedPrintQueueTypes.Connections });

if (printQueues == null) return false;

PrintQueue queue = printQueues.Where(x => x.Name.Equals(printerName)).FirstOrDefault();

我猜你的应用程序会知道是否有人打印了一些东西,否则你将不得不每隔一两秒轮询打印机队列以查明是否有作业发送到打印机...