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

本文关键字:打印 文档 打印机 检索 使用 | 更新日期: 2023-09-27 17:56:41

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

但现在我真的被困在我想做的下一步(也是最后一步)上。我需要知道文件是否真的打印出来了。我尽我所能(例如,我尝试实现这个 powershell 脚本,但我根本不熟悉 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.
    }

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

我认为问题是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();

我猜你的应用程序会知道是否有人打印了什么,否则你必须每隔一两秒轮询一次打印机队列,以确定一个作业是否去了打印机......