@seiton/printer
Version:
Driver para las impresoras Seiton, incluye todas las funciones basicas para poder imprimir tickets
386 lines (297 loc) • 9.79 kB
Markdown
# Seiton Driver Node
[](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)