Imprimir carácter personalizado en impresora térmica usando plugin gratuito

Imprimir caracteres personalizados en impresora térmica

En este post te voy a mostrar cómo imprimir caracteres especiales en un ticket impreso con una impresora térmica.

Con lo mostrado aquí vas a poder imprimir letras ñ, acentos de español, símbolo de euro y muchos otros signos que no son posibles de imprimir normalmente.

Lo que ves en la siguiente foto no son imágenes; son caracteres definidos por mí que se pueden imprimir como si fueran texto y que van a reemplazar a una letra:

Caracteres personalizados en impresora térmica - Reemplazar letra por símbolo
Caracteres personalizados en impresora térmica – Reemplazar letra por símbolo

Nota: esto es la alternativa final en caso de que tu impresora no soporte los acentos o tildes.

Imprimiendo acentos y cosas de español

Las impresoras térmicas varían mucho en cuanto a los acentos y páginas de caracteres.

Algunas soportan la impresión de acentos sin configuraciones extras, otras necesitan deshabilitar el modo chino y convertir los caracteres y finalmente existen las que no soportan nada de eso.

Como sea, siempre recomiendo hacer lo siguiente en orden:

  1. Probar si puedes imprimir el carácter deseado normalmente (en la PT-210 funciona al menos en modo Bluetooth) invocando a EscribirTexto
  2. Deshabilitar el modo de caracteres chinos e imprimir convirtiendo el texto según una página de códigos. Recomiendo probar con todas las páginas de caracteres hasta agotarlas, y combinar todo. Esto que menciono está implementado en la función TextoSegunPaginaDeCodigos de este plugin: https://parzibyte.me/blog/2022/09/30/plugin-impresoras-termicas-version-3/)
  3. Definir un carácter personalizado como lo veremos a continuación.

Si nada funciona, recuerda que puedes enviarme un mensaje en https://parzibyte.me/#contacto para solicitar ayuda.

Definir carácter personalizado

Vamos a ver cómo definir una letra que tu impresora térmica no soporte, por ejemplo, el euro, el símbolo del centavo, el símbolo de tu moneda, la letra ñ, acentos o cualquier cosa que quepa en una cuadrícula de 12×24 en modo “pixel art”.

Nota: en este caso usaré un ejemplo con JavaScript pero podrás hacerlo con cualquier lenguaje de programación

Primero definimos el carácter como una cadena separada por saltos de línea. Por ejemplo:

const amongUsComoCadena = `000001111000
000010000100
000100011110
000100100001
011100100001
010100100001
010100100001
010100011110
010100000010
011100000010
000100111010
000100101010
000111101110
000000000000
000000000000
000000000000
111010101110
100010101000
111010101110
001010100010
111011101110
000000000000
000000000000
000000000000`;

Fíjate que la cadena no tiene tabulaciones ni espacios extra.

Lo que sigue es invocar a HabilitarCaracteresPersonalizados y luego a DefinirCaracterPersonalizado indicando el carácter que vamos a reemplazar y la matriz que lo remplaza.

Cuando hayamos hecho eso, el carácter de reemplazo aparecerá en lugar del carácter reemplazado al invocar a EscribirTexto. Veamos un ejemplo:

const conector = new ConectorPluginV3(URLPlugin);
const respuesta = await conector
    .Iniciar()
    .DeshabilitarElModoDeCaracteresChinos()
    .EstablecerAlineacion(ConectorPluginV3.ALINEACION_CENTRO)
    .DescargarImagenDeInternetEImprimir("http://assets.stickpng.com/thumbs/587e32259686194a55adab73.png", 0, 216)
    .Feed(1)
    .EscribirTexto("Parzibyte's blog\n")
    .EscribirTexto("Blog de un programador\n")
    .TextoSegunPaginaDeCodigos(2, "cp850", "Teléfono: 123456798\n")
    .EscribirTexto("Fecha y hora: " + (new Intl.DateTimeFormat("es-MX").format(new Date())))
    .Feed(1)
    .EstablecerAlineacion(ConectorPluginV3.ALINEACION_IZQUIERDA)
    .EscribirTexto("____________________\n")
    .TextoSegunPaginaDeCodigos(2, "cp850", "Venta de plugin para impresoras versión 3\n")
    .EstablecerAlineacion(ConectorPluginV3.ALINEACION_DERECHA)
    .EscribirTexto("$25\n")
    .EscribirTexto("____________________\n")
    .EscribirTexto("TOTAL: $25\n")
    .EscribirTexto("____________________\n")
    .EstablecerAlineacion(ConectorPluginV3.ALINEACION_CENTRO)
    .HabilitarCaracteresPersonalizados()
    .DefinirCaracterPersonalizado("$", amongUsComoCadena)
    .EscribirTexto("En lugar del simbolo de pesos debe aparecer un among us\n")
    .EscribirTexto("TOTAL: $25\n")
    .EstablecerEnfatizado(true)
    .EstablecerTamañoFuente(1, 1)
    .TextoSegunPaginaDeCodigos(2, "cp850", "¡Gracias por su compra!\n")
    .Feed(1)
    .ImprimirCodigoQr("https://parzibyte.me/blog", 160, ConectorPluginV3.RECUPERACION_QR_MEJOR, ConectorPluginV3.TAMAÑO_IMAGEN_NORMAL)
    .Feed(1)
    .ImprimirCodigoDeBarrasCode128("parzibyte.me", 80, 192, ConectorPluginV3.TAMAÑO_IMAGEN_NORMAL)
    .Feed(1)
    .EstablecerTamañoFuente(1, 1)
    .EscribirTexto("parzibyte.me\n")
    .Feed(3)
    .Corte(1)
    .Pulso(48, 60, 120)
    .imprimirEn(nombreImpresora);
if (respuesta === true) {
    alert("Impreso correctamente");
} else {
    alert("Error: " + respuesta);
}

Fíjate en la línea 22 y 23. Ahí en lugar del símbolo de pesos va a aparecer mi carácter personalizado.

Ahora en la línea 25 estoy imprimiendo el símbolo $ pero en realidad cuando se imprima el ticket aparecerá lo siguiente (revisa arriba de Gracias por su compra, junto al código QR):

Ticket impreso con Python en impresora térmica usando Plugin v3
Ticket impreso con Python en impresora térmica usando Plugin v3

Nota: la salida que ves está hecha con Python, pero así aprovecho para demostrar que se puede imprimir el carácter personalizado y que no importa desde cuál lenguaje de programación lo hagas.

Probarlo en línea

He creado un pequeño y simple playground en donde tú puedes definir el carácter para que obtengas la cadena de ceros y unos y luego puedas definir y enviar ese char personalizado.

Imprimir carácter personalizado en impresora térmica usando plugin gratuito
Imprimir carácter personalizado en impresora térmica usando plugin gratuito

Puedes probarlo en el siguiente enlace: https://parzibyte.github.io/ejemplos-javascript-plugin-v3/caracter_personalizado.html y ver el código fuente en: https://github.com/parzibyte/ejemplos-javascript-plugin-v3/blob/main/caracter_personalizado.html

Recuerda que antes de probarlo ya debiste haber configurado tu impresora y estar ejecutando el plugin. La guía está en:

Plugin para impresoras térmicas versión 3

Por cierto, por si te sirve, el símbolo del euro lo he definido así:

000011111100
000111111110
001111111110
001111000110
001110000010
001100000000
001000000000
001000000000
111111111000
111111111000
001000000000
001000000000
001000000000
111111111000
111111111000
001000000000
001000000000
001000000000
001100000000
001110000010
001111000110
001111111110
000111111110
000011111100

Aquí tienes un vídeo:

Sobre la compatibilidad

Recuerda que todas las impresoras tienen diferentes capacidades y algunas soportan cosas que otras no. Por ejemplo, mi Xprinter 58 permite definir e imprimir caracteres personalizados pero la PT-210 no.

Por otro lado la PT-210 permite imprimir acentos y todo tipo de caracteres sin convertirlos, pero no permite definir e imprimir caracteres personalizados.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *