2.0.0 • Published 8 months ago

@seiton/printer v2.0.0

Weekly downloads
-
License
MIT
Repository
-
Last release
8 months ago

Seiton Driver Node

NPM Version

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

npm install @seiton/printer

💡 Uso Básico

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

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

// 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

// 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

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

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:

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:

interface ISeitonUSBConfig {
  windows?: ISeitonWindowsConfig; // Configuración para Windows
  linux?: ISeitonLinuxConfig; // Configuración para Linux
}

ISeitonWindowsConfig

Configuración para dispositivos USB en Windows:

interface ISeitonWindowsConfig {
  vendorId: number; // ID del Vendedor USB (VID)
  productId: number; // ID del Producto USB (PID)
}

ISeitonLinuxConfig

Configuración para dispositivos USB en Linux:

interface ISeitonLinuxConfig {
  devicePath: string; // Ruta del dispositivo USB (ej: '/dev/usb/lp0')
}

ISeitonEthConfig

Configuración para conexiones Ethernet:

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
// 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:

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():

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 - Soluciones de impresión para tu negocio.

📞 Soporte

2.0.0

8 months ago

1.9.1

10 months ago

1.9.0

11 months ago

1.8.0

11 months ago

1.7.1

11 months ago

1.7.0

11 months ago

1.6.0

11 months ago

1.5.5

11 months ago

1.5.4

11 months ago

1.5.3

11 months ago

1.5.2

11 months ago

1.5.1

11 months ago

1.5.0

11 months ago

1.4.2

12 months ago

1.4.0

12 months ago

1.3.2

12 months ago

1.3.1

12 months ago

1.3.0

12 months ago

1.2.3

12 months ago

1.2.2

12 months ago

1.2.1

12 months ago

1.2.0

12 months ago

1.1.1

12 months ago

1.1.0

12 months ago

1.0.0

1 year ago