svr-imp/API_CONTRACTS.md

2.6 KiB

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:
[
  {
    "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):
{
  "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):
{
  "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:

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;
}