Imprimir via Servidor [RESOLVIDO]

Bom dia amigos(as) do fórum,

Estou com o seguinte problema: quero imprimir um arquivo bem simples no formato .txt que está na impressora do servidor Linux, o problema é que ele não está imprimindo, tentei usar este código abaixo:

$handle = fopen( “\servidor\Hp Laser”, “w” );

E também dei uma olhada neste fórum que fala algo semelhante:

http://www.scriptcase.com.br/forum/index.php/topic,4054.0.html

Em ambos os casos não deu certo e antes que perguntem, a impressora já está compartilhada e pronta para uso…

Para teste criei uma tela de controle com o tipo de campo para Documento para pegar o arquivo em .txt que está no meu computador e gerar a impressão, alguém tem alguma sugestão ou exemplo? :frowning:

coloca a impressora no samba.

Tentei Haroldo pelo Samba mas não consegui, tem alguma outra forma?

Se a impressora está no linux, a sua app está em outro servidor (qual o SO ) ?

Se for isto, verifique se a porta do servidor linux, que está com a impressora, se está com a porta 631 aberta, se estiver envie via cups!

Att,

Jocimar

Jocimar na verdade está no Windows, até desconsidera que está no Linux no momento, mas mesmo assim no windows não estou conseguindo imprimir, passo o IP e o caminho tudo direitinho e não vai. Mas futuramente irei precisar sim também para Servidores Linux nos servidores locais dos clientes (pela qual eu sou leigo e preciso aprender mais sobre esse SO).

Referente ao servidor de impressão do Windows tem alguma idéia de como proceder no SC?

Marcelo,

Na inicial você mencionou que a impressora está no linux.
O linux recebe impressão por portas.

Além de configurar a impressora no linux, você precisa abrir esta porta para receber de outros IP’s (mesmo que locais).

No windows o comando netstat por ser utilizado para verificar quais são as portas abertas, seja do micro local como de IP’s, e é por aí que saberá se a porta em determinado “micro” esteja aberta, se estiver é só enviar a impressão através de comandos do tipo “lpd” “lpr” que atualmente o windows têm utilizado, inclusive para receber impressões. No caso de lpd / lpr a porta é a 515.

Dê um netstat -an na linha de comando do seu micro windows e verá as portas que estão listing (escutando / abertas )
No linux utilize nmap localhost para o mesmo resultado.

Att,

Jocimar

Sim Jocimar realmente tinha mencionado no começo que era pro Linux, mas decidimos testar primeiro em um servidor Windows a impressão dos arquivos.

Mais uma vez obrigado pela tua ajuda e com certeza irei estudar mais sobre essas informações que você me passou.

Eu utilizo uma impressora com servidor linux ubuntu
e criei um botao php com o seguinte codigo

$teste = ‘teste de impressao’;

   $printer = "Zebra_TLP2844";
    $script = "print.sh";
    $script_path = "/var/www/html/lis/_lib/printLb/";
   $command = $script_path.$script;
   $parameter1 = " '".$printer."'";
   $parameter2 = " '".$teste."'";
   $command.=$parameter1.$parameter2;

   shell_exec($command);

Arquimedes obrigado por responder, testei o seu código de exemplo e deu o seguinte erro na aplicação:

ERRO
Undefined variable: script
ERRO
Undefined variable: script_path

Desculpe amigo esqueci de falar que é uma impressora de mesa TLP 2844 Zebra TLP2844, e
faltou essa variaveis
$script = “print.sh”;
$script_path = “/var/www/html/lis/_lib/printLb/”;

codigo completo abaixo

$teste = ‘teste de impressao’;

   $printer = "Zebra_TLP2844";
    $script = "print.sh";
    $script_path = "/var/www/html/lis/_lib/printLb/";
   $command = $script_path.$script;
   $parameter1 = " '".$printer."'";
   $parameter2 = " '".$teste."'";
   $command.=$parameter1.$parameter2;

   shell_exec($command);

impressora.jpg

Boa noite,

Impressão pelo servidor:

  1. Já tentou direto na porta? Não sei se irá funcionar
    $fp = fopen("/dev/lp0", “w”); // linux nota: considerei que sua impressora esta no dispositivo lp0
    $fp = fopen(“LPT1”, “w”); // windows
    fwrite($fp,“nomearquivo”);
    fclose($fp);

Impressão pelo cliente:
2) somente funciona no servidor windows e no cliente pode escolher qualquer impressora que esteja instalada na estação:
http://blog.fabianobento.com.br/2011/12/enviando-uma-impressao-direto-pelo-php/
tem que habilitar php_printer.dll
http://php.net/manual/fa/intro.printer.php
Já usei e funciona, pena que somente pelo php rodando em servidor windows

Pelo comando php exec
3) Outra forma é como os colegas falaram:
http://php.net/manual/pt_BR/function.exec.php
windows -> exec(“print /d:LPT1: C:\filename.txt”); -> https://technet.microsoft.com/en-us/library/cc775908(v=ws.10).aspx
linux -> exec("lpr -P ‘nomeimpressora’ -r ‘filename.txt’);
Já usei deste jeito anos atrás

LPR
4) Se quiser padronizar o uso de comando lpr tanto no linux quanto no windows através do comando php exec
http://lmgtfy.com/?q=windows+lpd+lpr
https://technet.microsoft.com/pt-br/library/cc732063.aspx
https://technet.microsoft.com/pt-BR/library/cc728404.aspx
https://technet.microsoft.com/pt-br/library/cc731857.aspx
http://support.ricoh.com/bb_v1oi/pub_e/oi_view/0001042/0001042969/view/netsys/int/0207.htm

Arquimedes e Alexandre, muito obrigado amigos pela ajuda de vocês!

Estarei estudando e testando com calma esses códigos, e assim que puder estarei retornando pra ver se deu certo. :wink:

inclui na sua pesquisa CUPS e IPP

Beleza Flávio vou incluir sim, obrigado pela ajuda!

Ficamos no aguardo. Boa sorte.

Bom galera conseguimos resolver aqui a impressão depois de muito trabalho que tivemos, usando o samba e mais alguns exemplos dos que me ajudaram aqui, quero agradecer mais uma vez pelo apoio e ajuda amigos do fórum!

Marcelo,
Por favor poste a solução usada, para que esta pergunta não se repita no Fórum.
E quem ajudou com alguma possível solução saiba o que serviu ou não.
Obrigado

Claro Alexandre com muito prazer, perdão por não ter postado antes, estava sem tempo e desculpa pela demora…mas vamos lá:

Foi criado um código para impressão da etiqueta Zebra de teste atribuindo a uma variável. Depois usamos o fopen pra gerar esse arquivo em um diretório temporário usando assim o nome do usuário -> [qusuario] para não dar problemas e nem conflitos na geração das etiquetas. No comando exec() o Samba é usado para comunicar com a impressora compartilhada de um servidor Windows e também ele pega o arquivo tmp que foi gerado e é impresso a etiqueta Zebra instantaneamente conforme o código abaixo:

    //GERA CONTEUDO DE ARQUIVO
    $msg  ="^XA";
    $msg .="^FO10,10^A0A,40,20^FDCod Ean:7892840800000^FS^";
    $msg .="^FO280,10^A0A,40,20^FDCod Int:0123456^FS";
    $msg .="^FO430,10^A0A,40,20^FDPEPSI COLA^FS";
    $msg .="^FO250,60^BY3,,60^BEA,60,Y,N^FD0123456000012^FS";
    $msg .="^FO10,180^A0A,40,20^FDCnpj:10.317.672/0001-89^FS";
    $msg .="^FO280,180^A0A,40,20^FDForn:MEGA FORM INFORMATICA^FS";
    $msg .="^FO10,220^A0A,40,20^FDNro NF:123456789^FS";
    $msg .="^FO180,220^A0A,40,20^FDSerie:000^FS";
    $msg .="^FO550,220^A0A,40,20^FD11/11/2014^FS";
    $msg .="^XZ";
	
    //GRAVA CONTEÚDO EM DIRETORIO TMP
    $fp = fopen("/tmp/".[qusuario].".txt", "wb");
    fwrite($fp, $msg);
    fclose($fp);

    //IMPRIME EM IMPRESSORA REMOTA
    exec("smbclient //servidor/ZDesigner -U root --pass 123456 -c \"print /tmp/".[qusuario].".txt; quit;\"");

Esse foi apenas o começo, mais adiante faremos isso também com os servidores Linux.

Quero agradecer mais uma vez por todos que dispuseram o seu tempo e me ajudaram aqui, muito obrigado amigos. Um grande abraço a todos!

Obrigado por compartilhar