você está aqui: Home  → Arquivo de Mensagens Programação Shell Linux: Inscrições Abertas

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