# 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", "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):** ```json { "html": "
Minha Etiqueta
...", "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:** ```json { "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):** ```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:** ```json { "success": true, "message": "Print successful!" } ``` ## Tipos (TypeScript Interfaces) Se estiver usando TypeScript no Frontend, utilize estas interfaces: ```typescript 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.