Documentación Plugin ESC POS Desktop

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

  1. operaciones: un arreglo de tipo Operación
  2. nombreImpresora: el nombre de la impresora como cadena
  3. serial: 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:

  1. nombre: el nombre de la operación que encontrarás a continuación en la lista de métodos
  2. argumentos: 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
  • 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
  • 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!.

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.

2 comentarios en “Documentación Plugin ESC POS Desktop”

Dejar un comentario

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