svr-imp/API_CONTRACTS.md

3.4 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",
    "DriverName": "Generic / Text Only",
    "PrinterStatus": 0
  },
  {
    "Name": "Microsoft Print to PDF",
    "DriverName": "Microsoft Print To PDF",
    "PrinterStatus": 0
  }
]

Nota: atualmente esse endpoint repassa o resultado do PowerShell Get-Printer (Windows) com chaves em PascalCase.


2. Imprimir HTML (Etiquetas/Layouts)

Converte um código HTML (com suporte a Tailwind CSS) para PDF e imprime na impressora selecionada via Fila de Processamento (BullMQ).

  • Método: POST
  • Rota: /printer/print-html ou /printer/:printerName/print-html
  • Corpo da Requisição (JSON):
{
  "html": "<div class='text-xl font-bold'>Minha Etiqueta</div>...",
  "printerName": "POS-80", // Opcional se passado na URL
  "width": "60mm", // Opcional. Largura do papel/etiqueta. Default: 80mm
  "height": "40mm", // Opcional. Altura da etiqueta. Default: auto
  "jobId": "meu-id-unico-123" // Opcional. ID para idempotência na fila.
}
  • Exemplo de Resposta:
{
  "success": true,
  "message": "Tarefa enviada para a fila de impressão",
  "jobId": "123"
}
  • Detalhes:
    • O backend injeta automaticamente o script do Tailwind CSS.
    • O HTML é renderizado via Puppeteer (Chrome headless).
    • Tarefas são processadas de forma assíncrona via Redis/BullMQ.

3. Imprimir Texto Simples (ESC/POS)

Envia comandos de texto diretamente para a impressora. Ideal para cupons simples e rápidos.

  • Método: POST
  • Rota: /printer/print ou /printer/:printerName/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" // Opcional se passado na URL. Suporta "tcp://192.168.1.100" ou nome da impressora.
}
  • Exemplo de Resposta:
{
  "success": true,
  "message": "Print successful!"
}

Tipos (TypeScript Interfaces)

Se estiver usando TypeScript no Frontend, utilize estas interfaces:

export interface Printer {
  Name: string;
  DriverName?: string;
  PrinterStatus?: number;
}

export interface PrintHtmlPayload {
  html: string;
  printerName?: string;
  width?: string;
  height?: string;
  jobId?: string;
}

export interface PrintTextPayload {
  lines: string[];
  alignment?: 'left' | 'center' | 'right';
  upsideDown?: boolean;
  printerInterface?: string;
}

export interface PrintHtmlResponse {
  success: boolean;
  message: string;
  jobId?: string;
}

export interface PrintTextResponse {
  success: boolean;
  message: string;
}

Swagger

A documentação interativa completa (OpenAPI) está disponível em /api. Lá você pode testar todos os endpoints e ver os esquemas detalhados de cada DTO.