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
Dieboldque 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 <marg> <larg> <n1> <n2>+ bytes,ESC USpara 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
.prnou.pdfnuma 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.zipda 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
.exenã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 ( LeGS *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.
Top comments (0)