Criei um simulador de impressora Zebra com Node.js para nunca mais desperdiçar uma etiqueta
Quem aqui já precisou integrar alguma aplicação com impressoras Zebra e sentiu a dor de gastar dezenas de etiquetas e rolos de ribbon só pra testar um código ZPL?
Para resolver esse problema (e salvar umas árvores no processo), eu criei o Zebra Printer Simulator, um projeto open-source que simula uma impressora Zebra localmente, com direito a renderização em tempo real via WebSockets.
O repositório está aqui: https://github.com/felprangel/zebra-printer-simulator
Qual é a mágica?
A ideia é simples: você sobe um servidor web na sua máquina que se comporta como uma impressora de rede. A partir daí, pode enviar comandos ZPL de duas formas:
- Pela Interface Web: Cole seu ZPL e veja o resultado na hora.
- Via
POST(o mais legal): Envie o código ZPL direto do seu terminal comcurl(ou de qualquer outra aplicação) e a etiqueta renderizada aparece instantaneamente na interface web, como num passe de mágica.
Dá uma olhada no print:
Isso é extremamente útil para depurar o ZPL que sua aplicação está gerando, sem precisar de uma impressora física do lado. Todos os clientes conectados na página veem a atualização ao mesmo tempo!
Como funciona?
O backend recebe o ZPL, envia para a API pública do Labelary (que faz um trabalho incrível renderizando ZPL) para gerar a imagem da etiqueta, e em seguida, dispara um evento via Socket.IO para todos os clientes web conectados, atualizando a imagem em tempo real.
A stack utilizada foi:
- Backend: Node.js + Express + TypeScript
- Real-time: Socket.IO
- Containerização: Docker e Docker Compose
Como testar? É moleza!
A forma mais fácil de rodar o projeto é com Docker. Você não precisa nem ter Node.js instalado.
-
Clone o repositório:
git clone https://github.com/felprangel/zebra-printer-simulator.git cd zebra-printer-simulator -
Suba o container:
docker-compose up --build -d -
Acesse
http://localhost:5001no seu navegador.
Agora a melhor parte: abra um terminal e mande um ZPL via curl:
curl -X POST \
--header "Content-Type: text/plain" \
--data "^XA^CF0,60^FO50,50^FDTabNews!^FS^FO50,130^FDIsso é demais!^FS^XZ" \
http://localhost:5001/pstprnt
A etiqueta vai aparecer na tela do navegador que você deixou aberta. Simples assim!
Feedback e Contribuições
Criei esse projeto para resolver uma necessidade que eu mesmo tinha, e acredito que possa ajudar mais gente por aí. O código é aberto e está no GitHub, então sintam-se à vontade para abrir issues, sugerir melhorias ou até mesmo mandar um PR!
O que acharam da ideia? Alguém mais sofre com o desenvolvimento para ZPL? Deixem seus comentários e feedbacks aí!