144 lines
3.4 KiB
Markdown
144 lines
3.4 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",
|
|
"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": "<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:**
|
|
|
|
```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.
|