<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Felipe Rocha Barros</title>
    <description>The latest articles on DEV Community by Felipe Rocha Barros (@feliperocha7).</description>
    <link>https://dev.to/feliperocha7</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4108690%2F88c1fd8c-5a8a-485f-9c2a-4e91f56f8710.png</url>
      <title>DEV Community: Felipe Rocha Barros</title>
      <link>https://dev.to/feliperocha7</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/feliperocha7"/>
    <language>en</language>
    <item>
      <title>Ressuscitei uma impressora térmica de banco que não fala ESC/POS nem imprime QR Code</title>
      <dc:creator>Felipe Rocha Barros</dc:creator>
      <pubDate>Thu, 03 Sep 2026 20:44:30 +0000</pubDate>
      <link>https://dev.to/feliperocha7/ressuscitei-uma-impressora-termica-de-banco-que-nao-fala-escpos-nem-imprime-qr-code-jb0</link>
      <guid>https://dev.to/feliperocha7/ressuscitei-uma-impressora-termica-de-banco-que-nao-fala-escpos-nem-imprime-qr-code-jb0</guid>
      <description>&lt;p&gt;&lt;em&gt;Como fazer uma impressora que "imprime tudo errado e não faz QR Code" voltar a&lt;br&gt;
ser útil num PDV moderno — sem trocar nada nela.&lt;/em&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  O problema
&lt;/h2&gt;

&lt;p&gt;Tem uma pilha de impressoras térmicas &lt;strong&gt;Diebold Procomp IM453H&lt;/strong&gt; (e primas:&lt;br&gt;
IM433, IT4x2, IM1x3I, TSP143M) encostada por aí. Foram de banco — Itaú,&lt;br&gt;
Bradesco, BB, Caixa — para autenticar boleto e imprimir comprovante. São&lt;br&gt;
robustas, têm guilhotina, mecanismo bom. E são baratas no mercado de usados.&lt;/p&gt;

&lt;p&gt;O problema aparece quando você liga uma dessas num PDV comum: &lt;strong&gt;sai tudo&lt;br&gt;
embaralhado, os acentos viram lixo, e o QR Code simplesmente não aparece.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;O motivo é simples: &lt;strong&gt;ela não fala ESC/POS.&lt;/strong&gt; ESC/POS (Epson) virou o padrão de&lt;br&gt;
fato das impressoras de cupom — quase todo PDV/ERP manda ESC/POS. A IM453H usa o&lt;br&gt;
conjunto próprio da Diebold/Mecaf, os "Comandos Padrão". Cada byte é&lt;br&gt;
interpretado de outro jeito:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;O PDV manda (ESC/POS)&lt;/th&gt;
&lt;th&gt;A IM453H entende (Comandos Padrão)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;1B 40&lt;/code&gt; — reset&lt;/td&gt;
&lt;td&gt;não existe&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;1B 21 n&lt;/code&gt; — modo de impressão&lt;/td&gt;
&lt;td&gt;não existe → imprime &lt;code&gt;!&lt;/code&gt; + lixo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;1B 61 01&lt;/code&gt; — centralizar&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;1B 41 n&lt;/code&gt; = espaçamento de linha n/72" → &lt;strong&gt;destrói o layout&lt;/strong&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;1D 28 6B&lt;/code&gt; — &lt;strong&gt;QR Code&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;o prefixo dela é &lt;code&gt;1D 30&lt;/code&gt; (&lt;code&gt;GS 0&lt;/code&gt;) → &lt;strong&gt;ignora, nada sai&lt;/strong&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;1D 56&lt;/code&gt; — corte&lt;/td&gt;
&lt;td&gt;corte é &lt;code&gt;1B 77&lt;/code&gt; (&lt;code&gt;ESC w&lt;/code&gt;) → &lt;strong&gt;não corta&lt;/strong&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;tabela de caracteres&lt;/td&gt;
&lt;td&gt;padrão é &lt;strong&gt;ABICOMP&lt;/strong&gt;, nem CP850&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;E o mais importante: &lt;strong&gt;essa família de firmware não tem comando de QR Code.&lt;/strong&gt;&lt;br&gt;
Só código de barras 1D (EAN, Code128, Code39…). O manual do firmware confirma —&lt;br&gt;
QR nunca foi implementado nessa geração. (Existe uma variante mais nova, a&lt;br&gt;
&lt;code&gt;IM453HU-002&lt;/code&gt;, que tem QR nativo. Mas a maioria das unidades que rodam por aí,&lt;br&gt;
principalmente as ex-banco com firmware customizado, não tem.)&lt;/p&gt;


&lt;h2&gt;
  
  
  Por que não usar o que já existe
&lt;/h2&gt;

&lt;p&gt;Antes de sair codando, o que já havia:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Driver GPD/Unidrv da Diebold&lt;/strong&gt; — 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.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SDK da Diebold&lt;/strong&gt; (&lt;code&gt;MECAFW32&lt;/code&gt; / &lt;code&gt;ME_LM_T230.dll&lt;/code&gt;) — proprietário, você tem
que programar contra a API deles.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ACBr / ACBrPOSPrinter&lt;/strong&gt; — projeto brasileiro open source, excelente, tem um
modelo &lt;code&gt;Diebold&lt;/code&gt; que emite os Comandos Padrão. Mas é uma &lt;strong&gt;biblioteca&lt;/strong&gt;: 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.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Proxies de ESC/POS genéricos no GitHub&lt;/strong&gt; — interceptam o stream para
&lt;em&gt;arquivar&lt;/em&gt; ou &lt;em&gt;encaminhar como dados&lt;/em&gt;, ou renderizam para &lt;em&gt;preview no
navegador&lt;/em&gt;. Nenhum traduz ESC/POS para a linguagem nativa de &lt;strong&gt;outra&lt;/strong&gt;
impressora não-ESC/POS.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ou seja: as peças existem soltas. Ninguém tinha juntado numa &lt;strong&gt;ponte&lt;br&gt;
transparente que pega ESC/POS de qualquer app sem modificar o app, rasteriza&lt;br&gt;
tudo, e imprime no Diebold&lt;/strong&gt; — com instalador de um clique e sem depender de&lt;br&gt;
driver nem SDK da Diebold.&lt;/p&gt;


&lt;h2&gt;
  
  
  A ideia: rasterizar tudo
&lt;/h2&gt;

&lt;p&gt;A jogada central é não brigar com a linguagem nativa comando por comando.&lt;br&gt;
Em vez disso:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Interpretar&lt;/strong&gt; o cupom ESC/POS (texto, atributos, alinhamento, QR, código
de barras, corte).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Redesenhar o cupom inteiro como uma imagem&lt;/strong&gt; de 576 px de largura (72 mm a
203 dpi) — texto numa fonte monoespaçada, QR gerado como bitmap, barras
desenhadas.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Codificar essa imagem&lt;/strong&gt; no comando raster nativo da IM453H
(&lt;code&gt;ESC n &amp;lt;marg&amp;gt; &amp;lt;larg&amp;gt; &amp;lt;n1&amp;gt; &amp;lt;n2&amp;gt;&lt;/code&gt; + bytes, &lt;code&gt;ESC US&lt;/code&gt; para o corte parcial).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A impressora só precisa imprimir &lt;strong&gt;uma imagem&lt;/strong&gt; — e isso ela faz muito bem. Não&lt;br&gt;
importa mais que ela não entenda ESC/POS, não tenha QR nativo, esteja em&lt;br&gt;
ABICOMP, não tenha comando de centralizar. Tudo virou pixel.&lt;/p&gt;

&lt;p&gt;O mesmo pipeline aceita &lt;strong&gt;PDF&lt;/strong&gt; também (para o fluxo "gera PDF e imprime",&lt;br&gt;
comum em quiosque): rasteriza a página, apara as margens, escala para 72 mm.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  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)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Não precisa do driver da Diebold: o &lt;strong&gt;"Generic / Text Only"&lt;/strong&gt; que já vem no&lt;br&gt;
Windows serve como cano RAW até a porta USB.&lt;/p&gt;

&lt;h3&gt;
  
  
  Como o app fala com a ponte
&lt;/h3&gt;

&lt;p&gt;Três entradas, todas equivalentes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Impressora do Windows &lt;code&gt;DIEBOLD-BRIDGE&lt;/code&gt;&lt;/strong&gt; — uma fila comum; o que chega nela
vai por uma porta TCP local até o serviço.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Socket &lt;code&gt;127.0.0.1:9100&lt;/code&gt;&lt;/strong&gt; — ESC/POS direto (padrão JetDirect).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pasta&lt;/strong&gt; — solta um &lt;code&gt;.prn&lt;/code&gt; ou &lt;code&gt;.pdf&lt;/code&gt; numa pasta vigiada.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;O PDV não muda nada. Ele só passa a imprimir na &lt;code&gt;DIEBOLD-BRIDGE&lt;/code&gt; em vez da&lt;br&gt;
impressora antiga.&lt;/p&gt;




&lt;h2&gt;
  
  
  Detalhes que valem a pena
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;O GPD entregou a linguagem.&lt;/strong&gt; O arquivo &lt;code&gt;.gpd&lt;/code&gt; do driver (texto puro) mostra&lt;br&gt;
que &lt;code&gt;LF&lt;/code&gt;, &lt;code&gt;CR&lt;/code&gt; e &lt;code&gt;FF&lt;/code&gt; são todos &lt;code&gt;0x00&lt;/code&gt; na IM453H, o avanço é &lt;code&gt;ESC &amp;gt;&lt;/code&gt; / &lt;code&gt;ESC o&lt;/code&gt;,&lt;br&gt;
e tudo é bloco raster. Isso sozinho explica por que ESC/POS sai picotado.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;O manual do firmware estava "escondido".&lt;/strong&gt; A referência completa dos Comandos&lt;br&gt;
Padrão veio de um PDF de manual de firmware que a Diebold distribuía para&lt;br&gt;
técnicos. O &lt;code&gt;.chm&lt;/code&gt; do SDK não descompila no Windows 10 (&lt;code&gt;hh.exe -decompile&lt;/code&gt;&lt;br&gt;
bloqueado), mas o PDF do manual tem a tabela toda — foi de lá que saiu a&lt;br&gt;
&lt;a href="//im453h-comandos.md"&gt;referência de comandos&lt;/a&gt; do repositório.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;QR como raster funciona liso.&lt;/strong&gt; Gera o QR com uma lib (&lt;code&gt;segno&lt;/code&gt;), desenha os&lt;br&gt;
módulos num bitmap, encaixa no cupom. Escaneia normalmente. O tamanho do módulo&lt;br&gt;
é configurável (ou respeita o que o ESC/POS pediu).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Economia de papel.&lt;/strong&gt; Rasterizar não precisa ser esbanjador: colapsando linhas&lt;br&gt;
em branco e apertando a entrelinha, o cupom saiu ~55% mais curto que a primeira&lt;br&gt;
versão, sem perder legibilidade.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fonte embutida.&lt;/strong&gt; Para a saída ser idêntica em qualquer máquina, a fonte&lt;br&gt;
(DejaVu Sans Mono, licença redistribuível) vai dentro do executável — não&lt;br&gt;
depende de fonte do Windows.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sem dependência da Diebold.&lt;/strong&gt; Nenhum &lt;code&gt;.dll&lt;/code&gt;, driver ou SDK da Diebold é&lt;br&gt;
instalado. Só o &lt;code&gt;Generic / Text Only&lt;/code&gt; do Windows.&lt;/p&gt;




&lt;h2&gt;
  
  
  Instalação
&lt;/h2&gt;

&lt;p&gt;O executável é compilado publicamente pelo GitHub Actions (Windows). Para o&lt;br&gt;
usuário final:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Baixa e extrai o &lt;code&gt;DieboldBridge-Setup.zip&lt;/code&gt; da &lt;em&gt;release&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;Liga a IM453H no USB.&lt;/li&gt;
&lt;li&gt;Duplo-clique em &lt;code&gt;INSTALAR.bat&lt;/code&gt; → aceita o UAC.&lt;/li&gt;
&lt;li&gt;Espera "INSTALADO E RODANDO".&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Ele detecta a impressora pelo VID/PID, cria as duas filas, registra um serviço&lt;br&gt;
que sobe no boot, e diz qual impressora usar. Desinstalar é outro duplo-clique.&lt;/p&gt;




&lt;h2&gt;
  
  
  Limitações e o que falta
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;O &lt;code&gt;.exe&lt;/code&gt; não é assinado — o SmartScreen avisa na primeira execução. O build
público serve como conferência até ter um certificado.&lt;/li&gt;
&lt;li&gt;Falta suporte a bobina de 58 mm (hoje assume 72 mm).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;GS 8 L&lt;/code&gt; (imagens grandes) ainda não; &lt;code&gt;GS v 0&lt;/code&gt;, &lt;code&gt;GS ( L&lt;/code&gt; e &lt;code&gt;GS *&lt;/code&gt; sim.&lt;/li&gt;
&lt;li&gt;Para NFC-e no caminho PDF, a conformidade do DANFE é responsabilidade de quem
gera o PDF — a ponte só reproduz fielmente.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Repositório
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/feliperocha7/diebold-im453h-escpos" rel="noopener noreferrer"&gt;https://github.com/feliperocha7/diebold-im453h-escpos&lt;/a&gt;&lt;/strong&gt; — MIT.&lt;/p&gt;

&lt;p&gt;Tem impressora dessas parada? É pegar a &lt;em&gt;release&lt;/em&gt;, instalar e mandar imprimir.&lt;br&gt;
Contribuição e relato de outros modelos da família são bem-vindos.&lt;/p&gt;

</description>
      <category>hardware</category>
      <category>programming</category>
      <category>software</category>
    </item>
  </channel>
</rss>
