svr-imp/API_CONTRACTS.md

110 lines
2.6 KiB
Markdown

# Documentação da API de Impressão
Esta API permite listar impressoras disponíveis no servidor (Windows) e enviar comandos de impressão de texto simples ou layouts HTML (etiquetas).
URL Base: `http://localhost:3000`
Swagger UI: `http://localhost:3000/api`
## Endpoints
### 1. Listar Impressoras
Retorna a lista de impressoras instaladas no servidor onde a API está rodando.
- **Método:** `GET`
- **Rota:** `/printer/list`
- **Exemplo de Resposta:**
```json
[
{
"name": "POS-80",
"portName": "USB001",
"driverName": "Generic / Text Only",
"printerStatus": 0,
"deviceId": "POS-80"
},
{
"name": "Microsoft Print to PDF",
"portName": "PORTPROMPT:",
"driverName": "Microsoft Print To PDF",
"printerStatus": 0
}
]
```
---
### 2. Imprimir HTML (Etiquetas/Layouts)
Converte um código HTML (com suporte a Tailwind CSS) para PDF e imprime na impressora selecionada. Ideal para etiquetas.
- **Método:** `POST`
- **Rota:** `/printer/print-html`
- **Corpo da Requisição (JSON):**
```json
{
"html": "<div class='text-xl font-bold'>Minha Etiqueta</div>...",
"printerName": "POS-80", // Nome exato da impressora (conforme retornado na listagem)
"width": "60mm", // Opcional. Largura do papel/etiqueta. Default: 80mm
"height": "40mm" // Opcional. Altura da etiqueta. Default: auto
}
```
- **Detalhes:**
- O backend injeta automaticamente o script do Tailwind CSS.
- O HTML é renderizado via Puppeteer (Chrome headless).
---
### 3. Imprimir Texto Simples (ESC/POS)
Envia comandos de texto diretamente para a impressora. Ideal para cupons simples e rápidos, sem formatação complexa.
- **Método:** `POST`
- **Rota:** `/printer/print`
- **Corpo da Requisição (JSON):**
```json
{
"lines": [
"--------------------------------",
" CUPOM FISCAL ",
"--------------------------------",
"Item 1 ................. R$ 10,00"
],
"alignment": "center", // "left", "center", "right". Default: left
"upsideDown": false, // Se true, imprime de cabeça para baixo
"printerInterface": "POS-80" // Pode ser nome da impressora (USB) ou "tcp://192.168.1.100" (Rede)
}
```
## Tipos (TypeScript Interfaces)
Se estiver usando TypeScript no Frontend, utilize estas interfaces:
```typescript
export interface Printer {
name: string;
portName?: string;
driverName?: string;
printerStatus?: number;
deviceId?: string;
}
export interface PrintHtmlPayload {
html: string;
printerName: string;
width?: string;
height?: string;
}
export interface PrintTextPayload {
lines: string[];
alignment?: 'left' | 'center' | 'right';
upsideDown?: boolean;
printerInterface?: string;
}
```