Etapas para Instalar impressora matricial remota no Linux para usar no PHP

PHPLinux
Enviado por Pedro Faria em Ter, 27/03/2007 - 09:57.PHP | Linux

A ideia desta forma de impressao surgiu apos ler o artigo Impressora remota via Web do Arnaldo Luiz Estevao (http://www.vivaolinux.com.br/artigos/verArtigo.php?codigo=5903) que adaptei para realidade aqui da empresa.

Por Renato Gravino Neto

Na maquina cliente
1- depois do slackware instalado e do cups instalado vamos agora configurar e ativar o cups

editar estes 2 arquivos abaixo para impressora aceitar application/octet-stream

edite o arquivo /etc/cups/mime.convs, encontre a linha abaixo e descomente (retire o # no inicio ) isto vai fazer o CUPS reconhecer comprimidos,expandidos etc... (caracteres binarios)

#application/octet-stream application/vnd.cups-raw 0 -

agora edite o arquivo /etc/cups/mime.types tambem precisamos descomentar a linha abaixo

#application/octet-stream

com as duas linhas descomentadas podemos ativar o Cups

chmod +x /etc/rc.d/rc.cups (tornando executavel) /etc/rc.d/rc.cups start (iniciando)

agora vamos abrir o navegador e incluir a impressora http://localhost:631

1.Clique em Manage Printers
2.Add printer
(entre com usuario e senha do root)

Name: coloque epson (em minusculo)
Location: coloque /dev/lp0
Description: coloque epson (em minusculo)

3.clique em Continue

em Devices: selecione Parallel Port #1 (epson)

4.clique em Continue

Modelo de drivers Selecione o RAW

Make: RAW

5.clique em Continue

agora selecione o modelo

Model: Raw Queue (en)

6.clique em Continue

Pronto impressora adicionada com sucesso
no arquivo /etc/printcap vc vai achar o nome da impressora la

ai para conferir se esta realmente imprimindo dei o comando abaixo

lpr -P epson /etc/printcap

(vai imprimir o arquivo /etc/printcap)

OK estamos com a impressora configurada agora precisamos de construir o script que vai ler a impressao do servidor

no caso criamos em um diretorio o arquivo abaixo
no meu caso criei um diretorio so para scripts (fugindo um pouco do padrao) mas cada um coloque aonde achar melhor o arquivo abaixo, vou descrever como fiz:
no caso aqui da empresa o servidor esta no ip 192.168.1.203 entao usei este ip

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
  	 ### Mude o ip/endereco abaixo para o local que colocou o arquivo imprimeserver.php
    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 

Neste arquivo acima, mude a url do wget para pegar o endereco do server que vc colocou o imprimeserver

depois mudei a permissao para execucao

chmod +x /srv/imprimecliente.sh

depois iniciei o imprimecliente

/srv/imprimecliente.sh &

(o & e para rodar em segundo plano) entao toda vez que desligar este programa nao vai estar rodando no caso eu coloquei a linha acima no /etc/rc.d/rc.local para sempre estar ativo ao ligar a maquina

Agora criando o arquivo que le as impressoes:

no caso eu criei uma tabela no postgreSQL aqui (pode usar seu DB preferido) esta tabela funciona como o chache do servidor de impressao

  1. CREATE TABLE imprimecache (loja int, DATA timestamp,texto text)

Agora construo o arquivo no servidor para pegar a impressao na tabela e enviar para impressora

"caminho_do_servidor_apache"/impressao/imprimeserver.php

  1. <?php
  2.  
  3.     // pegando o numero da loja
  4.     $lj = $_GET['lj'];
  5.  
  6.     // aqui sao lojas chave que nao podem imprimir
  7.     if ($lj == 0 or $lj > 9990){
  8.         exit;
  9.     }
  10.     // conectando com database
  11.     $conectar = "host=seu.endereco.host port=5432 dbname=seuDB user=seuUsuario password=suaSenha";
  12.     $conn  = pg_connect($conectar) or
  13.         die("<H1> Falha ao acessar a base de dados</h1>");
  14.     // selecionando fila de impressao
  15.    
  16.     $sql = "select codigo,texto from impressaocache where loja=$lj order by data limit 1;";
  17.     $resultado = pg_query($conn,$sql);
  18.    
  19.     if (!$resultado){
  20.         pg_close($conn);
  21.         die("<H1>N&atilde;o foi possivel efetuar a consulta<h1>");
  22.     }
  23.     // sem nada na fila  ;)
  24.     if(pg_num_rows($resultado)==0){
  25.         pg_free_result($resultado);
  26.         pg_close($conn);
  27.         exit;
  28.     }
  29.     // pegando o campo necessario
  30.     $campos = pg_fetch_array($resultado,0);
  31.  
  32.     // aqui que esta o macete, com este header, ele consegue enviar o chr(15), chr(14),chr(18) (etc_
  33.     header('Content-type: application/octet-stream');
  34.     // imprime o conteudo
  35.     print $campos['texto'];
  36.     // ejeta 1 linha ao terminar a impressao (opcional)
  37.     print "\r\n";
  38.    
  39.     pg_free_result($resultado);
  40.     // deleta a impressao da fila
  41.     $sql = "delete from impressaocache where codigo = {$campos['codigo']};";
  42.     $resultado = pg_query($conn,$sql);
  43.  
  44.     pg_free_result($resultado);
  45.     pg_close($conn);
  46.    
  47. ?>
  48.  

O arquivo acima que e chamado pelo WGET no script ele apenas le a tabela e envia a impressao mais antiga para o wget (no formato application/octet-stream para conseguirmos expandido/comprimido

Qualquer impressao que precisar, e so gravar na tabela imprimecache que saira na maquina cliente

bem agora so falta fazer um programa que grave na tabela imprimecache que o script buscara automaticamente para a loja

  1. <?php
  2.  
  3.     $texto = "Encontrei um ninho de mafagarfos ".chr(15)."com sete mafagarfinhos\r\n".chr(18);
  4.     $texto .= "Quem os Mafagarfaram?\r\n";
  5.     $texto .= chr(14)."bom mafagarfizador sera \r\n".chr(18);
  6.  
  7.     // conectando com database
  8.     $conectar = "host=seu.endereco.host port=5432 dbname=seuDB user=seuUsuario password=suaSenha";
  9.     $conn  = pg_connect($conectar) or
  10.         die("<H1> Falha ao acessar a base de dados</h1>");
  11.     // gravando na fila de impressao
  12.    
  13.     $sql = "insert into impressaocache (loja,data,texto) values (90,now(),'$texto');";
  14.     $resultado = pg_query($conn,$sql);
  15.    
  16.     if (!$resultado){
  17.         pg_close($conn);
  18.         die("<H1>N&atilde;o foi possivel enviar<h1>");
  19.     }
  20.     pg_free_result($resultado);
  21.     pg_close($conn);
  22. ?> 

Obrigado a Todos



Enviado por Tiago (não verificado(a)) em Sex, 17/10/2008 - 17:15.

Parabens!!!
ótima solucao vou tentar aqui!