UNPKG

@seiton/printer

Version:

Driver para las impresoras Seiton, incluye todas las funciones basicas para poder imprimir tickets

386 lines (297 loc) 9.79 kB
# Seiton Driver Node [![NPM Version](https://img.shields.io/npm/v/@seiton/printer)](https://www.npmjs.com/package/@seiton/printer) Driver para impresoras térmicas Seiton que facilita la impresión de tickets mediante Node.js, con soporte completo de TypeScript. ## 📋 Requisitos Previos - Node.js >= 14.0.0 - npm >= 6.0.0 - Impresora Seiton conectada vía USB ## 🚀 Instalación ```bash npm install @seiton/printer ``` ## 💡 Uso Básico ### Typescript ```typescript import { Seiton, SEITON_VID, SEITON_PID } from '@seiton/printer'; // Crear una nueva instancia de Seiton para Windows vía USB const printerWindows = new Seiton({ usb: { windows: { vendorId: SEITON_VID.V1, // o tu VID específico, ej: 0x6868 productId: SEITON_PID.V1, // o tu PID específico, ej: 0x0300 }, }, }); // O para Linux vía USB const printerLinux = new Seiton({ usb: { linux: { devicePath: '/dev/usb/lp0', }, }, }); // O para conexión vía Ethernet const printerNetwork = new Seiton({ ethernet: { ip: '192.168.1.100', port: 9100, }, }); // Crear un ticket printer .alignToCenter() // Centrar el contenido .doubleTallDoubleWide() // Texto doble alto y ancho .addText('Mi Negocio') // Agregar texto .feedLines(1) // Avanzar una línea .setDefaultStyles() // Restablecer estilos .addText('Ticket #001') // Agregar número de ticket .feedLines(2) // Avanzar dos líneas .addQRCode('https://minegocio.com', 8) // Generar código QR .feedAndCutPaper() // Avanzar y cortar papel .print(); // Imprimir el ticket ``` ### Javascript ```javascript const { Seiton, SEITON_VID, SEITON_PID } = require('@seiton/printer'); // Crear una nueva instancia de Seiton para Windows vía USB const printerWindows = new Seiton({ usb: { windows: { vendorId: SEITON_VID.V1, // o tu VID específico, ej: 0x6868 productId: SEITON_PID.V1, // o tu PID específico, ej: 0x0300 }, }, }); // O para Linux vía USB const printerLinux = new Seiton({ usb: { linux: { devicePath: '/dev/usb/lp0', }, }, }); // O para conexión vía Ethernet const printerNetwork = new Seiton({ ethernet: { ip: '192.168.1.100', port: 9100, }, }); // Crear un ticket printer .alignToCenter() // Centrar el contenido .doubleTallDoubleWide() // Texto doble alto y ancho .addText('Mi Negocio') // Agregar texto .feedLines(1) // Avanzar una línea .setDefaultStyles() // Restablecer estilos .addText('Ticket #001') // Agregar número de ticket .feedLines(2) // Avanzar dos líneas .addQRCode('https://minegocio.com', 8) // Generar código QR .feedAndCutPaper() // Avanzar y cortar papel .print(); // Imprimir el ticket ``` La diferencia principal radica en la manera de importar el módulo. ## 📖 Métodos Disponibles ### Estilos de Texto - `.setDefaultStyles()` - Restablece todos los estilos a sus valores predeterminados - `.doubleTall()` - Aplica formato de texto doble alto - `.doubleWide()` - Aplica formato de texto doble ancho - `.doubleTallBold()` - Aplica formato de texto doble alto y negrita ### Alineación - `.alignToCenter()` - Centra el contenido - `.alignToRight()` - Alinea el contenido a la derecha ### Manejo de Texto y Papel - `.addText(texto: string)` - Agrega texto al ticket - `.feedLine()` - Avanza una línea - `.feedLines(lineas: number)` - Avanza múltiples líneas - `.feedAndCutPaper()` - Avanza y corta el papel - `.cutPaper()` - Corta el papel ### Códigos y Elementos Especiales - `.addQRCode(contenido: string, tamaño: number)` - Genera un código QR - `.addBarcode(datos: string, ancho?: number, alto?: number)` - Imprime un código de barras - `.posBeep(cantidadPitidos: number, duracionMs: number)` - Activa el buzzer - `.setStaticIP(ip: string, mask: string, gateway: string, dns1: string, dns2: string)` - Configura la impresora con una dirección IP estática - `.setDHCP()` - Configura la impresora para obtener una dirección IP dinámica mediante DHCP ### Control de Impresión y Estado - `.print()` - Imprime el ticket - `.printSelfTest()` - Imprime página de prueba - `.isPrinterConnected()` - Verifica si la impresora está conectada y accesible ## 🎯 Ejemplos Prácticos ### Ticket de Venta ```typescript // Configuración para Windows const printer = new Seiton({ windows: { vendorId: SEITON_VID.V1, productId: SEITON_PID.V1, }, }); // O para Linux // const printer = new Seiton({ // linux: { // devicePath: '/dev/usb/lp0' // } // }); printer .alignToCenter() .doubleTallBold() .addText('Supermercado XYZ') .setDefaultStyles() .feedLines(1) .addText('Fecha: 2024-01-20') .addText('Ticket #: 001') .feedLines(1) .addText('Producto 1 ........... $100') .addText('Producto 2 ........... $200') .feedLines(1) .doubleTallBold() .alignToRight() .addText('Total: $300') .setDefaultStyles() .feedLines(2) .alignToCenter() .addQRCode('https://miticket.com/001', 8) .feedAndCutPaper() .print(); ``` ### Ticket Simple con Código de Barras ```typescript // Configuración para Windows const printer = new Seiton({ windows: { vendorId: SEITON_VID.V1, productId: SEITON_PID.V1, }, }); printer.alignToCenter().addText('Código de Producto').addBarcode('12345678', 4, 100).feedLines(4).print(); ``` ### Configuración de la impresora con IP estática ```typescript const printer = new Seiton({ windows: { vendorId: SEITON_VID.V1, productId: SEITON_PID.V1, }, }); printer.setStaticIP('192.168.1.100', '255.255.255.0', '192.168.1.1', '8.8.8.8', '8.8.4.4').printSelfTest(); ``` ### Configuración de la impresora con IP dinámica ```typescript const printer = new Seiton({ windows: { vendorId: SEITON_VID.V1, productId: SEITON_PID.V1, }, }); printer.setDHCP().printSelfTest(); ``` ## 🔧 Configuración del Dispositivo La librería soporta dos modos de configuración dependiendo del sistema operativo: ### Windows ## 🔧 Configuración La clase `Seiton` acepta un objeto de configuración con las siguientes interfaces: ### ISeitonConfig Interfaz principal de configuración que permite especificar el tipo de conexión: ```typescript interface ISeitonConfig { usb?: ISeitonUSBConfig; // Configuración para conexión USB ethernet?: ISeitonEthConfig; // Configuración para conexión Ethernet } ``` ### ISeitonUSBConfig Configuración específica para conexiones USB en diferentes sistemas operativos: ```typescript interface ISeitonUSBConfig { windows?: ISeitonWindowsConfig; // Configuración para Windows linux?: ISeitonLinuxConfig; // Configuración para Linux } ``` ### ISeitonWindowsConfig Configuración para dispositivos USB en Windows: ```typescript interface ISeitonWindowsConfig { vendorId: number; // ID del Vendedor USB (VID) productId: number; // ID del Producto USB (PID) } ``` ### ISeitonLinuxConfig Configuración para dispositivos USB en Linux: ```typescript interface ISeitonLinuxConfig { devicePath: string; // Ruta del dispositivo USB (ej: '/dev/usb/lp0') } ``` ### ISeitonEthConfig Configuración para conexiones Ethernet: ```typescript interface ISeitonEthConfig { ip: string; // Dirección IP de la impresora port: number; // Puerto de la impresora (típicamente 9100) } ``` ### Notas importantes: - Solo se debe proporcionar una configuración a la vez (USB o Ethernet) - Para USB, solo se debe configurar un sistema operativo (Windows o Linux) - Para Windows, los valores de `vendorId` y `productId` deben ser números hexadecimales válidos entre 0x0000 y 0xFFFF - Para Linux, `devicePath` debe ser una ruta válida al dispositivo USB - Para Ethernet, se requiere una dirección IP válida y un puerto ```typescript // Usando enums predefinidos const printer = new Seiton({ windows: { vendorId: SEITON_VID.V1, productId: SEITON_PID.V1, }, }); // O usando valores específicos const printer = new Seiton({ windows: { vendorId: 0x6868, // Reemplaza con tu VID productId: 0x0300, // Reemplaza con tu PID }, }); ``` ### Linux En Linux, necesitas proporcionar la ruta del dispositivo: ```typescript const printer = new Seiton({ linux: { devicePath: '/dev/usb/lp0', // Ajusta según tu configuración }, }); ``` Las rutas típicas en Linux son: - `/dev/usb/lp0` (primera impresora) - `/dev/usb/lp1` (segunda impresora) > **Nota**: Solo puedes configurar un sistema operativo a la vez. La librería lanzará un error si intentas configurar ambos simultáneamente. ### Verificación de Conexión Puedes verificar si la impresora está correctamente conectada y accesible usando el método `isPrinterConnected()`: ```typescript const printer = new Seiton({ windows: { vendorId: SEITON_VID.V1, productId: SEITON_PID.V1, }, }); const isPrinterConnected = await printer.isPrinterConnected(); if (isPrinterConnected) { console.log('Impresora conectada y lista'); } else { console.log('No se pudo conectar con la impresora'); } ``` ### Manejo de Errores La librería proporciona mensajes de error detallados que te ayudarán a identificar problemas comunes: - Impresora no encontrada (VID/PID incorrectos) - Dispositivo ocupado por otro proceso - Interfaces USB no disponibles - Errores de acceso al dispositivo ## 📜 Términos y Condiciones de Uso - Esta libreria es de uso gratuito para los clientes de Seiton. - No se garantiza funcionamiento con otras impresoras. - Seiton se reserva el derecho de realizar cambios en la librería, publicando actualizaciones sin previo aviso. ## 🏢 Empresa [Seiton](https://seiton.com.ar/) - Soluciones de impresión para tu negocio. ## 📞 Soporte - Sitio Web: [https://seiton.com.ar/](https://seiton.com.ar/) - Email: [contacto@seiton.com.ar](mailto:contacto@seiton.com.ar)