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