você está aqui: Home  → Arquivo de Mensagens

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");
  }
  }
  
  


 

 

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

Opinião dos Leitores

Seja o primeiro a comentar este artigo
*Nome:
Email:
Me notifique sobre novos comentários nessa página
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script