Files
printerCentral/.claude/epson-tmu220-printing-guide.md
josedario87 0e86f9d7a9
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 2m8s
feat: MCP Server para control de impresoras
- Endpoint HTTP JSON-RPC en /api/mcp
- 6 tools: list_templates, list_printers, print_template, print_raw, create_template, update_template
- Guia de formato para impresora TM-U220
- Protegido por Authentik forward auth
2025-11-25 12:41:49 -06:00

207 lines
5.5 KiB
Markdown

# Guia de Impresion para Epson TM-U220
Esta guia documenta las mejores practicas para generar impresiones legibles en impresoras Epson TM-U220 usando el sistema printerCentral.
## Especificaciones de la Impresora
| Caracteristica | Valor |
|----------------|-------|
| Columnas (Font A) | 40-42 caracteres |
| Columnas (Font B) | 33-35 caracteres |
| Columnas con doble ancho | ~20 caracteres |
| Caracteres por pulgada | 17.8/16 cpi |
| Ancho de papel | 57.5mm, 69.5mm, o 76mm |
## Reglas Fundamentales
### 1. Limite de Caracteres por Linea
```
Texto normal: max 40 caracteres
Texto doble ancho: max 20 caracteres
Texto doble alto: max 40 caracteres
Texto doble ambos: max 20 caracteres
```
### 2. Caracteres Soportados
**USAR** - Caracteres ASCII basicos:
```
= - _ * + | / \ ( ) [ ] < >
A-Z a-z 0-9
```
**EVITAR** - Caracteres Unicode extendidos:
```
Box drawing: ╔ ═ ╗ ║ ╚ ╝ ┌ ┐ └ ┘
Simbolos especiales: → ← ↑ ↓ ★ ● ○
Emojis: cualquiera
```
### 3. Espaciado con Feed
Siempre usar `feed` para crear espacio visual. La impresora NO interpreta lineas vacias automaticamente.
```json
{ "op": "feed", "lines": 1 } // Espacio simple
{ "op": "feed", "lines": 2 } // Espacio entre secciones
{ "op": "feed", "lines": 4 } // Espacio antes del corte
```
## Estructura Recomendada de un Ticket
### Header (Centrado, Destacado)
```json
{ "op": "align", "align": "center" },
{ "op": "style", "bold": true, "width": 2, "height": 2 },
{ "op": "text", "value": "TITULO" },
{ "op": "style", "bold": false, "width": 1, "height": 1 },
{ "op": "feed", "lines": 2 }
```
### Separadores
Siempre con feed antes y despues para que queden en su propia linea:
```json
{ "op": "text", "value": "================================" },
{ "op": "feed", "lines": 1 }
```
Para 40 columnas usar 32 caracteres `=` (deja margen visual).
### Titulos de Seccion
Usar bold + underline, seguido de feed:
```json
{ "op": "style", "bold": true, "underline": true },
{ "op": "text", "value": "NOMBRE SECCION" },
{ "op": "style", "bold": false, "underline": false },
{ "op": "feed", "lines": 1 }
```
### Items de Lista
Cada item con su propio feed para legibilidad:
```json
{ "op": "text", "value": "[ ] Item uno" },
{ "op": "feed", "lines": 1 },
{ "op": "text", "value": "[ ] Item dos" },
{ "op": "feed", "lines": 1 }
```
### Footer y Corte
```json
{ "op": "align", "align": "center" },
{ "op": "text", "value": "Texto de pie" },
{ "op": "feed", "lines": 4 },
{ "op": "cut" }
```
## Ejemplo Completo: Lista de Compras
```json
{
"operations": [
{ "op": "align", "align": "center" },
{ "op": "style", "bold": true, "width": 2, "height": 2 },
{ "op": "text", "value": "MI TITULO" },
{ "op": "style", "bold": false, "width": 1, "height": 1 },
{ "op": "feed", "lines": 2 },
{ "op": "text", "value": "================================" },
{ "op": "feed", "lines": 1 },
{ "op": "style", "bold": true },
{ "op": "text", "value": "SUBTITULO" },
{ "op": "feed", "lines": 1 },
{ "op": "style", "bold": false },
{ "op": "text", "value": "================================" },
{ "op": "feed", "lines": 2 },
{ "op": "align", "align": "left" },
{ "op": "style", "bold": true, "underline": true },
{ "op": "text", "value": "SECCION 1" },
{ "op": "style", "bold": false, "underline": false },
{ "op": "feed", "lines": 1 },
{ "op": "text", "value": "[ ] Item A" },
{ "op": "feed", "lines": 1 },
{ "op": "text", "value": "[ ] Item B" },
{ "op": "feed", "lines": 2 },
{ "op": "align", "align": "center" },
{ "op": "text", "value": "================================" },
{ "op": "feed", "lines": 1 },
{ "op": "text", "value": "Pie de pagina" },
{ "op": "feed", "lines": 4 },
{ "op": "cut" }
]
}
```
## Operaciones Disponibles
| Operacion | Parametros | Ejemplo |
|-----------|------------|---------|
| `text` | `value` | `{ "op": "text", "value": "Hola" }` |
| `feed` | `lines` | `{ "op": "feed", "lines": 2 }` |
| `cut` | - | `{ "op": "cut" }` |
| `align` | `align`: left, center, right | `{ "op": "align", "align": "center" }` |
| `style` | `bold`, `underline`, `width`, `height` | `{ "op": "style", "bold": true }` |
## Endpoints de Impresion
### Imprimir Template Guardado
```
POST /api/print/template
{
"templateId": "template_xxx",
"variables": { "nombre": "Juan" },
"printerId": "printer_xxx", // opcional
"dryRun": false // true para preview
}
```
### Imprimir Operaciones Directas
```
POST /api/print/raw
{
"operations": [...],
"variables": { "var1": "valor1" },
"printerId": "printer_xxx", // opcional
"dryRun": false
}
```
## Variables en Templates
Sintaxis: `{{nombre}}` o `{{nombre:label:default}}`
```json
{ "op": "text", "value": "Cliente: {{cliente}}" },
{ "op": "text", "value": "Fecha: {{fecha:Fecha:2025-01-01}}" }
```
## Errores Comunes
1. **Texto cortado o ilegible**: Excediste 40 caracteres por linea
2. **Todo pegado**: Falta usar `feed` entre elementos
3. **Caracteres raros**: Usaste Unicode no soportado
4. **Separadores mezclados**: Falta `feed` antes/despues de lineas `===`
5. **Header muy largo**: Con doble ancho solo caben ~20 chars
## Checklist Pre-Impresion
- [ ] Ninguna linea excede 40 caracteres (20 si doble ancho)
- [ ] Solo caracteres ASCII basicos
- [ ] `feed` entre cada item para legibilidad
- [ ] `feed` antes y despues de separadores `===`
- [ ] `feed: 4` antes del `cut` final
- [ ] Header centrado con estilo destacado
- [ ] Secciones con titulos bold+underline