Dev.to · 6 min read

Ressuscitei uma impressora térmica de banco que não fala ESC/POS nem imprime QR Code

Ressuscitei uma impressora térmica de banco que não fala ESC/POS nem imprime QR Code

Como fazer uma impressora que "imprime tudo errado e não faz QR Code" voltar a ser útil num PDV moderno — sem trocar nada nela. O problema Tem uma pilha de impressoras térmicas Diebold Procomp IM453H (e primas: IM433, IT4x2, IM1x3I, TSP143M) encostada por aí. Foram de banco — Itaú, Bradesco, BB, Caixa — para autenticar boleto e imprimir comprovante. São robustas, têm guilhotina, mecanismo bom. E são baratas no mercado de usados. O problema aparece quando você liga uma dessas num PDV comum: sai tudo embaralhado, os acentos viram lixo, e o QR Code simplesmente não aparece. O motivo é simples: ela não fala ESC/POS. ESC/POS (Epson) virou o padrão de fato das impressoras de cupom — quase todo PDV/ERP manda ESC/POS. A IM453H usa o conjunto próprio da Diebold/Mecaf, os "Comandos Padrão". Cada byte é interpretado de outro jeito: O PDV manda (ESC/POS) A IM453H entende (Comandos Padrão) 1B 40 — reset não existe 1B 21 n — modo de impressão não existe → imprime ! + lixo 1B 61 01 — centralizar 1B 41 n = espaçamento de linha n/72" → destrói o layout 1D 28 6B — QR Code o prefixo dela é 1D 30 (GS 0) → ignora, nada sai 1D 56 — corte corte é 1B 77 (ESC w) → não corta tabela de caracteres padrão é ABICOMP, nem CP850 E o mais importante: essa família de firmware não tem comando de QR Code. Só código de barras 1D (EAN, Code128, Code39…). O manual do firmware confirma — QR nunca foi implementado nessa geração. (Existe uma variante mais nova, a IM453HU-002, que tem QR nativo. Mas a maioria das unidades que rodam por aí, principalmente as ex-banco com firmware customizado, não tem.) Por que não usar o que já existe Antes de sair codando, o que já havia: Driver GPD/Unidrv da Diebold — rasteriza páginas GDI para o formato nativo. Funciona se o app imprime via GDI. Não serve se o app manda ESC/POS cru (que é o caso da maioria dos PDVs), e não é uma ponte. SDK da Diebold (MECAFW32 / ME_LM_T230.dll) — proprietário, você tem que programar contra a API deles. ACBr / ACBrPOSPrinter — projeto brasileiro open source, excelente, tem um modelo Diebold que emite os Comandos Padrão. Mas é uma biblioteca: seu app precisa ser escrito contra a API do ACBr (ou usar o ACBrMonitor com o protocolo dele). É tradução comando-a-comando, então herda as lacunas — tem relato no próprio fórum de QR não saindo na IM453HU. Proxies de ESC/POS genéricos no GitHub — interceptam o stream para arquivar ou encaminhar como dados, ou renderizam para preview no navegador. Nenhum traduz ESC/POS para a linguagem nativa de outra impressora não-ESC/POS. Ou seja: as peças existem soltas. Ninguém tinha juntado numa ponte transparente que pega ESC/POS de qualquer app sem modificar o app, rasteriza tudo, e imprime no Diebold — com instalador de um clique e sem depender de driver nem SDK da Diebold. A ideia: rasterizar tudo A jogada central é não brigar com a linguagem nativa comando por comando. Em vez disso: Interpretar o cupom ESC/POS (texto, atributos, alinhamento, QR, código de barras, corte). Redesenhar o cupom inteiro como uma imagem de 576 px de largura (72 mm a 203 dpi) — texto numa fonte monoespaçada, QR gerado como bitmap, barras desenhadas. Codificar essa imagem no comando raster nativo da IM453H (ESC n + bytes, ESC US para o corte parcial). A impressora só precisa imprimir uma imagem — e isso ela faz muito bem. Não importa mais que ela não entenda ESC/POS, não tenha QR nativo, esteja em ABICOMP, não tenha comando de centralizar. Tudo virou pixel. O mesmo pipeline aceita PDF também (para o fluxo "gera PDF e imprime", comum em quiosque): rasteriza a página, apara as margens, escala para 72 mm. PDV / ERP / legado │ ESC/POS ────────┐ │ PDF ────────┤ ▼ ▼ ┌──────────────────────────────────────────┐ │ diebold-bridge │ │ sniff ──► %PDF ? ─► rasteriza PDF │ │ senão ─► parser ESC/POS │ │ └► layout 576px │ │ imagem 1-bit ─► raster nativo IM453H │ └──────────────────────────────────────────┘ │ ▼ fila RAW "Generic / Text Only" ─► IM453H (USB) Não precisa do driver da Diebold: o "Generic / Text Only" que já vem no Windows serve como cano RAW até a porta USB. Como o app fala com a ponte Três entradas, todas equivalentes: Impressora do Windows DIEBOLD-BRIDGE — uma fila comum; o que chega nela vai por uma porta TCP local até o serviço. Socket 127.0.0.1:9100 — ESC/POS direto (padrão JetDirect). Pasta — solta um .prn ou .pdf numa pasta vigiada. O PDV não muda nada. Ele só passa a imprimir na DIEBOLD-BRIDGE em vez da impressora antiga. Detalhes que valem a pena O GPD entregou a linguagem. O arquivo .gpd do driver (texto puro) mostra que LF, CR e FF são todos 0x00 na IM453H, o avanço é ESC > / ESC o, e tudo é bloco raster. Isso sozinho explica por que ESC/POS sai picotado. O manual do firmware estava "escondido". A referência completa dos Comandos Padrão veio de um PDF de manual de firmware que a Diebold distribuía para técnicos. O .chm do SDK não descompila no Windows 10 (hh.exe -decompile bloqueado), mas o PDF do manual tem a tabela toda — foi de lá que saiu a referência de comandos do repositório. QR como raster funciona liso. Gera o QR com uma lib (segno), desenha os módulos num bitmap, encaixa no cupom. Escaneia normalmente. O tamanho do módulo é configurável (ou respeita o que o ESC/POS pediu). Economia de papel. Rasterizar não precisa ser esbanjador: colapsando linhas em branco e apertando a entrelinha, o cupom saiu ~55% mais curto que a primeira versão, sem perder legibilidade. Fonte embutida. Para a saída ser idêntica em qualquer máquina, a fonte (DejaVu Sans Mono, licença redistribuível) vai dentro do executável — não depende de fonte do Windows. Sem dependência da Diebold. Nenhum .dll, driver ou SDK da Diebold é instalado. Só o Generic / Text Only do Windows. Instalação O executável é compilado publicamente pelo GitHub Actions (Windows). Para o usuário final: Baixa e extrai o DieboldBridge-Setup.zip da release. Liga a IM453H no USB. Duplo-clique em INSTALAR.bat → aceita o UAC. Espera "INSTALADO E RODANDO". Ele detecta a impressora pelo VID/PID, cria as duas filas, registra um serviço que sobe no boot, e diz qual impressora usar. Desinstalar é outro duplo-clique. Limitações e o que falta O .exe não é assinado — o SmartScreen avisa na primeira execução. O build público serve como conferência até ter um certificado. Falta suporte a bobina de 58 mm (hoje assume 72 mm). GS 8 L (imagens grandes) ainda não; GS v 0, GS ( L e GS * sim. Para NFC-e no caminho PDF, a conformidade do DANFE é responsabilidade de quem gera o PDF — a ponte só reproduz fielmente. Repositório https://github.com/feliperocha7/diebold-im453h-escpos — MIT. Tem impressora dessas parada? É pegar a release, instalar e mandar imprimir. Contribuição e relato de outros modelos da família são bem-vindos.

This is a summary aggregated from Dev.to. Read the complete article on the original site:

Read full article at Dev.to

More Programming & Dev News