2015-06-17 5 views
1

В настоящее время я разрабатываю службу, которая отправляет файл PDF на сетевой принтер и эффективно печатает его с использованием библиотеки C# и .Извлечение документов, распечатанных с помощью принтера C#

Но теперь я действительно придерживаюсь следующего (и последнего) шага, который я хочу сделать. Мне нужно знать, что файл был действительно напечатан. Я попробовал все, что мог (например, я попытался реализовать этот 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

Я думаю, что проблема заключается в 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(); 

Я предполагаю, что ваше приложение будет знать, если кто-то что-то напечатано, в противном случае вам придется опрашивать очереди принтера каждый второй или два, чтобы выяснить, если работа пошла на принтер ...

Смежные вопросы