Tengo una aplicación donde necesito imprimir un ticket. Cada boleto debe ser único. La aplicación es formularios de Windows y está escrita completamente en C#. Para nuestra aplicación, utilizamos impresoras láser monocromáticas Samsung ML-2525.¿Hay alguna manera de verificar si un proceso de impresión fue exitoso?
El flujo es básicamente el siguiente, el operador retira un producto/billete (que es única) y luego se presiona un botón que hace 2 cosas:
- se conecta a una base de datos y actualiza el producto tal como se utiliza
- imprime el billete (esto se hace usando System.Drawing y GDI +)
Por alguna razón, cada vez en cuando, la imagen que necesita ser impreso no se envía a la impresora. Es un caso raro, pero sucede.
Intenté conectarme a la impresora usando Win32_Printer (http://msdn.microsoft.com/en-us/library/Aa394363) pero no puedo obtener el estado actual de la impresora (en línea, fuera de línea, bajo tóner, atasco de papel, etc.). Solo puedo verificar si la impresora existe y si el tamaño del papel está instalado correctamente. Probé un código similar al siguiente, pero no funcionó
private string MonitorPrintJobWmi()
{
var jobMessage = String.Empty;
var scope = new ManagementScope(ManagementPath.DefaultPath);
scope.Connect();
var selectQuery = new SelectQuery { QueryString = @"select * from Win32_PrintJob" };
var objSearcher = new ManagementObjectSearcher(scope, selectQuery);
var objCollection = objSearcher.Get();
foreach (var job in objCollection)
{
if (job != null)
{
jobMessage += String.Format("{0} \r\n", job["Name"].ToString());
jobMessage += String.Format("{0} \r\n", job["JobId"].ToString());
_jobId = Convert.ToInt32(job["JobId"]);
jobMessage += String.Format("{0} \r\n", job["JobStatus"].ToString());
jobMessage += String.Format("{0} \r\n", job["Status"].ToString());
}
}
return jobMessage;
}
He intentado conseguir una API para la impresora, pero no pude conseguir un asimiento de él. Por cierto, el software de la impresora indica diferentes errores en la barra de herramientas de Windows.
Mi pregunta es si alguien me puede orientar en la dirección correcta sobre cómo conectarse a una impresora y verificar si la impresión fue exitosa.
Además, sería útil si alguien sabe de alguna otra impresora específica en la que pueda lograr esto, es decir, cambiar el hardware.
Gracias,
See related: http://stackoverflow.com/questions/1921487/confirm-successful-print-programmatically-in- windows – Eugene
Lo hice, pero un código de ejemplo para obtener una ventaja sería beneficioso. – lopezbertoni
@lopezbertoni Un poco de Google le mostrará cómo usar esos métodos vinculados en aplicaciones C# ... como http://www.codeproject.com/Articles/51085/Monitor-jobs-in-a-printer-queue-NET –