De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.

Impressão remota via web

Colaboração: Arnaldo Estevão

Data de Publicação: 14 de Dezembro de 2006

Para quem tiver um aplicativo rodando em um servidor Apache, escrito em CGI/perl ou PHP, e desejar imprimir em uma impressora matricial remota de nota fiscal por exemplo, a solucão que desenvolvi pode ser usada tanto em Linux, quanto em Windows e é totalmente livre.

Importante considerar que a maquina cliente nao precisa manter nenhuma porta aberta, o sistema é capaz de atravessar firewall e roteadores sem necessidade de estabelecer uma conexão ponto a ponto, assim eu posso colocar o servidor de impressão remota em qualquer maquina de uma subrede local, atras de um roteador de adsl sem ip fixo, um adsl doméstico por exemplo.

Neste exemplo foi usado Slackware 11.0

1. Criando os diretorios necessarios no servidor WEB

  mkdir /var/spool/webpserver
  chown nobody.nobody /var/spool/webpserver

Agora digite ou copie o arquivo webpserver.cgi no diretorio /var/www/cgi-bin

No nosso exemplo vamos usar uma fila chamada notafiscal

  mkdir /var/spool/webpserver/notafiscal
  chown nobody.nobody /var/spool/webpserver/notafiscal

para imprimir um arquivo basta copiar para dentro da fila ex:

  cp /etc/meuarquivo /var/spool/webpserver/notafiscal

Isso pode ser feito de dentro so PHP ou do script CGI gerando o arquivo com o conteudo a ser impresso e depois copiando para o diretorio da fila correspondente

2. webpserver.cgi

  #!/usr/bin/perl
  
  use CGI qw/:standard/;
  print header;
  
  $fila=param('fila');
  $nfiles = 0 ;
  $t0 = time ;
  while ( ( $nfiles == 0 ) and (time - $t0 < 30) and time >= $t0 ) {
  @files = </var/spool/webpserver/$fila/*> ;
  $nfiles = $#files + 1 ;
  sleep 1 ;
  }
  while (</var/spool/webpserver/$fila/*>){
  $file = $_;
  $txt=`cat $file`;
  print $txt ;
  system("rm $file") ;
  }

3. webpserver.bat (cliente windows)

este arquivo deve ser chamado no autoexec.bat ou por um atalho no menu inciar substitua seusite.com.br pelo ip ou pelo nome do seu servidor WEB

  @echo off
  echo Servidor de impressao
  mkdir c:\fila > nul:
  :inicio
  c:\fila\wget -O c:\fila\t.txt http://seusite.com.br/cgi-bin/webpserver.cgi?fila=nostafiscal
  find "0" c:\filat.txt
  if errorlevel 1 goto inicio
  Echo Imprimindo -----------------------------------------------------
  type c:\fila\t.txt
  copy c:\fila\t.txt lpt1
  goto inicio

4. rc.webpserver (cliente linux)

Coloque este arquivo em /etc/rc.d e depois de o atributo de executável para ele chmod +x /etc/rc.d/rc.webpserver e faça uma chamada para ele no rc.local acrescentando a linha /etc/rc.d/rc.webpserver &

  #!/usr/bin/perl
  
  while ( 1 eq 1) {
  print "Servidor de impressao\n";
  system("wget -O /tmp/t.txt http://seusite.com.br/cgi-bin/webpserver.cgi?fila=notafiscal");
  $txt = `/tmp/cat t.txt`;
  if (not index($txt,"0") <= 0 ) {
  print "Imprimindo";
  print $txt ;
  system("cat /tmp/t.txt > /dev/lp0");
  }
  }
  
  

Adicionar comentário

* Campos obrigatórios
5000
Powered by Commentics

Comentários

Nenhum comentário ainda. Seja o primeiro!


Veja a relação completa dos artigos de Arnaldo Estevão