En este post te enseñaré a imprimir la letra ñ en una impresora térmica. Voy a mostrarte 3 alternativas para imprimir la ñ en una POS printer usando comandos ESC POS. La primera alternativa será definir un carácter personalizado en una cuadrícula de 12×24, luego veremos cómo cambiar la página de códigos de la impresora térmica para imprimir la ñ y finalmente vamos a ver cómo imprimir HTML como imagen.
Así que al final vas a poder imprimir la ñ en una impresora térmica usando la alternativa que prefieras.
Nota: obviamente estas son alternativas en caso de que tu impresora no soporte la impresión de la letra eñe sin modificaciones adicionales. Por ejemplo, en mi impresora PT-210 puedo imprimir la ñ así como cualquier otro texto. Este post te va a enseñar a imprimir la Ñ en tu impresora térmica si la misma no es soportada o si en lugar de la letra se imprime un carácter extraño.
Definir la ñ como un carácter personalizado
Puedes dibujar la Ñ en una cuadrícula de 12×24 con ceros y unos. Esto permite imprimirla como si fuera texto nativo, además de respetar el enfatizado y el cambio de tamaño de fuente. La desventaja es que debes sacrificar otro carácter.
La letra ñ dibujada con ceros y unos se ve así:
000000000000
000000000000
000000000000
000111000100
001111111110
001101111100
000000010000
000000000000
011001111100
011111111110
011111001110
011100001110
011100001110
011000000110
011000000110
011000000110
011000000110
011000000110
011000000110
011000000110
011000000110
000000000000
000000000000
000000000000
Después podemos indicarle a la impresora térmica su definición y el carácter que va a reemplazar:
{
"nombre": "DefinirCaracterPersonalizado",
"argumentos": [
"_",
"000000000000\n000000000000\n000000000000\n000111000100\n001111111110\n001101111100\n000000010000\n000000000000\n011001111100\n011111111110\n011111001110\n011100001110\n011100001110\n011000000110\n011000000110\n011000000110\n011000000110\n011000000110\n011000000110\n011000000110\n011000000110\n000000000000\n000000000000\n000000000000"
]
},
En este ejemplo se va a reemplazar el guion bajo. Ahora, cada vez que se imprima algún texto con el guion bajo así:
{
"nombre": "EscribirTexto",
"argumentos": [
"Hola mundo. Imprimiendo letras que no existen en mi impresora, como la _"
]
},
El texto resultante será Hola mundo. Imprimiendo letras que no existen en mi impresora, como la ñ. Puedes probar esta operación en el playground.
Nota: no todas las impresoras soportan la definición de un carácter personalizado. Mi Xprinter 58 sí lo hace, pero mi PT-210 no.
Cambiar página de códigos de caracteres
La siguiente opción para imprimir la ñ es cambiar la charcode page. Con mi Xprinter 58 tengo la opción de deshabilitar el modo de caracteres chinos y luego imprimir texto cambiando la página de código de caracteres.
const cargaUtil = {
"serial": "",
"nombreImpresora": "",
"operaciones": [
{
"nombre": "DeshabilitarElModoDeCaracteresChinos",
"argumentos": []
},
{
"nombre": "TextoSegunPaginaDeCodigos",
"argumentos": [
2,
"cp850",
"Hola señor"
]
},
{
"nombre": "Feed",
"argumentos": [
4
]
}
]
};
Fíjate que al usar TextoSegunPaginaDeCodigos
con el número de página 2 y el charcode page cp850 puedo imprimir la ñ en mi POS printer, y no solo la ñ, también letras con tildes y más caracteres propios del español.
Como ya lo dije previamente: no todas las impresoras lo soportan, y el código de las páginas de caracteres varía entre modelos. Lo que recomiendo es probar con todas las combinaciones posibles.
Puedes probar este ejemplo en el playground.
Imprimir ñ usando HTML
Las impresoras térmicas pueden imprimir imágenes, así que podemos convertir una cadena de código HTML a imagen y después imprimir dicha imagen. Podemos escribir la ñ y cualquier otro texto dentro de esa cadena de HTML pues al final será como tomarle una captura de pantalla a una página web.
De este modo también podemos imprimir la letra Ñ usando comandos ESC POS.
const cargaUtil = {
"serial": "",
"nombreImpresora": "",
"operaciones": [
{
"nombre": "Iniciar",
"argumentos": []
},
{
"nombre": "GenerarImagenAPartirDeHtmlEImprimir",
"argumentos": [
"<html><meta charset=\"UTF-8\"><p><strong>¡Hola</strong> mundo! Soy la letra ñ</p></html>",
380,
380,
0,
false
]
}
]
};
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);
}
Revisa el ejemplo en el área de pruebas.
Conclusión
Existen varias formas de imprimir la letra ñ. Todo depende de tu impresora y tus necesidades. La opción que más recomiendo es la que involucra HTML.
Te dejo con un editor visual para impresora térmica y con la documentación oficial de las impresoras térmicas.