es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo imprimir un código QR (o imagen) en una impresora térmica?

Estoy trabajando con software que se ejecuta en Linux/Windows y también en Android.
En Linux y Windows, imprime códigos QR generando un mapa de bits y enviándolo a través de ESC * a impresoras térmicas serie.
En Android, utiliza Bluetooth, pero para un dispositivo en particular (una tablet con Android 4.4), la impresora en realidad es serie. Por lo tanto, debería funcionar igual que en Linux o Windows.

Sin embargo, no funciona, imprime este desorden:
Imagen del código QR mal formado

La autoprueba de la impresora imprime un código QR, por lo que supongo que sí admite códigos QR. No tengo idea de qué marca/modelo es, buscar “80-IV-UR Thermal Printer” no ofrece mucho.

Entonces, seguí adelante e intenté implementar GS ( k en su lugar. Esto es en lo que estoy:

GS ( k 165: 0x1D 0x28 0x6B 0x04 0x00 0x31 0x41 0x32 0x00 (n1 0x31, modelo 1)
GS ( k 167: 0x1D 0x28 0x6B 0x03 0x00 0x31 0x43 0x08 (n 0x08)
GS ( k 169: 0x1D 0x28 0x6B 0x03 0x00 0x31 0x45 0x31 (n 0x31, ECC M)
GS ( k 180: 0x1D 0x28 0x6B 0x0E 0x00 0x31 0x50 0x30 0x69 0x20 0x61 0x6D 0x20 0x61 0x20 0x74 0x65 0x73 0x74 (pL 14 pH 0 “soy una prueba”)
GS ( k 181: 0x1D 0x28 0x6B 0x03 0x00 0x31 0x51 0x30 (m 0x30)
GS ( k 182: 0x1D 0x28 0x6B 0x03 0x00 0x31 0x52 0x30 (m 0x30)

Sin embargo, cuando la impresora llega a esta parte del recibo, simplemente se detiene.
imprima 1: imprime todo hasta antes del QR
imprima 2: no imprime nada
imprima 3: imprime todo hasta antes del QR
imprima 4: no imprime nada

¿Estoy utilizando estos comandos incorrectamente o hay algo mal en otro lugar?
¿Es GS ( k 182 (tamaño de transmisión) opcional?
¿Estos comandos ESC/POS son ampliamente compatibles? ¿Desde cuándo?
¿La parte de datos de GS ( k 180 también debe estar en bytes/hexadecimal o debe ser ASCII?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Solución

    Descripción del problema

    El software genera un mapa de bits y lo envía a las impresoras térmicas seriales a través de ESC * en linux/windows. En Android, utiliza Bluetooth para imprimir códigos QR. Sin embargo, un dispositivo en particular (una tablet con Android 4.4) que tiene una impresora serial, imprime un código QR deformado a pesar de poder imprimir un código QR en la autoevaluación.

    Enfoque de la solución

    El enfoque que se ha intentado es implementar “GS ( k” en la impresora. Sin embargo, la impresora deja de imprimir después de alcanzar cierta parte del comando. Se han planteado las siguientes consultas para buscar una solución adecuada:

    1. ¿Estoy utilizando estos comandos de manera incorrecta o hay algo mal en otro lugar?
    2. ¿Es opcional el “GS ( k 182” (tamaño de transmisión)?
    3. ¿Estos comandos ESC/POS son ampliamente compatibles? ¿Desde cuándo?
    4. ¿La parte de datos de “GS ( k 180” también debe estar en bytes/hexadecimal o debe ser ASCII?

    Solución

    A continuación se presentan las respuestas a las consultas planteadas:

    1. La impresora deja de imprimir después de alcanzar cierta parte de “GS ( k” porque los parámetros del comando enviados son incorrectos. En lugar de “[165]” para el número de modelo “n1”, se debe usar “[49]”. Además, el valor hexadecimal del mensaje debe ser “0x41 0x00”, donde “0x41” indica que el mensaje está en formato alfanumérico y “0x00” indica la longitud del mensaje. El comando corregido sería:
      GS ( k [49] 0x1D 0x28 0x6B 0x03 0x00 0x31 0x41 0x00
      
    2. “GS ( k 182” es opcional si la impresora puede determinar automáticamente el tamaño de transmisión. Si no, es necesario.
    3. Los comandos ESC/POS son ampliamente compatibles con la mayoría de las impresoras térmicas, ya que son un estándar de la industria para la impresión.

    4. La parte de datos de “GS ( k 180” debe representarse en formato ASCII. Para representar datos ASCII en forma hexadecimal, es necesario convertirlos de ASCII a hexadecimal. Por ejemplo, el mensaje ASCII “i am a test” se convertirá en “69 20 61 6D 20 61 20 74 65 73 74”. El comando corregido sería:

      GS ( k [49] 0x1D 0x28 0x6B 0x0E 0x00 0x31 0x50 0x30 0x69 0x20 0x61 0x6D 0x20 0x61 0x20 0x74 0x65 0x73 0x74
      

Comments are closed.