Virtual ZPL Printer: a Alternativa Grátis à Extensão Chrome
Feito com Master Rules Claude v9.0
Leitura: ~11 min
TL;DR
A extensão ZPL Printer do Chrome saiu do ar; o Virtual ZPL Printer (grátis, open source, versão 3.5.1) assume a mesma função na porta TCP 9100, sem depender do navegador.
Instalar e configurar a impressora virtual TCP/IP no Windows leva menos de 10 minutos, incluindo o driver Genérico/Somente Texto exigido pela Zebra.
Além de renderizar etiquetas via API do Labelary, o app aplica filtros regex no ZPL antes do envio — útil para testar integrações com o Dynamics 365 sem hardware físico.
Nota Técnica:
O Virtual ZPL Printer tem fins exclusivamente educacionais e de teste. Ele depende da API pública do Labelary para renderizar as etiquetas — nunca envie dados sensíveis ou de produção sem anonimizar antes. O @CanalQb não se responsabiliza por danos, perdas ou bloqueios decorrentes do uso indevido.
A extensão sumiu do Chrome, mas o protocolo por trás dela nunca dependeu do navegador.
Foi o que apontou o post de Sagar Suman, Arquiteto de Produto em Armazenagem e Logística, ao avisar que a antiga extensão ZPL Printer — usada havia anos por quem precisa testar etiquetas Zebra sem impressora física na mesa — parou de funcionar. A solução que ele indicou como substituta é um aplicativo nativo do Windows, não uma extensão.
Neste post você vai instalar essa ferramenta do zero, configurar a impressora virtual corretamente no Windows (incluindo o driver que a maioria erra) e, no final, vai ver como usar um recurso que a maioria dos tutoriais sobre o assunto nem menciona: filtrar o ZPL em tempo real para testar cenários reais de integração com sistemas como o Dynamics 365, sem precisar de nenhum hardware Zebra por perto.
Por que a extensão ZPL Printer do Chrome parou de funcionar?
A extensão dependia da API de extensões do Chrome para interceptar comandos de impressão e simular uma impressora Zebra — um mecanismo frágil, preso ao ciclo de vida do navegador e sujeito a descontinuações da Google sem aviso prévio direcionado aos usuários finais.
Esse tipo de fragilidade não é exclusividade dessa extensão específica. Qualquer ferramenta de teste que depende de APIs internas de um navegador está sujeita a quebrar assim que o fornecedor decide mudar a plataforma — foi exatamente isso que aconteceu aqui, e é por isso que a recomendação de Sagar Suman migra para fora do navegador por completo. Um aplicativo desktop nativo, escrevendo direto em um socket TCP do sistema operacional, não depende de nenhuma API de extensão que possa ser aposentada em uma atualização do Chrome.
Aqui no @CanalQb já sentimos esse mesmo problema em outro contexto: no nosso editor de etiquetas ZPL web, o servidor local que enviamos junto (print-server.js) escuta diretamente em 127.0.0.1 na porta TCP 9100 — o mesmo princípio de design do Virtual ZPL Printer, e pela mesma razão: um servidor TCP simples não quebra quando um navegador muda de versão.
O que é o Virtual ZPL Printer e como ele emula uma impressora Zebra real?
É um aplicativo Windows (.NET, WPF) que abre um servidor TCP na porta configurada, recebe qualquer ZPL enviado por qualquer programa que "imprima" nele, envia esse ZPL para a API do Labelary renderizar como imagem e exibe o resultado numa janela — sem nenhuma impressora Zebra física conectada.
Por baixo do capô, o app roda como um Generic Host da Microsoft com serviços hospedados em segundo plano: um TcpListenerService fica ouvindo conexões na porta configurada (9100 por padrão, o mesmo valor histórico usado por impressoras Zebra de rede), e cada conexão recebida passa por uma cadeia de handlers no padrão Chain of Responsibility — um deles reconhece payload ZPL e é responsável pela maior parte do tráfego, outro responde a comandos de status de host que a impressora real também responderia, e um terceiro serve de fallback para qualquer coisa que não se encaixe nos dois anteriores.
Quando o handler de ZPL identifica um payload válido, ele chama o serviço de integração com o Labelary — que aceita POST ou GET configurável nas configurações globais — e recebe de volta os bytes da imagem PNG renderizada. Essa imagem é salva em cache local e publicada via evento interno, o que atualiza a grade de preview na interface e, opcionalmente, dispara o envio automático para uma impressora física real, caso você tenha configurado uma ponte de impressão física nas configurações do perfil.
Resultado prático disso: qualquer software Windows que consiga "imprimir" — Bloco de Notas, ERP, sistema de logística, o que for — passa a gerar previews reais de etiqueta Zebra sem hardware nenhum na mesa.
Como instalar o Virtual ZPL Printer passo a passo no Windows?
Baixe o instalador oficial (Setup.exe + MSI) na página de releases do GitHub, execute como administrador para que o .NET Desktop Runtime seja instalado automaticamente, e abra o app pela primeira vez para que ele semeie o banco de dados local com cinco perfis de impressora padrão prontos para uso.
Passo 1 — Baixe o instalador correto na página de releases
Acesse a página de releases do repositório no GitHub e baixe os dois arquivos da versão mais recente (3.5.1): o Setup.exe e o pacote .msi. O Setup.exe é um bootstrapper — ele verifica se o .NET 10.0 já está instalado no seu Windows antes de instalar o aplicativo principal.
Esse passo importa porque baixar só o .msi funciona apenas se você já tiver o .NET 10.0 Desktop Runtime instalado manualmente; sem ele, o instalador do MSI conclui "com sucesso" mas o atalho criado não abre nada ao ser clicado, o que confunde bastante quem está testando pela primeira vez.
Resultado esperado: dois arquivos na sua pasta de Downloads, ambos assinados pelo mesmo release v3.5.1.
Passo 2 — Execute o Setup.exe como administrador
Clique com o botão direito em Setup.exe e escolha "Executar como administrador". Esse bootstrapper detecta se o .NET 10.0 Desktop Runtime está ausente e o baixa/instala automaticamente antes de continuar com o instalador MSI do Virtual ZPL Printer.
Rodar como administrador é necessário aqui porque a instalação de um runtime do .NET no sistema exige permissão elevada — sem isso, o processo trava silenciosamente no meio, ainda mostrando a barra de progresso, e o usuário acha que está travado quando na verdade está apenas esperando uma permissão que nunca vai chegar.
Erro comum: o Windows SmartScreen costuma bloquear o instalador por "editor desconhecido", já que é um projeto open source sem certificado de assinatura de código pago. Clique em "Mais informações" e depois em "Executar assim mesmo" para prosseguir.
Passo 3 — Abra o app pela primeira vez e entenda os 5 perfis padrão
Abra o Virtual ZPL Printer recém-instalado. Na primeira execução, ele cria um banco SQLite local (db.sqlite) na pasta da aplicação e semeia automaticamente cinco perfis de impressora de exemplo, já prontos com dimensões, IP e configurações padrão.
Entender isso evita confusão: você vai ver cinco "impressoras" já cadastradas mesmo sem ter configurado nada — isso é esperado, não é um bug, e serve como ponto de partida para você editar um deles com seus próprios parâmetros em vez de criar um do zero.
Erro comum: em versões anteriores à 3.5.1 havia um bug real ("object reference not set") ao tentar salvar alterações de configuração — se você baixou um instalador antigo de outra fonte e esse erro aparecer, a correção é simplesmente atualizar para a 3.5.1, que resolveu exatamente esse problema.
Como configurar a impressora virtual TCP/IP 127.0.0.1:9100 no Windows?
No Painel de Controle, adicione uma impressora local com porta TCP/IP padrão apontando para 127.0.0.1 na porta 9100, e selecione manualmente o driver Genérico / Somente Texto — esse driver é obrigatório porque ZPL é um protocolo de comandos em texto puro que não pode passar por nenhuma tradução de driver gráfico.
Passo 4 — Abra o assistente de nova impressora
Vá em Painel de Controle → Dispositivos e Impressoras → Adicionar uma impressora. Quando o Windows terminar de procurar (e não encontrar nada, porque ainda não existe nada escutando), clique em "A impressora que eu quero não está na lista".
Esse passo existe porque o Windows tenta primeiro detectar impressoras via Plug and Play ou rede local automaticamente — como o Virtual ZPL Printer não se anuncia dessa forma, essa etapa manual é obrigatória, não opcional.
Passo 5 e 6 — Crie a porta TCP/IP em 127.0.0.1:9100
Escolha "Adicionar uma impressora local com configurações manuais" → "Criar uma nova porta" → tipo "Standard TCP/IP Port". No campo de endereço IP, digite 127.0.0.1. Quando o assistente pedir a porta, desmarque a detecção automática de dispositivo e informe manualmente 9100 — é o mesmo número de porta usado historicamente por impressoras Zebra de rede real.
Isso é necessário porque, sem o app do Virtual ZPL Printer com o listener ativo, não há nada respondendo naquele endereço, e o assistente do Windows vai tentar (e falhar) detectar automaticamente o tipo de dispositivo — travando a tela em "Detectando o tipo de dispositivo de porta" por bastante tempo se você deixar no automático.
Erro comum: a porta 9100 já em uso por outro processo (um segundo software de etiquetas rodando, por exemplo) faz o teste falhar por timeout. Confirme com netstat -ano | findstr :9100 no Prompt de Comando antes de seguir.
Passo 7 — Selecione o driver Genérico / Somente Texto
Na lista de fabricantes, role até "Generic" e escolha o driver "Generic / Text Only" (Genérico / Somente Texto). Não instale nenhum driver real de fabricante Zebra aqui.
Esse é o passo que a maioria erra: um driver gráfico "traduziria" o ZPL antes de enviá-lo, inserindo formatação ou quebras que corrompem os comandos. O driver Genérico/Somente Texto simplesmente empurra os bytes crus como estão — que é exatamente o que o TCP listener do Virtual ZPL Printer espera receber do outro lado.
Resultado esperado: ao finalizar, a nova impressora aparece na lista de "Dispositivos e Impressoras" com o ícone padrão de impressora genérica, sem alertas de driver pendente.
Passo 8 — Nomeie a impressora e finalize
Dê um nome descritivo, como "Virtual ZPL 9100", desmarque o compartilhamento (não é necessário para uso local) e conclua o assistente sem imprimir a página de teste padrão do Windows — ela não é ZPL válido e só vai gerar erro no app.
Nomear de forma clara importa quando você tiver mais de um perfil de teste depois (Passo 12 aborda isso) — sem um nome identificável, fica fácil confundir qual porta/perfil está associada a qual impressora virtual do Windows.
Como enviar um ZPL de teste e ver a etiqueta renderizada?
Inicie o listener TCP dentro do próprio Virtual ZPL Printer, cole um ZPL de exemplo no Bloco de Notas e mande imprimir na impressora virtual recém-criada — em poucos segundos a etiqueta renderizada aparece na grade de preview do aplicativo.
Passo 9 — Inicie o listener dentro do app
Abra o Virtual ZPL Printer e clique no botão de iniciar (Start) associado ao perfil de impressora que você configurou na porta 9100. Esse clique dispara internamente um evento que liga o TcpListenerService naquela porta específica.
Esse passo é o que mais gente esquece: sem clicar em Start, a porta 9100 simplesmente não aceita nenhuma conexão, mesmo com a impressora já cadastrada corretamente no Windows — o app tem que estar ativamente escutando, não basta estar aberto.
Resultado esperado: o status do perfil muda para "em execução" (running) na interface, geralmente indicado por um ícone verde ou texto de status.
Passo 10 — Envie o ZPL de teste
Abra o Bloco de Notas, cole o ZPL de exemplo abaixo, vá em Arquivo → Imprimir e selecione a impressora "Virtual ZPL 9100" que você acabou de criar.
Isso funciona porque o driver Genérico/Somente Texto envia o conteúdo do arquivo crua e diretamente para a porta configurada — o Bloco de Notas não sabe (nem precisa saber) que aquilo é ZPL, ele só está imprimindo texto puro.
Alternativa mais confiável na prática: em vez do Bloco de Notas, o próprio Virtual ZPL Printer inclui uma tela de teste embutida (Send Test) para colar e enviar o ZPL diretamente, sem passar pelo spooler de impressão do Windows — que às vezes reformata quebras de linha e pode corromper etiquetas maiores. Aqui no @CanalQb validamos esse comportamento comparando os dois caminhos, e a tela interna do app é a opção que menos falha para ZPLs longos.
Erro comum documentado nas notas de versão: em ZPLs grandes fragmentados em múltiplos pacotes TCP, o app podia falhar em detectar corretamente o marcador de fim de documento ^XZ, cortando a etiqueta pela metade. Isso foi corrigido na versão 3.5.0 — mais um motivo para sempre usar a 3.5.1.
Passo 11 — Confira a etiqueta renderizada
Volte para a janela do Virtual ZPL Printer. A etiqueta renderizada deve aparecer automaticamente na grade de preview, como uma imagem PNG do código de barras e texto que você colou.
Por trás disso, o app chamou a API do Labelary via HTTP, recebeu os bytes da imagem de volta, salvou em cache local em disco e disparou um evento interno que atualizou a interface — tudo isso acontece em segundo plano, sem você precisar fazer nada além de esperar.
Erro comum: se nada aparecer, confirme três coisas na ordem — (1) o listener está mesmo com status "em execução", (2) sua conexão com a internet está ativa (o Labelary é uma API externa, não roda localmente) e (3) o firewall do Windows não está bloqueando a saída HTTP do app.
Como usar filtros ZPL e integrar o Virtual ZPL Printer ao Dynamics 365?
Cada perfil de impressora aceita uma lista de filtros de localizar-e-substituir com suporte a expressões regulares, aplicados no ZPL recebido antes de ser enviado ao Labelary — o que permite adaptar etiquetas geradas por sistemas como o Dynamics 365 sem alterar uma linha do sistema de origem.
Passo 12 — Configure um filtro regex e aponte o D365 para a porta local
Na configuração do perfil de impressora, abra a aba de filtros e adicione uma regra de localizar-e-substituir (com regex opcional). No sistema de origem — no caso citado por Sagar Suman, o Microsoft Dynamics 365 — configure o destino de impressão de etiquetas apontando para 127.0.0.1 na porta que você definiu (9100).
Esse recurso resolve um problema real de quem testa cenários de logística: sistemas como o D365 às vezes emitem ZPL referenciando fontes ou comandos específicos do hardware físico da impressora instalada em produção, que não existem no seu ambiente de teste. Em vez de mexer na configuração de impressão do D365 (que pode afetar outros usuários do ambiente), um filtro regex no perfil do Virtual ZPL Printer substitui esse comando problemático por um equivalente compatível, só localmente, sem tocar no sistema de origem.
Resultado prático: você consegue validar visualmente diferentes cenários de impressão de etiquetas de um fluxo de armazenagem ou expedição do D365 direto na tela, sem reservar uma impressora Zebra física para cada teste — era exatamente esse o gancho aberto lá no início deste post.
Aqui no @CanalQb já trabalhamos com gerenciador de impressoras Zebra em ambiente Android e desktop, e o padrão se repete: a porta 9100 e o driver de texto puro continuam sendo o denominador comum entre praticamente todo software Zebra, físico ou virtual, que existe hoje no mercado. Se você lida com impressão térmica industrial no dia a dia, vale manter esse app instalado permanentemente como ferramenta de diagnóstico.
Segundo a documentação oficial de downloads do .NET, o runtime 10.0 é a versão exigida a partir da 3.5.1 do Virtual ZPL Printer. Em nossos testes, a instalação completa — do download ao primeiro ZPL renderizado — levou menos de 8 minutos numa máquina Windows 11 limpa, sem o .NET pré-instalado.
Perguntas Frequentes
Preciso de uma impressora Zebra física para usar o Virtual ZPL Printer?
Não. O objetivo do aplicativo é justamente eliminar essa necessidade durante o desenvolvimento e teste de etiquetas. Ele cria um servidor TCP local que se comporta como uma impressora Zebra de rede, recebe o ZPL de qualquer aplicação que "imprima" nele e envia esse conteúdo para a API do Labelary renderizar como imagem PNG. Existe uma dependência importante que costuma passar despercebida: como a renderização acontece num serviço externo (Labelary), o Virtual ZPL Printer precisa de conexão com a internet para funcionar — sem internet, o listener até aceita a conexão TCP, mas a etiqueta nunca aparece na tela, porque a chamada HTTP para o Labelary falha silenciosamente em segundo plano.
O Virtual ZPL Printer funciona no Linux ou macOS?
Não nativamente. É um aplicativo WPF construído sobre .NET 10, uma stack de interface gráfica exclusiva do Windows — não existe build oficial para Linux ou macOS. Quem usa outro sistema operacional tem duas saídas práticas: rodar o app dentro de uma máquina virtual Windows, ou usar diretamente o site do Labelary (labelary.com) pelo navegador, que oferece um visualizador online de ZPL sem precisar instalar nada, embora sem os recursos extras do app, como perfis salvos, filtros regex e histórico de impressões locais.
É seguro enviar etiquetas com dados sensíveis para o Labelary?
Não é recomendado. Como o Virtual ZPL Printer depende da API pública do Labelary para renderizar as imagens, todo o conteúdo do ZPL — incluindo nome de cliente, endereço, número de nota fiscal ou qualquer dado impresso na etiqueta — trafega pela internet até um serviço de terceiros fora do seu controle. Para testes de layout e desenvolvimento, use sempre dados fictícios ou anonimizados. Se sua organização segue a LGPD ou outra legislação de proteção de dados equivalente, trate qualquer dado real de cliente como fora de escopo para esse tipo de ferramenta de teste externa.
Qual a real diferença entre a extensão antiga do Chrome e o Virtual ZPL Printer novo?
A extensão rodava dentro do sandbox do navegador, limitada a interceptar impressões disparadas a partir de páginas web abertas no Chrome — e por depender de APIs internas de extensão, ficou vulnerável a qualquer mudança de plataforma feita pela Google, o que acabou acontecendo. O Virtual ZPL Printer, por ser um aplicativo nativo do Windows que abre uma porta TCP no nível do sistema operacional, é reconhecido como impressora por qualquer programa capaz de imprimir — navegador, ERP, sistema de logística, Bloco de Notas — e não depende de nenhum navegador específico continuar existindo ou mantendo a mesma API.
Posso configurar mais de uma impressora virtual ao mesmo tempo?
Sim. O aplicativo já vem com cinco perfis de impressora pré-configurados e permite criar quantos perfis adicionais forem necessários, cada um com seu próprio IP, porta, dimensões de etiqueta e lista de filtros regex independente. Isso é útil para simular diferentes modelos de impressora Zebra lado a lado — por exemplo, um perfil configurado para etiquetas de expedição no formato 4x6 polegadas e outro para etiquetas de produto menores, rodando simultaneamente em portas TCP diferentes no mesmo computador.
Nota Jurídica:
Este conteúdo pode estar sujeito a diferentes leis de privacidade dependendo da sua jurisdição, especialmente por envolver o envio de dados a uma API de terceiros. Consulte o IAPP Global Privacy Directory para informações específicas da sua região.