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 texto 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 en modo Bluetooth desde Android y modo USB) 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 cargaUtil = {
  "serial": "",
  "nombreImpresora": "Termica",
  "operaciones": [
    {
      "nombre": "Iniciar",
      "argumentos": []
    },
    {
      "nombre": "HabilitarCaracteresPersonalizados",
      "argumentos": []
    },
    {
      "nombre": "DefinirCaracterPersonalizado",
      "argumentos": [
        "_",
        "000001111000\n000010000100\n000100011110\n000100100001\n011100100001\n010100100001\n010100100001\n010100011110\n010100000010\n011100000010\n000100111010\n000100101010\n000111101110\n000000000000\n000000000000\n000000000000\n111010101110\n100010101000\n111010101110\n001010100010\n111011101110\n000000000000\n000000000000\n000000000000"
      ]
    },
    {
      "nombre": "EscribirTexto",
      "argumentos": [
        "En lugar del guion bajo _, va a aparecer el caracter definido previamente:\n_"
      ]
    },
    {
      "nombre": "Feed",
      "argumentos": [
        2
      ]
    }
  ]
};
const respuestaHttp = await fetch("http://localhost:8000/imprimir", {
    method: "POST",
    body: JSON.stringify(cargaUtil)
});
const respuesta = await respuestaHttp.json();
if (respuesta.ok) {
    console.log("Impreso correctamente")
} else {
    console.error("Petición ok pero error en el plugin: " + respuesta.message);
}

En este caso estoy reemplazando el guión bajo con el carácter personalizado. Eso fue un ejemplo básico, pero aquí hay otro donde en lugar del símbolo de peso $ aparece el carácter personalizado en un ticket.

El carácter será reemplazado en todas las instancias del ticket.

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.

Configurar impresora y descargar servidor HTTP a ESC POS

Para que el código funcione necesitas el servidor local de la API ESC POS ejecutándose y que tu impresora esté compartida. Por favor, sigue los pasos que aparecen en la página previamente enlazada, ya que ahí está la API unificada.

La documentación completa está en: https://parzibyte.me/http-esc-pos-desktop-docs/es/

Probarlo en línea

En la documentación oficial de la API del plugin HTTP local a ESC POS puedes probar el ejemplo para definir e imprimir caracteres personalizados en el área de pruebas.

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 *