2.0.0 • Published 5 months ago

@seiton/printer v2.0.0

Weekly downloads
-
License
MIT
Repository
-
Last release
5 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

5 months ago

1.9.1

7 months ago

1.9.0

8 months ago

1.8.0

8 months ago

1.7.1

9 months ago

1.7.0

9 months ago

1.6.0

9 months ago

1.5.5

9 months ago

1.5.4

9 months ago

1.5.3

9 months ago

1.5.2

9 months ago

1.5.1

9 months ago

1.5.0

9 months ago

1.4.2

9 months ago

1.4.0

9 months ago

1.3.2

9 months ago

1.3.1

9 months ago

1.3.0

9 months ago

1.2.3

9 months ago

1.2.2

9 months ago

1.2.1

9 months ago

1.2.0

9 months ago

1.1.1

9 months ago

1.1.0

9 months ago

1.0.0

10 months ago