使用c#

时间:2015-06-17 14:32:58

标签: c# printing system.drawing

这一天,我一直在开发一种服务,将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.
    }

1 个答案:

答案 0 :(得分:1)

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

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