Plugin para impresora térmica

Instalación y uso del plugin para impresoras térmicas V2

Este artículo describe la documentación del plugin para impresoras térmicas versión 2. Aquí se detalla cómo descargar y usar el plugin para la impresión directa desde la nube (aunque técnicamente se hace del lado del cliente).

Recuerda que este plugin no es para nada compatible con la versión 1, así que olvida todo lo que sepas sobre la versión anterior.

Instalación del plugin en Windows

  1. Instala y comparte tu impresora, puede ser genérica o con sus controladores; y colócale un nombre sin espacios ni caracteres especiales.
  2. Desde el panel de control imprime una página de prueba en la impresora y verifica que la misma sea impresa correctamente.
  3. Descarga el plugin y ejecútalo. Concede los permisos para el firewall en caso de que el mismo lo solicite. Recuerda que el plugin se va a ejecutar en segundo plano. Si quieres detenerlo puedes abrir el administrador de tareas.
  4. Ve a este ejemplo de las capacidades del plugin, y elige tu impresora de la lista. Si no aparece en la lista significa que no la instalaste correctamente. Revisa los puntos anteriores.
  5. Al presionar el botón, debe imprimirse un ticket parecido al siguiente:
Demostrar capacidades del plugin para impresoras térmicas

Felicidades, ya puedes usar el plugin. Ahora puedes proceder a leer la documentación o ver el código de los ejemplos.

Nota: tal vez quieras hacer que el conector se ejecute siempre que inicie Windows.

Uso del conector dentro de JavaScript

Asegúrate de que el conector se está ejecutando. Ahora descarga el script e inclúyelo en tu proyecto:

<!-- Cargar el script conector -->
<script src="ConectorPlugin.js"></script>

Con eso, tendrás la clase ConectorPlugin de manera global. Después, dentro de tu script en donde quieras usar al conector, crea una instancia de la clase ConectorPlugin así:

const conector = new ConectorPlugin();

Ahora puedes comenzar a imprimir tickets.  La sintaxis es:

const conector = new ConectorPlugin();
conector.algunaOperación(argumentos);
conector.algunaOperación(argumentos);
conector.otraOperación(argumentos);
/*
  ...
*/conector.imprimirEn(nombreImpresora)

Básicamente es crear la instancia, invocar operaciones (por ejemplo la alineación, texto, corte de papel, una imagen, etcétera) y finalmente llamar a imprimirEn pasándole el nombre de la impresora.

También puedes encadenar métodos, así:

new ConectorPlugin()
.algunaOperación(argumentos)
.algunaOperación(argumentos)
.otraOperación(argumentos)
.imprimirEn(nombreImpresora);

Ambos métodos son válidos y puedes usar el que más te guste.

La función imprimirEn devuelve una promesa. Al resolverse, devolverá true en caso de éxito, y una cadena en caso de error.

conector.imprimirEn("Mi impresora")
.then(respuestaAlImprimir => {
    if (respuestaAlImprimir === true) {
        // Todo OK
    } else {
        // Error. Imprime "respuestaAlImprimir" para obtener una pista
    }
});

Recuerda que igualmente puedes usar async y await. El código anterior quedaría así:

const respuestaAlImprimir = await conector.imprimirEn(nombreImpresora);
if (respuestaAlImprimir === true) {
    // Todo OK
} else {
    // Error. Imprime "respuestaAlImprimir" para obtener una pista
}

En el ejemplo vas a entenderlo de mejor manera.

Ejemplo simple de impresión de ticket

Ejemplo simple de impresión en impresora térmica usando JavaScript y Plugin

El ejemplo más simple queda así:

const conector = new ConectorPlugin();
conector.texto("Hola mundo\n");
conector.imprimirEn("Mi impresora")
    .then(respuestaAlImprimir => {
        if (respuestaAlImprimir === true) {
            console.log("Impreso correctamente");
        } else {
            console.log("Error. La respuesta es: " + respuestaAlImprimir);
        }
    });

También puede ser con await:

// Recuerda que debes estar dentro de una función async para usar await
const conector = new ConectorPlugin();
conector.texto("Hola mundo\n");
const respuestaAlImprimir = await conector.imprimirEn("Mi impresora");
if (respuestaAlImprimir === true) {
    console.log("Impreso correctamente");
} else {
    console.log("Error. La respuesta es: " + respuestaAlImprimir);
}

Encadenando métodos usando promesas:

new ConectorPlugin()
  .texto("Hola mundo\n")
  .imprimirEn("Mi impresora")
  .then(respuestaAlImprimir => {
      if (respuestaAlImprimir === true) {
          console.log("Impreso correctamente");
      } else {
          console.log("Error. La respuesta es: " + respuestaAlImprimir);
      }
  });

O encadenando métodos usando await:

// Recuerda que debes estar dentro de una función async para usar await
const respuestaAlImprimir = await new ConectorPlugin()
.texto("Hola mundo\n")
.imprimirEn("Mi impresora");
if (respuestaAlImprimir === true) {
    console.log("Impreso correctamente");
} else {
    console.log("Error. La respuesta es: " + respuestaAlImprimir);
}

Los 4 fragmentos de código hacen lo mismo, usa el que prefieras.

Documentación de la clase

Puedes encontrar toda la documentación y métodos en este enlace.

El log

Existe un archivo en donde se van a registrar todos los sucesos que ocurran con el plugin, así que recuerda que el archivo log es tu amigo y debes consultarlo siempre que ocurra algo inesperado.

Este log se va a encontrar en el mismo directorio que el plugin, y se ve algo así:

2021/02/08 20:58:44.394429 Plugin para comunicación con impresoras térmicas 
Proudly brought to you by Parzibyte
==========================================
 https://parzibyte.me/blog
==========================================
Entorno: Desarrollo
2021/02/08 20:58:44.394429 Escuchando en el puerto :8000.
2021/02/08 20:58:49.209879 Advertencia: el servidor indica que si bien la clave API existe, la misma no es válida. Esto no es un problema si solo se está usando la versión de prueba, pero si usted cuenta con la clave API recuerde colocarla sin espacios ni caracteres adicionales dentro del archivo api_key.txt
2021/02/08 20:59:01.402628 error de servidor. El mensaje es: la imagen 'C:\Users\Luis Cabrera Benito\Desktop\hollow_kinght.jpg' no existe o no es legible
2021/02/08 20:59:09.409349 Advertencia: el servidor indica que si bien la clave API existe, la misma no es válida. Esto no es un problema si solo se está usando la versión de prueba, pero si usted cuenta con la clave API recuerde colocarla sin espacios ni caracteres adicionales dentro del archivo api_key.txt
2021/02/08 21:01:40.885311 Advertencia: el servidor indica que si bien la clave API existe, la misma no es válida. Esto no es un problema si solo se está usando la versión de prueba, pero si usted cuenta con la clave API recuerde colocarla sin espacios ni caracteres adicionales dentro del archivo api_key.txt
2021/02/08 21:06:19.735654 Advertencia: el servidor indica que si bien la clave API existe, la misma no es válida. Esto no es un problema si solo se está usando la versión de prueba, pero si usted cuenta con la clave API recuerde colocarla sin espacios ni caracteres adicionales dentro del archivo api_key.txt
2021/02/08 21:06:56.311107 Advertencia: el servidor indica que si bien la clave API existe, la misma no es válida. Esto no es un problema si solo se está usando la versión de prueba, pero si usted cuenta con la clave API recuerde colocarla sin espacios ni caracteres adicionales dentro del archivo api_key.txt
2021/02/08 21:06:56.336113 error de servidor. El mensaje es: open \\DESKTOP-asdfg\OneNote for Windows 10: No se encuentra el nombre de red especificado.
2021/02/08 21:06:59.013530 Advertencia: el servidor indica que si bien la clave API existe, la misma no es válida. Esto no es un problema si solo se está usando la versión de prueba, pero si usted cuenta con la clave API recuerde colocarla sin espacios ni caracteres adicionales dentro del archivo api_key.txt
2021/02/08 21:23:33.672540 error de servidor. El mensaje es: la imagen 'https://github.com/parzibyte.png' no existe o no es legible
2021/02/08 21:23:44.452358 Advertencia: el servidor indica que si bien la clave API existe, la misma no es válida. Esto no es un problema si solo se está usando la versión de prueba, pero si usted cuenta con la clave API recuerde colocarla sin espacios ni caracteres adicionales dentro del archivo api_key.txt
2021/02/08 21:31:21.635508 Plugin para comunicación con impresoras térmicas 
Proudly brought to you by Parzibyte
==========================================
 https://parzibyte.me/blog
==========================================
Entorno: Producción
2021/02/08 21:31:21.635508 Escuchando en el puerto :8000.
2021/02/08 21:31:39.619666 error de servidor. El mensaje es: error haciendo petición al servidor. Por favor, reporte el problema e intente más tarde
2021/02/08 21:32:16.006801 Plugin para comunicación con impresoras térmicas 
Proudly brought to you by Parzibyte
==========================================
 https://parzibyte.me/blog
==========================================
Entorno: Producción
2021/02/08 21:32:16.006801 Escuchando en el puerto :8000.

No pasa nada si eliminas el archivo, pero recuerda que es importante leerlo si tienes errores. El plugin va a crear este log cada mes.

Distribuyendo plugin

Puedes instalar el plugin en las computadoras que quieras. Por cierto, si contrataste un plan también debes colocar el archivo api_key.txt junto con el plugin.

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.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Ver comentarios

Entradas recientes

Desplegar PWA creada con Vue 3, Vite y SQLite3 en Apache

Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…

3 días hace

Arquitectura para wasm con Go, Vue 3, Pinia y Vite

En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…

3 días hace

Vue 3 y Vite: crear PWA (Progressive Web App)

En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…

3 días hace

Errores de Comlink y algunas soluciones

Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…

3 días hace

Esperar promesa para inicializar Store de Pinia con Vue 3

En este artículo te voy a enseñar cómo usar un "top level await" esperando a…

3 días hace

Solución: Apache – Server unable to read htaccess file

Ayer estaba editando unos archivos que son servidos con el servidor Apache y al visitarlos…

3 días hace

Esta web usa cookies.