Estoy trabajando en un proyecto donde necesitamos utilizar una Zebra Impresora de etiquetas de código de barras.
Estamos usando C#, y estamos haciendo bien en la impresión de la cara de las cosas, el envío de crudo ZPL cadenas de caracteres a la impresora (el uso de winspool.drv).

Sin embargo, también tenemos que leer de la impresora, y no hubo suerte.

Necesitamos para obtener el estado de la impresora, que es la salida del comando ZPL «~SA», por lo que podemos decir cuántas etiquetas se encuentran en la memoria en espera de impresión.
El EnumJobs() de winspool.drv sólo tiene puestos de trabajo en la cola de impresión de windows, y una vez que se han enviado a la impresora, se han ido de esa lista. Pero eso no significa que la etiqueta ha sido impreso, debido a que la impresora tiene una cáscara de sensor y solamente imprime una etiqueta a la vez, y obviamente estamos interesado en el envío de lotes de etiquetas a la impresora.

He probado algo como (utilizando el winspool.drv llamadas):

OpenPrinter(szPrinterName, out hPrinter, IntPtr.Zero);
WritePrinter(hPrinter, pBytes, dwCount, out dwWritten); //send the string "~HS"
ReadPrinter(hPrinter, data, buff, out pcRead);

Pero me sale nada en la ReadPrinter llamada. Ni siquiera sé si esta es la manera correcta de ir en ella.

Alguien por ahí abordado este antes?

Gracias.

InformationsquelleAutor pmoreira | 2009-12-04

1 Comentario

  1. 3

    Me estoy enfrentando el mismo problema. ¿Ya gestionan nada sobre este tema?

    Ax Pérez Parra Castro, esta es la forma en que lo hice:

    -obtener la RawPrinterHelper clase a partir de aquí http://support.microsoft.com/kb/322091

    -mi impresora (zebra 2030) no admite ZPL, así como lo que yo sé la única manera es enviar unicode para que

    -He hecho una lista de los caracteres que necesito por ejemplo,

    string enq = Convert.ToChar(5).ToString();
    string esc = Convert.ToChar(27).ToString();
    string nul = Convert.ToChar(0).ToString();
    string rs = Convert.ToChar(30).ToString();
    string lf = Convert.ToChar(10).ToString();
    string cr = Convert.ToChar(13).ToString();
    

    (obtener los valores de tipo int en.wikipedia.org/wiki/ASCII)

    -componer el comando – por ejemplo, sb.Append(esc + enq + Convert.ToChar(7).ToString()); (desde el manual de la impresora, el comando < ESC>< ENQ><7> en el caso de obtener la versión de firmware)

    -enviar el comando RawPrinterHelper.SendStringToPrinter(printerName, sb.ToString()); (printerName en mi caso es «Zebra TTP 2030»)

Dejar respuesta

Please enter your comment!
Please enter your name here