Esta dica tem como objetivo ensinar a configurar a impressora matricial remota via
web, é um complemento do artigo "Impressora remota via Web" citado mais abaixo, desta forma, o usuário consegue imprimir caracteres comprimidos e expandidos.
A idéia desta forma de impressão surgiu após ler o artigo
Impressora remota via Web do Arnaldo Luiz Estevão que adaptei para realidade aqui da empresa. A idéia é do Arnaldo, apenas adaptei.
Na máquina cliente
Depois do
Slackware instalado e do CUPS instalado vamos agora configurar e ativar o CUPS.
Edite os arquivos /etc/cups/mime.convs e /etc/ups/mime.types para a impressora aceitar application/octet-stream:
Em /etc/cups/mime.convs, encontre a linha abaixo e descomente (retire o # do início). Isto vai fazer o CUPS reconhecer comprimidos, expandidos etc (caracteres binários).
#application/octet-stream application/vnd.cups-raw 0 -
Agora edite o arquivo /etc/cups/mime.types. Nele, também precisaremos descomentar a linha abaixo:
#application/octet-stream
Com as duas linhas descomentadas podemos ativar o CUPS:
# chmod +x /etc/rc.d/rc.cups (tornando executável)
# /etc/rc.d/rc.cups start (iniciando)
Agora vamos abrir o navegador e incluir a impressora.
http://localhost:631
- Clique em Manage Printers;
- Add printer (entre com usuario e senha do root);
- Name: coloque epson (em minúsculo);
- Location: coloque /dev/lp0;
- Description: coloque epson (em minúsculo);
- Clique em Continue;
- Devices: selecione Parallel Port #1 (epson);
- Clique em Continue;
- Modelo de drivers: selecione o RAW;
- Make: RAW;
- Clique em Continue. Agora selecione o modelo;
- Clique em Continue.
Pronto, impressora adicionada com sucesso. No arquivo /etc/printcap você vai achar o nome da impressora.
Depois, para conferir se está realmente imprimindo, dê o comando abaixo:
$ lpr -P epson /etc/printcap (vai imprimir o arquivo /etc/printcap)
Ok, estamos com a impressora configurada, agora precisamos construir o script que fará a leitura da impressão do servidor. Neste caso, criaremos em um diretório o arquivo abaixo. No meu caso criei um diretório só para scripts (fugindo um pouco do padrão) mas cada um coloque onde achar melhor o arquivo abaixo, vou descrever como fiz:
No caso aqui da empresa o servidor está no IP 192.168.1.203, então usei ele.
# mkdir /srv
# cd /srv
# vi imprimeserver.sh (ou use seu editor preferido) e insira o texto abaixo:
#!/bin/bash
# comentario do RENATO.GRAVINO.NETO
# apos a instalacao normal VERIFICAR o /etc/cups/mime.conv e mime.type
# descomentar o application/octet-stream em ambos
while [ 1 ]
do
wget http://192.168.1.203/impressao/imprimeserver.php?lj=90 -O saida.txt -q
if [ `cat saida.txt |wc -l` -gt 0 ]
then
lpr -P epson saida.txt
sleep 3
fi
sleep 2
done
No arquivo acima, mude a URL do wget para pegar o endereço do servidor que você colocou o imprimeserver.
Depois mude a permissão para execução:
# chmod +x /srv/imprimecliente.sh
Em seguida inicie o cliente:
# /srv/imprimecliente.sh & (o & e para rodar em segundo plano)
Toda vez que desligar este programa não estará rodando. No meu caso, coloquei a linha acima no /etc/rc.d/rc.local para sempre estar ativo ao ligar a máquina.
Agora criando o arquivo fará a leitura das impressões. No meu caso, criei uma tabela no PostgreSQL (pode usar seu DB preferido). Esta tabela funciona como o cache do servidor de impressão.
> CREATE TABLE imprimecache (loja int, data timestamp, texto text);
Agora construa o arquivo no servidor para pegar a impressão na tabela e enviar para impressora
${caminho_do_servidor_apache}/impressao/imprimeserver.php:
<?php
// pegando o numero da loja
$lj = $_GET['lj'];
// aqui sao lojas chave que nao podem imprimir
if($lj==0 or $lj>9990){
exit;
}
// conectando com database
$conectar = "host=seu.endereco.host port=5432 dbname=seuDB user=seuUsuario password=suaSenha";
$conn = pg_connect($conectar) or
die("<H1> Falha ao acessar a base de dados</h1>");
// selecionando fila de impressao
$sql = "select codigo,texto from impressaocache where loja=$lj order by data limit 1;";
$resultado = pg_query($conn,$sql);
if (!$resultado){
pg_close($conn);
die("<H1>Não foi possivel efetuar a consulta<h1>");
}
// sem nada na fila ;)
if(pg_num_rows($resultado)==0){
pg_free_result($resultado);
pg_close($conn);
exit;
}
// pegando o campo necessario
$campos = pg_fetch_array($resultado,0);
// aqui que esta o macete, com este header, ele consegue enviar o chr(15), chr(14),chr(18) etc
header('Content-type: application/octet-stream');
// imprime o conteudo
print $campos['texto'];
// ejeta 1 linha ao terminar a impressao (opcional)
print "\r\n";
pg_free_result($resultado);
// deleta a impressao da fila
$sql = "delete from impressaocache where codigo = {$campos['codigo']};";
$resultado = pg_query($conn,$sql);
pg_free_result($resultado);
pg_close($conn);
?>
O arquivo acima que é chamado pelo wget no script apenas faz a leitura da tabela e envia a impressão mais antiga para o wget (no formato application/octet-stream para conseguirmos expandido/comprimido). Qualquer impressão que precisar, é só gravar na tabela imprimecache que sairá na máquina cliente.
Bem, agora só falta fazer um programa que grave na tabela imprimecache que o script buscará automaticamente para a loja.
<?php
$texto = "Encontrei um ninho de mafagarfos ".chr(15)."com sete mafagarfinhos\r\n".chr(18);
$texto .= "Quem os Mafagarfaram?\r\n";
$texto .= chr(14)."bom mafagarfizador sera \r\n".chr(18);
// conectando com database
$conectar = "host=seu.endereco.host port=5432 dbname=seuDB user=seuUsuario password=suaSenha";
$conn = pg_connect($conectar) or
die("<H1> Falha ao acessar a base de dados</h1>");
// gravando na fila de impressao
$sql = "insert into impressaocache (loja,data,texto) values (90,now(),'$texto');";
$resultado = pg_query($conn,$sql);
if (!$resultado){
pg_close($conn);
die("<H1>Não foi possivel enviar<h1>");
}
pg_free_result($resultado);
pg_close($conn);
?>