Impressão DANFE sem visualização.

504 views
Skip to first unread message

Edgar Dantas

unread,
May 27, 2016, 1:58:28 PM5/27/16
to NFePHP
Gostaria de imprimir o DANFE direto sem pré visualização.
No método printDANFE isso ainda não foi implementado, alguem já conseguiu.
Obrigado.

pleandr...@gmail.com

unread,
May 27, 2016, 2:36:40 PM5/27/16
to NFePHP
Também, preciso disto!

Chinnon Santos

unread,
May 31, 2016, 12:36:14 PM5/31/16
to NFePHP
Esse método ainda não foi implementado, devido as particularidades de cada impressora.

O Roberto possui um projeto aqui no github específico para comunicação direta com impressoras, mas ainda está em andamento, eu acredito q a implementação do método de impressão direta da DANFE depende desse outro projeto.

Também não é simples fazer uma aplicação web comunicação com periféricos do computador, se fosse simples teríamos também suporte a certificado A3...

Rafael Carvalho

unread,
Jun 8, 2016, 8:39:00 AM6/8/16
to NFePHP
Eu consegui utilizando o QZ.IO (www.qz.io), programa que envia uma impressão direto pra impressora padrão.

Lembrando que eu comprei a licença do QZ.IO para ele não ficar pedindo a confirmação toda vez que vem uma impressão e toda vez que ele busca pela impressora padrão. Sugiro fortemente, vale cada real e o suporte deles é show de bola.

Ele tem um tutorial em como configurar esta licença no lado do servidor, mas se tiverem dúvidas é só pedir.

Segue o código:

//Considere $xml como o XML final, protocolado com o retorno da SEFAZ

$docxml = file_get_contents($xml);

$danfe = new Danfe($docxml, 'P', 'A4', '../../images/logo.jpg', 'I', '');


$id = $danfe->montaDANFE();


//Aqui eu salvo o .pdf disponível na internet mesmo, depois de impresso vou deleta-lo, pois o qz.io nao lê localmente, apenas via link
 

$path = '/var/www/html/nfe/danfe';

//Parâmetro 'F' para salvar o .pdf

$teste = $danfe->printDANFE($path . '/' . $id .'.pdf', 'F');



$fdanfe = 'http://oseusite.com.br/nfe/danfe/' . $id .'.pdf';



?>

<html>

<head>

       <script type="text/javascript" src="/qz/js/dependencies/rsvp-3.1.0.min.js"></script>

       <script type="text/javascript" src="/qz/js/dependencies/sha-256.min.js"></script>

       <script type="text/javascript" src="/qz/js/qz-tray.js"></script>

       <script type="text/javascript" src="/qz/js/additional/jquery-1.11.3.min.js"></script>

</head>

<script>

  qz.security.setCertificatePromise(function(resolve, reject) {

  $.ajax("/qz/digital-certificate.txt").then(resolve, reject);

});    

   

qz.security.setSignaturePromise(function(toSign) {

  return function(resolve, reject) {

     $.ajax("/qz/sign-message.php?request=" + toSign).then(resolve, reject);

  };  

});


qz
.websocket.connect
().then(function(){

       var impressora = "";

   qz.printers.getDefault().then(function(printer){

//console.log(printer);

 
       
var
config = qz.configs.create(printer);

       var data = [{

          type: 'pdf',

          data: '<?php echo $fdanfe; ?>'

       }];

               

      qz.print(config, data).catch(function(e) {

         console.error(e);

         });

     });

});

</script>

       <?php


//DELEÇÃO DO ARQUIVO .PDF PARA NAO FICAR PUBLICADO

unlink
($path . '/' . $id .'.pdf'');

}
























?>



Roberto Machado

unread,
Jun 8, 2016, 8:44:35 AM6/8/16
to nfe...@googlegroups.com
Rafael;

Que legal !! me diga:

Qual é a validade do certificado que te forneceram ?
Esse suporte do QZ.io é válido por quanto tempo ?
Qual é a limitação de instalações (se existe) desse certificado ?

Se puder vou perturbar um pouco você com essas e outras duvidas sobre o QZ.io

Abraço
Roberto

Rafael Carvalho

unread,
Jun 8, 2016, 9:09:17 AM6/8/16
to NFePHP
A validade é de 1 ano (a renovação sai mais barato).

Como o certificado é server-side, a quantidade de clientes é ilimitada, o único porém é que o cliente precisa instalar o software deles e, na primeira vez que pedir, marcar lá pra sempre usar a mesma resposta (SIM, obviamente) e nunca mais ele irá pedir nada. Nesse método que mostrei ele utiliza a impressora padrão do sistema (esqueci de dizer que o software cliente funciona em TODAS as plataformas, eu mesmo utilizo no OSX, meus clientes em ubuntu e windows - xp pra cima), mas pode-se programar pra ele fazer um diálogo para pedir a impressora numa lista e, no callback, utilizá-la para imprimir. Essa lista seria alimentada pelo retorno de uma função que o qz.io tem que mostra todas as impressoras instaladas no sistema do cliente.

Essa foi a melhor solução que encontrei e acho que é definitiva.

Roberto Machado

unread,
Jun 8, 2016, 9:09:27 AM6/8/16
to nfe...@googlegroups.com
Quanto ao projeto POSPRINT fiz algumas inclusoes nesses ultimos dias e inclusive existe um exemplo de DANFCe temporariamente inclusa no próprio projeto para a realização de testes.

Quem tiver impressoras ESCPOS para testar e me ajudar com o código eu agradeço. Todo o meu trabalho está sendo feito meio as cegas pois não tenho acesso a nenhuma desses impressoras. Mas alguns testes foram feitos por outros.
Lá temos :
   Conectores Locais 
       - Serial
       - USB
       - Network
   Extração dos dados para envio ao QZ Tray, por exemplo
   Impressoras (somente alguns modelos desses fabricantes)
       - Epson
       - Bematech
       - Daruma
       - Elgin
       - Sweda
       - Diebold

NOTA: as classes ainda não estão terminadas !! faltam testes e ajustes 

Roberto

Roberto Machado

unread,
Jun 8, 2016, 9:12:55 AM6/8/16
to nfe...@googlegroups.com
Sim Rafael;

Eu mesmo uso aqui o QZ tray, mas ainda não comprei  a licença, pois meu uso é limitado apenas as 3 maquinas que ficam dentro da área fabril.

Obrigado pelas respostas. Se necessitar de DANFCE para impressoras POS o projeto posprint deu uma adiantada e já está pronto para testes inclusive com uma classe de DNAFCe para desenvolvimento e testes práticos.

Roberto

Rafael Carvalho

unread,
Jun 8, 2016, 9:28:32 AM6/8/16
to NFePHP
Esse será o segundo passo aqui do projeto que estou, e com certeza vou contribuir com os códigos e testes. Inclusive tenho uma impressora serial pronta aqui na minha mesa para os testes :)

Como a NFE ainda precisa de alguns ajustes, acho que final do mês estarei mais ativo.

Chinnon Santos

unread,
Jun 8, 2016, 10:05:42 PM6/8/16
to NFePHP
Rafael

Achei bacana esse QZ., só achei o custo salgado, $ 399 dólares por ano, cotados hoje R$ 1.341,03, meu cliente não vai querer pagar esse adicional kkkkkk

A aplicação deles e top, faz comunicação com qualquer tipo de dispositivo de entrada e saída, até leitura de balança tem, daria para você integrar um hipermercado completo em uma aplicação em nuvem sem problemas, eles são inteligentes, criaram uma aplicação instalável no PC que comunica com o hardware diretamente e faz a comunicação com a webservice deles que esta ligada a sua aplicação, tempos atrás eu pensei em algum similar utilizando o próprio navegador web, criando complementos que os usuários iriam baixar para o navegador e esse comunicaria diretamente com hardware, igual alguns complementos de banco já faz, a Mozilla te da todo suporte para criar esses complementos, a Apple também para o Safari, permitindo que você desenvolva para o Safari sem necessidade de Certificação (igual é para iOS e OS...), eu não pesquisei sobre o Google Chrome, mas acredito que seja aberto também...

Também da para nós aqui do projeto criar algum similar, uma aplicação plataforma em java por exemplo que comunique com uma webservice para receber os dados para impressão, a aplicação java seria instalada no pc que tivesse a impressora, eu já fiz isso anos atrás para fazer uma Bematech MP 20 antiga de uma boate imprimir tickets de bebida para ser trocada no balcão, na época a Bematech me deu todo o suporte através do forum de desenvolvedores deles, na minha aplicação o usuário só digitava o ID do pedido, e dava ok, ele buscava os dados na webservice e imprimia na impressora térmica, ficou meio 'gambiara' mas foi uma solução, os cara não queria investi em uma impressora mais nova e eu tinha que resolver.

Anos depois, eu já consegui o mesmo mas sem aplicação java para uma indústria de sorvetes com uma aplicação web, a Bematech MP 4200 imprimi o cupom da tela do navegador perfeitamente, essa DANFCE HTML que a api imprimi no navegador pode ser impressa na MP 4200 sem problemas, porem não é diretamente igual o IO. faz, você vai ter que abrir na tela do navegador e confirmar a impressão, e depois fechar a janela, e isso toda vez que precisar imprimir (é o que eu faço hoje...), algum do tipo IO. open-source seria o canal...

Em sexta-feira, 27 de maio de 2016 14:58:28 UTC-3, Edgar Dantas escreveu:

Roberto Machado

unread,
Jun 9, 2016, 7:37:53 AM6/9/16
to nfe...@googlegroups.com
Um detalhe Chinnon, o QZ Tray é  OpenSource, seu código completo está no GitHub, tendo conhecimento de java é só modificar para funcionar sem a necessidade de pagar pela "Assistência Técnica", que é o que eles cobram. Apenas isso !!

Roberto

Rafael Carvalho

unread,
Jun 10, 2016, 1:54:29 PM6/10/16
to NFePHP
 
 Verdade que o preço dele não é barato, na verdade eles vendem o suporte e um certificado digital válido. Apenas isso. Como o Roberto falou, ele sendo opensource com conhecimento suficiente pode ser modificado para funcionar sem a necessidade da autenticação.


Eu o comprei porque minha aplicação roda em VÁRIOS clientes, e não apenas um, e hoje em dia eu não vejo apenas o custo unitário de uma solução, vejo o retorno que ela irá me trazer. Ao comprar o qz.io poupei o meu tempo e o de vários analistas, o que por si só já se paga. Tenho planos para imprimir em NFc-E em impressoras térmicas, que ele já suporta, e por aí vai.

1200 reais, dividido por mês seria 100 reais. Acredito que se você tiver 5 clientes que utilizariam o qztray, seria 20 por mês pra cada um. 5 reais por semana, um real por dia útil.

Edgar Dantas

unread,
Jun 13, 2016, 11:31:22 AM6/13/16
to NFePHP
Após algumas pesquisas o que estou é fazendo é o seguinte:
O usuário escolher os arquivos cujo danfe quer imprimir, faço a transferencia dos arquivos para a máquina do usuário via ftp.
Na máquina do usuário uso o "folder agent" programa free que fica monitorando o diretório e quando entra um pdf ele imprime.
Para imprimir estou usando o "sumatra pdf" também free, que é chamado pelo "folder agent".
Ficou tudo automático.
Qualquer dúvida é só postar.
t+



Em sexta-feira, 27 de maio de 2016 14:58:28 UTC-3, Edgar Dantas escreveu:

Rafael Carvalho

unread,
Jun 13, 2016, 2:11:13 PM6/13/16
to NFePHP
Nesse caso seria preciso utilizar um sevidor ftp na máquina do cliente, correto?

No caso de alguns poucos clientes, é uma possibilidade válida, infelizmente no meu, que tenho centenas de clientes optei pelo qz.io mesmo :)

Edgar Dantas

unread,
Jun 13, 2016, 4:38:38 PM6/13/16
to NFePHP
Se o servidor php ficar na máquina do cliente não precisa do ftp basta copiar os arquivos.
Se for um servidor php para vários clientes precisa só de um servidor ftp.
t+
Reply all
Reply to author
Forward
0 new messages