Danfe para impressoras térmicas 58mm e 80mm

56 views
Skip to first unread message

aloiso junior

unread,
Apr 16, 2026, 1:30:54 PM (10 days ago) Apr 16
to NFePHP
Pessoal, 
como estive olhando mais a fundo a biblioteca nfephp/sped-da, notei que 
é de interesse que haja uma forma de realizar a impressão de cupons como
o de NFC-e com comandos esc/pos diretamente para impressoras térmicas em vez 
de apenas gerar um pdf e o desenvolvedor dar o seu jeito de imprimir nas impressoras térmicas.

Há um esforço nesse sentido com a biblioteca nfephp/posprint, embora ela esteja
um pouco encostada é de se admirar o que foi feito lá, ela se propõe ser a solução para
impressão em impressoras térmicas de forma descomplicada, com o backend se comunicando diretamente com a impressora.

Acredito que embora honesto o conceito ele está errado, o backend não deve se comunicar diretamente com dispositivos em rede local, poderia escrever bons motivos para isso, mas sejamos mais práticos. 

Há um bom tempo estou pensando em uma arquitetura para isso e para não acabar usando muitas horas desenvolvendo isso e acabar sendo descartado pelos mantedores 
por considerar fora do escopo vou detalhar o que pretendo fazer.

A lib nfephp/posprint pode assumir um papel mais agnóstico e objetivo, em vez de ser a solução completa para a impressão ela se dedicar apenas a gerar o buffer, base64, etc... de esc/pos, sem se preocupar com fabricantes de impressora, vamos definir o padrão Epson largamente aceito, sendo assim o papel seria apenas de gerar os comandos esc/pos para o documento a ser impresso.

Infelizmente não podemos enviar o binário, base64 a ser gerada pelo nfephp/posprint e ter uma forma adequada de abranger diferentes conexões de impressora (USB/Rede/Compartilhada)

Bom gente aqui pode ser a parte mais polêmica mas por favor, leiam que não é uma tentativa de desvirtuar o projeto, mas dar camadas de apoio que vão aumentar significativamente a robustez.

Precisamos, trabalhar com websockets! Vejam, antes de parar de ler me dêem a chance de defender isso.

uma lib agnóstica para ser transmissor de eventos para clientes pode ser uma ferramenta admirável, com várias aplicações mas sobre impressões seria o seguinte:

1) Frontend solicita a impressão;
2) backend gera o esc/pos e transmite o evento para qualquer ouvinte interessado (Broadcast)
3) O ouvinte*** recebe o conteudo apropriado de e dispõe de recursos para encaminhar corretamente a impressão para o dispositivo.

***Ouvinte: Deve ser uma aplicação instalada em um computador ou em um printserver pois terá a capacidade de requisitar a impressão como se toda a aplicação de emissão fosse desktop. 

Vejam isso resolve vários problemas sobre a impressão, vai eliminar de vez o popup no navegador para imprimir, para impressoras térmicas teremos uma impressão com mais qualidade pois não estaremos enviando uma "imagem" (PDF) para ela.

Precisariamos de duas ferramentas para isso que deveriam fazer parte do ecossistema NFEPHP

* Lib para Server de Websocket: Ela não seria apenas para impressão com a criatividade do desenvolvedor lidar com eventos assincronos da sefaz e fazer algo brilhante.

* Aplicação Nativa (Linux e Windows): Essa aplicação seria para servir como hub local para impressão, como é algo nativo tem acesso a meios adequados de impressão, lida com impressora usb, rede, compartilhada, bluetooth etc..

Linguagens de Programação para Server de websocket: Javascript/Typescript
Linguagem de Programação para Aplicativo Nativo: Rust

Vejam a intenção aqui não é criar algo para resolver um problema isolado e sim lidar com desafio de longa data do projeto.

gustavo henrique batista gomes

unread,
Apr 16, 2026, 1:34:19 PM (10 days ago) Apr 16
to nfe...@googlegroups.com
Coloca o cloudeflare para fazer isso, já tenho uma solução simples e fácil para imprimir bonito o nfce, se quiser posso disponibilizar para vc 

--
--
Você recebeu esta mensagem porque está inscrito no Grupo "NFePHP".
Para Postar: nfe...@googlegroups.com
Para Sair do Grupo: nfephp+un...@googlegroups.com
Link: http://groups.google.com.br/group/nfephp?hl=pt-BR
-------
Repositórios: https://github.com/nfephp-org
---
You received this message because you are subscribed to the Google Groups "NFePHP" group.
To unsubscribe from this group and stop receiving emails from it, send an email to nfephp+un...@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/nfephp/7883e97d-1066-4be6-a592-0ab7ed8c74ean%40googlegroups.com.

aloiso junior

unread,
Apr 16, 2026, 2:00:30 PM (10 days ago) Apr 16
to nfe...@googlegroups.com
Certamente vc se refere a utilizar túneis com a solução Zero Trust,
é uma boa saida, mas ainda tem uma limitação afinal seu serviço instalado 
no computador (cloudflared) requer uma conexão TCP, ou seja as impressoras precisam ser de rede,
acabamos deixando de fora USB, compartilhada e Bluetooth por exemplo.

Também considero mais trabalhoso, pois além de ter de instalar a impressora na rede precisar de um printserver para instalar os drivers
você precisa também instalar o serviço do cloudflare, configurar o túnel para cada equipamento e no cloudflare precisa criar um subdomínio para
cada dispositivo. isso pode rapidamente virar um pesadelo.

Com dispositivo local podemos ter o poder de fazer coisas bacanas como enviar para o frontend que a bobina está acabando, que tá sem papel etc...
a configuração basicamente será a instalação da impressora podendo ser usb, rede, compartilhada, ou COM... 

O cloudflare exige também que você tenha um domínio dedicado para isso pois ele precisa ser o provedor de dns, acho uma solução bem elegante 
e realmente funciona, mas não é tão robusta e abrangente.

Mas se alguém acha essa solução do Gustavo suficiente, posso mandar aqui no grupo ou ele se quiser um tutorial de como fazer isso.

Obrigado

Roberto Machado

unread,
Apr 16, 2026, 4:09:48 PM (10 days ago) Apr 16
to nfe...@googlegroups.com
Não vejo nenhum problema de deixar essa biblioteca apenas para gerar o script da impressora em esc/pos ou equivalente como um buffer de dados e retornar um base64 para posterior direcionamento.

Já faço isso com a impressão de etiquetas para impressoras térmicas e o backend renderiza as etiquetas converte em base64 e uso o QZTray para enviar do backend para ao desktop onde está a impressora térmica (a maioria USB)

Sobre o QZTRay é um app escrito em java disponível no github (em versão não atualizada), que você instala no desktop e ele fica ouvindo em duas portas e se comunica com o aplicativo web via javascript.
O QZTray é adaptável se souber o que fazer (no meu caso criei um certificado autoassinado com duração de 30 anos) e coloquei no QZTray funciona de forma excelente.
Se a empresa que atendi com isso fosse de grande porte  eu teria feito eles comprarem a licença do QZTray, mas para uma empresa muito pequena para mais de US$ 500/ano para imprimir algumas etiquetas é caro demais.
Mas em uma empresa grande vale muito a pena pelo suporte do pessoal da QZ.

Não sei de outras soluções gratuitas que podem ser usadas dessa forma e ainda com um bom nível de segurança

Roberto

Marcos Silva

unread,
Apr 16, 2026, 4:13:38 PM (10 days ago) Apr 16
to NFePHP
Aproveitando o gancho do Roberto, eu criei um tutorial de como fazer isso com o QZ Tray, é bem antigo mas tem tudo que você precisa, desde como implementa-lo até gerar o certificado: https://codigododia.com.br/dicas/post/como-imprimir-direto-do-navegador-para-a-impressora

Roberto Machado

unread,
Apr 16, 2026, 4:15:27 PM (10 days ago) Apr 16
to nfe...@googlegroups.com
Boa Marcos, isso ajuda aqueles que não conhecem a ferramenta!

Abraço
Roberto

aloiso junior

unread,
Apr 16, 2026, 5:10:20 PM (10 days ago) Apr 16
to nfe...@googlegroups.com
Então Roberto,
sobre o QzTray sim ela funciona de forma similar a aplicação que eu sugeri, porém ter a possibilidade de ir desenvolvendo algo para o NFEPHP,
pode render um ganho a plataforma, pois tendo algo como isso ele não poderia apenas servir como hub de impressão, também lidar com outra pedra no sapato
da plataforma Certificados A3, não vou me estender sobre várias outras possibilidades, mas vejo isso como um caminho interessante para o projeto.

Sobre confiabilidade, não seria libs externas, seriam códigos abertos fazendo parte do projeto para termos o mínimo de dependência de outros repositórios,
algo que percebo que é bem evitado por aqui, então novos repositórios poderiam fazer parte do projeto, por exemplo:

nfephp/websocket -  lib que tenho certeza que vamos caprichar para ficar bala para broadcast, seja para o aplicativo ou o frontend
nfephp/app-desktop - aplicação para lidar com o que a biblioteca precisar de hardware como impressora, certificado A3 etc.. Teremos o código fonte aberto para,
ir melhorando e garantindo a segurança que realmente é importante, também podemos ter ela compilada para quem não quiser ter de montar o ambiente de desenvolvimento para isso

Não se preocupe, os nomes dos repositórios acima são meramente sugestivos.

Para finalizar, Roberto, essa nova camada estaria totalmente sob o projeto NFEPHP

Importante, não estou postando aqui na tentativa de alguém pintar para fazer isso, estou aqui discutindo se posso ir em frente e fazer um mvp de ambos para,
o pontapé inicial.

Abraço.



--
--
Você recebeu esta mensagem porque está inscrito no Grupo "NFePHP".
Para Postar: nfe...@googlegroups.com
Para Sair do Grupo: nfephp+un...@googlegroups.com
Link: http://groups.google.com.br/group/nfephp?hl=pt-BR
-------
Repositórios: https://github.com/nfephp-org
---
You received this message because you are subscribed to the Google Groups "NFePHP" group.
To unsubscribe from this group and stop receiving emails from it, send an email to nfephp+un...@googlegroups.com.
Reply all
Reply to author
Forward
0 new messages