Ответ 1
есть примеры онлайн... google "отправка команд PJL в С#" (PJL означает язык задания принтера)
codeproject Чтение данных непосредственно из принтера - хорошая статья/образец, чтобы начать с
Я могу распечатать документ, но я не знаю, как получить его статус. Я просмотрел много ресурсов (MSDN, Ссылки для проверки статуса работы), но не смог найти ответ.
Я действительно хочу получить подтверждение от принтера, был ли документ успешно напечатан или нет. Более того, меня также интересует, могу ли я получить сигнал ошибки от принтера, например, если бумага замялась.
У меня есть имя принтера и имя документа, которое я отправляю для печати. Кто-нибудь сделал некоторые исследования в этой области и может рассказать мне, как это сделать?
есть примеры онлайн... google "отправка команд 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...
}
Вы можете попробовать этот код также
//Проверка возможных состояний неисправности задания на печать с использованием флагов свойства JobStatus
internal static void SpotTroubleUsingJobAttributes(PrintSystemJobInfo theJob)
{
if ((theJob.JobStatus & PrintJobStatus.Blocked) == PrintJobStatus.Blocked)
{
Console.WriteLine("The job is blocked.");
}
if (((theJob.JobStatus & PrintJobStatus.Completed) == PrintJobStatus.Completed)
||
((theJob.JobStatus & PrintJobStatus.Printed) == PrintJobStatus.Printed))
{
Console.WriteLine("The job has finished. Have user recheck all output bins and be sure the correct printer is being checked.");
}
if (((theJob.JobStatus & PrintJobStatus.Deleted) == PrintJobStatus.Deleted)
||
((theJob.JobStatus & PrintJobStatus.Deleting) == PrintJobStatus.Deleting))
{
Console.WriteLine("The user or someone with administration rights to the queue has deleted the job. It must be resubmitted.");
}
if ((theJob.JobStatus & PrintJobStatus.Error) == PrintJobStatus.Error)
{
Console.WriteLine("The job has errored.");
}
if ((theJob.JobStatus & PrintJobStatus.Offline) == PrintJobStatus.Offline)
{
Console.WriteLine("The printer is offline. Have user put it online with printer front panel.");
}
if ((theJob.JobStatus & PrintJobStatus.PaperOut) == PrintJobStatus.PaperOut)
{
Console.WriteLine("The printer is out of paper of the size required by the job. Have user add paper.");
}
if (((theJob.JobStatus & PrintJobStatus.Paused) == PrintJobStatus.Paused)
||
((theJob.HostingPrintQueue.QueueStatus & PrintQueueStatus.Paused) == PrintQueueStatus.Paused))
{
HandlePausedJob(theJob);
//HandlePausedJob is defined in the complete example.
}
if ((theJob.JobStatus & PrintJobStatus.Printing) == PrintJobStatus.Printing)
{
Console.WriteLine("The job is printing now.");
}
if ((theJob.JobStatus & PrintJobStatus.Spooling) == PrintJobStatus.Spooling)
{
Console.WriteLine("The job is spooling now.");
}
if ((theJob.JobStatus & PrintJobStatus.UserIntervention) == PrintJobStatus.UserIntervention)
{
Console.WriteLine("The printer needs human intervention.");
}}
//end SpotTroubleUsingJobAttributes