En este post voy a exponer la lista de funciones disponibles al usar el Plugin para impresoras térmicas ESC POS V3 Desktop. En esta lista vas a encontrar todas las operaciones que el plugin soporta, desde la impresión de texto hasta la impresión de imágenes eligiendo el algoritmo adecuado.
Dicho plugin para impresoras térmicas soporta llamadas a través de HTTP y expone los métodos listados aquí a través de una API REST. Puedes ver algunos ejemplos con JavaScript y un diseñador de tickets.
Especificación del plugin
El plugin inicia un servidor web en localhost:8000 y expone la siguientes rutas.
Ruta /imprimir con método POST
Haz una petición de tipo POST a http://localhost:8000/imprimir
enviando un JSON como se describe a continuación. El endpoint siempre devolverá un JSON que será true en caso de éxito y, en caso de error, una cadena conteniendo el mensaje de error.
Al invocar a este método debes enviarle
operaciones
: un arreglo de tipo OperaciónnombreImpresora
: el nombre de la impresora como cadenaserial
: un serial para el plugin en caso de que cuentes con uno. No es obligatorio y puedes enviarlo como una cadena vacía
El tipo Operación
es un objeto que tiene las propiedades:
nombre
: el nombre de la operación que encontrarás a continuación en la lista de métodosargumentos
: un arreglo de tipo genérico que incluye los argumentos para la operación que se invoca. Envíalo vacío si la operación no tiene argumentos
Ejemplo para imprimir
Veamos un ejemplo para imprimir texto plano que diga “Hola mundo” en la impresora llamada PT-210. En la lista de métodos, la función para escribir texto dice: EscribirTexto(texto string)
por lo que la operación se llama EscribirTexto
y recibe solo un argumento de tipo string, mismo que contiene el texto. El nombre del argumento no importa, solo su contenido y orden.
Entonces el arreglo de operaciones quedaría así:
[
{
"nombre": "EscribirTexto",
"argumentos": [
"Hola mundo"
]
}
]
Como lo vamos a imprimir en la PT-210 y no tenemos serial, nuestra carga útil queda así:
{
"nombreImpresora": "PT-210",
"serial": "",
"operaciones": [
{
"nombre": "EscribirTexto",
"argumentos": [
"Hola mundo"
]
}
]
}
Toma en cuenta que debemos codificar la carga útil como JSON, así que codificada queda así:
{"nombreImpresora":"PT-210","serial":"","operaciones":[{"nombre":"EscribirTexto","argumentos":["Hola mundo"]}]}
Supongamos que ahora queremos cortar el papel además de escribir el texto. Para ello usamos la función de corte que dice: Corte(lineas float64) así que dice que debemos invocar a la función llamada Corte enviándole la cantidad de líneas, quedando así sin codificar:
{
"nombreImpresora": "PT-210",
"serial": "",
"operaciones": [
{
"nombre": "EscribirTexto",
"argumentos": [
"Hola mundo"
]
},
{
"nombre": "Corte",
"argumentos": [
2
]
}
]
}
Observa que ahora se va a escribir el texto y después se va a cortar avanzando 2 líneas previamente. En caso de que la operación no tenga argumentos, el arreglo argumentos puede ir vacío [] y si tiene más de un argumento solo coloca los valores en orden.
Ruta /impresoras GET
Haz una petición de tipo GET a http://localhost:8000/impresoras. El endpoint siempre devolverá un JSON que será un arreglo de tipo cadena conteniendo las impresoras que haya encontrado en caso de éxito y, en caso de error, una cadena conteniendo el mensaje de error.
Lista de métodos
A continuación se describe el nombre de la operación y sus argumentos. Debes enviar cada operación como un objeto dentro del arreglo operaciones
, y cada operación debe tener un nombre
que corresponde al nombre de la función, además de los argumentos
que deben ir en el orden en el que se indica entre los paréntesis de cada función.
CargarImagenLocalEImprimir(ruta string, maximoAncho float64, algoritmo float64)
Lee una imagen del almacenamiento local, la convierte a blanco y negro y la imprime usando el algoritmo indicado. Revisar la función imprimirImagen
para ver los detalles de los parámetros
Corte(lineas float64)
Corte completo
CorteParcial()
Corte parcial
DefinirCaracterPersonalizado(caracterRemplazoComoCadena string, matrizComoCadena string)
Establece un carácter personalizado de 24×12. Es útil para imprimir caracteres no soportados por algunas impresoras, ya sea el euro, centavo o lo que puedas dibujar en un cuadro de 24×12
Esta función establece el carácter personalizado pero no lo imprime. Solo hace falta llamarla a una vez, y después cada que se imprima el carácter reemplazado se va a imprimir el personalizado
La matrizComoCadena debe ser, como su nombre lo dice, una matriz como cadena (wow). Debe tener exactamente 24 líneas (separadas por un salto de línea) y en cada fila debe haber exactamente 12 dígitos, cada dígito debe ser un 1 o un 0. No debe haber tabulaciones ni espacios extra
Aquí un ejemplo de cadena válida:
000001111000
000010000100
000100011110
000100100001
011100100001
010100100001
010100100001
010100011110
010100000010
011100000010
000100111010
000100101010
000111101110
000000000000
000000000000
000000000000
111010101110
100010101000
111010101110
001010100010
111011101110
000000000000
000000000000
000000000000
Nota: la matriz es de 24×12 porque así es la fuente A. Si fuera la fuente B sería de 17×9, pero esa fuente no funciona en mi impresora así que no he probado. Es decir, no intentes esto si tienes seleccionada la fuente B
DescargarImagenDeInternetEImprimir(urlImagen string, maximoAncho float64, algoritmo float64)
Descarga una imagen de internet, la convierte a blanco y negro y la imprime usando el algoritmo indicado. Revisar la función imprimirImagen
para ver los detalles de los parámetros
DeshabilitarCaracteresPersonalizados()
Deshabilita los caracteres personalizados
DeshabilitarElModoDeCaracteresChinos()
Deshabilita el modo de caracteres chinos. Si tu impresora es china y al imprimir acentos aparecen caracteres chinos es porque debes deshabilitarlos
EscribirTexto(texto string)
Escribe texto en la impresora. El texto no será impreso hasta que se encuentre un salto de línea o se invoque a Feed
EstablecerAlineacion(alineacion float64)
Establece la alineación del texto e imágenes (incluyendo códigos de barras y QR) según la alineacion. Izquierda es 0, Centro 1 y Derecha 2
EstablecerEnfatizado(enfatizado bool)
Habilita o deshabilita el modo enfatizado
EstablecerFuente(fuente float64)
Establece la fuente, que puede ser 0 o 1. En mi caso solo soporta una fuente que es la A. Tener cuidado al cambiar la fuente e intentar imprimir un carácter personalizado, pues por el momento solo funciona con la fuente A
EstablecerImpresionAlReves(alReves bool)
Habilita o deshabilita la impresión al revés
EstablecerImpresionBlancoYNegroInversa(invertir bool)
Habilita o deshabilita la impresión inversa. En modo inverso, el fondo es negro y el texto blanco
EstablecerRotacionDe90Grados(rotar bool)
Habilita o deshabilita la rotación de 90 grados
EstablecerSubrayado(subrayado bool)
Habilita o deshabilita el modo subrayado
EstablecerTamañoFuente(multiplicadorAncho, multiplicadorAlto float64)
Establece el tamaño de la fuente según el multiplicador de ancho y el multiplicador del alto. Ambos valores pueden ir desde el 1 hasta el 8. También afecta a los caracteres personalizados
Feed(lineas float64)
Imprime los datos almacenados en el búfer de la impresora (almacenados con EscribirTexto
y similares) y empuja el papel una cantidad de lineas
GenerarImagenAPartirDeHtmlEImprimir(html string, anchoPagina float64, maximoAncho float64, algoritmo float64)
Genera una imagen a partir del html
usando el anchoPagina
como el ancho de la pantalla del navegador web para renderizar la imagen Después, imprime esa imagen con el maximoAncho
y el algoritmo
indicado
GenerarImagenAPartirDePaginaWebEImprimir(direccionPagina string, anchoPagina float64, maximoAncho float64, algoritmo float64)
Genera una imagen a partir del html generado por la página web ubicada en la direccionPagina
usando el anchoPagina
como el ancho de la pantalla del navegador web para renderizar la imagen Después, imprime esa imagen con el maximoAncho
y el algoritmo
indicado
HabilitarCaracteresPersonalizados()
Habilita los caracteres personalizados. Si está habilitado entonces se va a imprimir el carácter personalizado en lugar del carácter que fue reemplazado
HabilitarElModoDeCaracteresChinos()
Habilita el modo de caracteres chinos. Solo presente porque existe también DeshabilitarElModoDeCaracteresChinos
Imprimir imagen
Imprime la imagen usando el algoritmo indicado. Dependiendo del algoritmo (flotante que puede ser 0, 1 o 2) se tomará en cuenta el ancho o el alto máximo. Para el algoritmo NV Graphics y Raster Bit Image se toma en cuenta el ancho, para el caso del Bit image column format se toma en cuenta el alto.
Bit Image Column Format – Algoritmo 0
Imprime una imagen usando el algoritmo Bit image column format. El alto de la imagen debe ser múltiplo de 24. Si el alto de la imagen es mayor al altoMaximo
especificado, la misma será redimensionada para que su ancho sea altoMaximo
Raster Bit Image – Algoritmo 1
Imprime una imagen usando el algoritmo Raster bit image. El ancho de la imagen debe ser múltiplo de 8. Si el ancho de la imagen es mayor al anchoMaximo
especificado, la misma será redimensionada para que su ancho sea anchoMaximo
NV Graphics – Algoritmo 2
Imprime una imagen usando el algoritmo NV Graphics. El ancho de la imagen debe ser múltiplo de 8. Si el ancho de la imagen es mayor al anchoMaximo
especificado, la misma será redimensionada para que su ancho sea anchoMaximo
Códigos de barras
Las siguientes funciones imprimen códigos de barras siguiendo el mismo proceso. Se genera la imagen, se convierte a blanco y negro y luego se imprime usando el algoritmo indicado. Revisar la función imprimirImagen
para ver los detalles de los parámetros.
- ImprimirCodigoDeBarrasCodabar(contenido string, alto, ancho float64, algoritmo float64)
- ImprimirCodigoDeBarrasCode128(contenido string, alto, ancho float64, algoritmo float64)
- ImprimirCodigoDeBarrasCode39(contenido string, incluirSumaDeVerificacion, modoAsciiCompleto bool, alto, ancho float64, algoritmo float64)
- Nota: el parámetro incluirSumaDeVerificacion y modoAsciiCompleto son propios
del algoritmo del código de barras, no del plugin
- Nota: el parámetro incluirSumaDeVerificacion y modoAsciiCompleto son propios
- ImprimirCodigoDeBarrasCode93(contenido string, alto, ancho float64, algoritmo float64)
- ImprimirCodigoDeBarrasEan(contenido string, alto, ancho float64, algoritmo float64)
- ImprimirCodigoDeBarrasEan8(contenido string, alto, ancho float64, algoritmo float64)
- ImprimirCodigoDeBarrasPdf417(contenido string, nivelSeguridad float64, alto, ancho float64, algoritmo float64)
Nota: el nivel de seguridad tiene que ver con el propio algoritmo del código
de barras, no con el plugin. Debe ser entre 0 y 8 - ImprimirCodigoDeBarrasTwoOfFiveITF(contenido string, intercalado bool, alto, ancho float64, algoritmo float64)
Nota: el parámetro “intercalado” es propio del algoritmo del código de
barras, no del plugin
- ImprimirCodigoDeBarrasPdf417(contenido string, nivelSeguridad float64, alto, ancho float64, algoritmo float64)
- ImprimirCodigoDeBarrasUpcA(contenido string, alto, ancho float64, algoritmo float64)
- ImprimirCodigoDeBarrasUpcE(contenido string, alto, ancho float64, algoritmo float64)
ImprimirCodigoQr(contenido string, anchoMaximo, nivelRecuperacion float64, algoritmo float64)
Nota: el nivelRecuperacion
es propio del algoritmo generador del QR, no del plugin. Puede ser 0 (low), 1 (medium), 2(high) y 3 (highest). Se recomienda medium
ImprimirImagenEnBase64(imagenCodificadaEnBase64 string, maximoAncho float64, algoritmo float64)
Convierte el texto en base64 a una imagen, la convierte a blanco y negro y la imprime usando el algoritmo
indicado. La imagenCodificadaEnBase64
puede ser JPG o PNG y tener o no tener el “base64,” Revisar la función imprimirImagen
para ver los detalles de los parámetros. Dependiendo del algoritmo, hay que cambiar el ancho o máximo alto
Iniciar()
Inicializar impresora. Limpia los datos en el búfer y reinicia la impresora al modo que estaba en efecto cuando fue encendida
Pulso(pin float64, tiempoEncendido float64, tiempoApagado float64)
Genera un pulso tomando en cuenta tiempoEncendido que son los milisegundos para encender y los milisegundos para apagar según tiempoApagado El pin puede ser 48 o 49 Normalmente debería ser el pin 48, tiempoEncendido 60, tiempoApagado 120
TextoSegunPaginaDeCodigos(numeroPagina float64, pagina, texto string)
Permite escribir texto con acentos. Hay que especificar el número de página (según la impresora) y el character code page para iconv.
Si me preguntan, yo he elegido la página 2 pero en lugar de especificar cp860 (como debería ser) especifico cp850 Así puedo imprimir lo siguiente con todo y acentos, signos, etcétera cp850 con numero 2 ¿EL VELOZ MURCIÉLAGO HINDÚ COMÍA FELIZ CARDILLO Y KIWI? ¡LA CIGÜEÑA TOCABA EL SAXOFÓN DETRÁS DEL PALENQUE DE PAJA!. cp850 con número 2 ¿el veloz murciélago hindú comía feliz cardillo y kiwi? ¡la cigüeña tocaba el saxofón detrás del palenque de paja!.
¡Muy interesante! estoy analizando tu información.
Gracias por compartir tus conocimientos 😉
Gracias a usted por comentar 😁