php_printer

Olá Pessoal,
Desculpa ta voltando ao mesmo assunto. Mas ainda não consigo imprimir diretamente na Porta ( utilizo impressora Terminal USB ) por dentro do scriptcase.
Consigo executando por fora, mas qualquer código que coloco num blank não funciona.
Por exemplo esse codigo:

<?php $mesa = $_POST["mesa"]; $ped_comidas = $_POST["ped_comidas"]; $ped_sabor = $_POST["sabor_comidas"]; $qnt_comidas = $_POST["qnt_comidas"]; $valor_unit_comidas="R$ 30,00"; $sub_total="R$30,00"; echo "$mesa

"; echo "$ped_comidas
"; echo "$ped_sabor
"; echo "$qnt_comidas

"; $imprime = " Mesa: $mesa\n\n Comidas\n\n Pedido(s):\n $ped_comidas\n Sabor: $ped_sabor\n Qnt: $qnt_comidas\n Valor: $valor_unit_comidas\n Sub-Total: $sub_total"; $handle = printer_open(); // abri conexao com a impressora padrão printer_write($handle, $imprime); // enviou para a impressora o texto printer_close($handle); // fechou a conexao com a impressora ?>

criei um arquivo qualquer.php e executo e funciona ( joga para impressora na mesma hora)
Dai quando copio esse código para dentro do blank, não funciona:
Segue o erro:
Fatal error: Uncaught Error: Call to undefined function printer_open() in C:\Program Files\NetMake\v9\wwwroot\scriptcase\app\Lavanderia\impressora_direto\index.php:1438 Stack trace: #0 C:\Program Files\NetMake\v9\wwwroot\scriptcase\app\Lavanderia\impressora_direto\index.php(1864): impressora_direto_apl->controle() #1 {main} thrown in C:\Program Files\NetMake\v9\wwwroot\scriptcase\app\Lavanderia\impressora_direto\index.php on line 1438

Agradeço antecipadamente a ajuda.

Paulo José

Ele esta reclamando Call to undefined function printer_open()
O módulo printer esta carregado no php.ini?

E aí amigão… deixou de lado?

Eu quis ajudar responde anteriormente.
Sinceramente esta extensão é tão velha. Do tempo do php 4.

o manual http://ir2.php.net/manual/pt_BR/book.printer.php já tem o aviso:
"Estas funções somente estão disponíveis no Windows 9.x, ME, NT4 e 2000. Elas foram adicionadas no PHP 4.0.4. "

Sem falar que no próprio manual já fala:
"Esta extensão » PECL nãoo está embutida no PHP.
Usuários Windows precisa habilitar a php_printer.dll no php.ini para usar estas funções. Uma DLL para esta extenção PECL esta atualmente indisponível. Veja também a seção compilando no Windows section. "

Você vai na PECL nem tem mais para baixar. https://pecl.php.net/package/printer

No SVN do php nem se fala o tempo que não é atualizada: http://svn.php.net/viewvc/pecl/printer/

É um milagre quando esta extensão ainda dá sinais de vida no Windows mais novo.
Nem sei porque ainda compilam isto com o php para Windows.
Olha pode até funcionar. O problema é: quer investir em algo que ninguém nem dá mais manutenção?

Olá Alexandre
Realmente não vale a pena investir em uma função que não esta tendo atualização.
Sugestão (exemplo) de algo que seja funcional para as atuais versões ??
Pra mim o importante é que funcione a impressão direta

Agradeço a ajuda e acredito que servirá para muitos também

Grato
Paulo José
Click informática

Mapeia no servidor e imprime local no servidor.
Irá sair na impressora mapeada.
veja que hoje contamos até com impressora que aceitam impressão através da internet.
Neste tópico tem sugestões que dão certo e em outros aqui no fórum também .

Estou tentando com esse codigo:
$mesa = “01”;
$ped_comidas = “carnes todas”;
$ped_sabor = “especial”;
$qnt_comidas = “todas”;

$valor_unit_comidas=“R$ 30,00”;
$sub_total=“R$30,00”;

$local_file = “C:\Users\CMD\Desktop\imprimir.txt”; // Definimos o local para salvar o arquivo de texto

$escreve = " Mesa: $mesa\n\n Comidas\n\n Pedido(s):\n $ped_comidas\n Sabor: $ped_sabor\n Qnt: $qnt_comidas\n Valor: $valor_unit_comidas\n Sub-Total: $sub_total\n\n\n\n\n\n\n\n\n\n\n\ n "; // A variavel escreve será o que desejamos imprimir e escrever no arquivo de texto

$fp = fopen($local_file, “w+”); //utilizamos o operador w+ para criar o arquivo imprimir.txt, e APAGAR tudo que já exise nele, caso ele já exista.
$salva = fwrite($fp, $escreve);
fclose($fp);
// Agora que já temos o arquivo imprime.txt, no local indicado por $local_fil, basta mandar imprimir:

system(“copy” ."$local_file". “LPT1”);
//system(“copy $local_file LPT1”); // Esse funciona por fora

printf (“
O texto: “%s” está sendo impresso. Por favor, aguarde.”, $escreve);

Só não imprime quando esta dentro do scriptcase.

Agora quando executo por fora (usando easyphp)
system(“copy $local_file LPT1”); // Esse funciona por fora
ai funciona

Help!!!
Precisa de ajuda com isso.

Grato mais um vez.

$fp = fopen($local_file, “w+”); //utilizamos o operador w+ para criar o arquivo imprimir.txt, e APAGAR tudo que já exise nele, caso ele já exista.
$salva = fwrite($fp, $escreve);
fclose($fp);

já tentou:
$fp = fopen(“LPT1:”, “w+”);
$salva = fwrite($fp, $escreve);
fclose($fp);

Não funcionou!!!

Alguém tem algum exemplo prático.
Funcionando para imprimir direto na impressora?
Uso windows 7 64 bits, scriptcase 9.1
e uma impressora térmica imprimindo na porta LPT1 ( usando o comando net use )
quando mando por fora, seja pelo DOS ou um arquivos php, imprime, mas pode dentro do scriptcase não vai de jeito nenhum.
É necessário ativar alguma coisa no PHP utilizado pelo scriptcase?

Fiz mais um teste com esse código:

$_CR_LF = chr(13).chr(10);
$_texto=“esse e o texto a ser impresso”;
$_porta_prn = “LPT1:”;

$port = fopen($_porta_prn, ‘w’);
if(!$port) {
$port = fopen($_porta_prn, ‘r’);
if(!$port) {
echo “
Nao foi possivel abrir o arquivo: “.$port.” !”;
}
fclose($port);
$port = fopen($_porta_prn, ‘w’);
}

fwrite($port, $_texto);
fwrite($port, $_CR_LF);

//------------------------------------------------------------------------------------------------
// Fecha a impressão
fclose($port);

Funcionou perfeitamente fora do scriptcase.
Mas quando coloquei ele no blank
ola as mensagem que ele apresenta:

Atenção
fopen(LPT1:): failed to open stream: No such file or directory
Atenção
fopen(LPT1:): failed to open stream: No such file or directory

Nao foi possivel abrir o arquivo: !
Atenção
fclose() expects parameter 1 to be resource, boolean given
Atenção
fopen(LPT1:): failed to open stream: No such file or directory
Atenção
fwrite() expects parameter 1 to be resource, boolean given
Atenção
fwrite() expects parameter 1 to be resource, boolean given
Atenção
fclose() expects parameter 1 to be resource, boolean given

Paulo José
Click Informatica

Eu utilizo uma App xhabour no cliente que pega o clipboard e descarrega na porta da impressora.
Com javascript jogo o que quero imprimir no clipboard.

Haroldo,

Você disponibiliza essa solução?
Comercializa?

Grato

Paulo

Mais alguem tem alguma solução que esteja funcionando ?

Pode compartilhar conosco?

Eu uso direto, dessa forma a mais de 5 anos.

Eu só não uso a porta paralela (LPT) e sim as seriais (COM), mas a ideia é a mesma.

Jorge,

Finalmente consegui imprimir usando scriptcase.
Assim que deixar tudo funcionando, vou colocar o código e informações …
Mas a principio utilizei informações do video que você disponibilizou

Agradeço demais a ajuda de todos.

Paulo
Click Informatica

Sério??? Tô esperando então kkkkkkkkkkkkk
A forma que eu utilizo é o print do javascript… simples, gero a tela para imprimir…

Boa Noite,

Joelton, ainda nao disponibilizei pois estou quebrando a cabeça para conseguir imprimir os itens do pedido.

Peço novamente a ajuda do Jorge Popelnitski
Fiz a minha solução baseada totalmente no video que ele gentilmente disponibilizou no youtube,

Mas o meu problema é o seguinte:
Trecho do codigo em que estou com problema:

$comanda = array();
$comanda[0] =’’;
$comanda[1] =’’;
$comanda[2] =’’;
$comanda[3] =’’;

$check_sql = ‘select da tabela de itens… ‘;
sc_select(rs, $check_sql);
If (false =={rs}){
sc_error_message(’ Erro de acesso a comanda’);
} else {
while(!$rs->EOF) {

$comanda[0] = $rs->fields[0]; // nome do campo
$comanda[1} =[b] limpa_texto[/b](rs$->fields[1]); ( AQUI NESSE METODO  limpa_texto)
etc... até comanda[6};

$retorno = [b]comanda_print_linha($comanda)[/b];  ( AQUI NESSE METODO comanda_print_linha)
$_linha .= $negritoON . $retorno[0] . $negritoOFF;
if (!empty($retorno[1])) {
    $_linha .= ($retorno[1] . $CR_LF);
}
$_linha .= $CR_LF;
$rs->MoveNext();

}
$rs->Close();
}
fwrite($port, $_linha);

Não entendi esse 02 métodos que estão marcados ( Se puder explicar, fico grato ), mas a ultima questão que falta para eu concluir a impressão, seria exatamente imprimir os itens do pedido, só consigo exibir o primeiro…

Agradeço a ajuda.
Paulo José
Click Informatica
Garanhuns - PE

$comanda[1} = limpa_texto(rs$->fields[1]); ( AQUI NESSE METODO limpa_texto) etc... até comanda[6};

não seria $comanda[1] = …

O método limpa_texto troca letras acentuadas e o cedilha por caracteres simples, pois tem impressoras que interpretam-os como comandos, dai "bagunça"a impressão.

O comanda_print_linha é o método que monta a linha da comanda, com os itens. faz parte da regra do negocio. não precisa existir

Para imprimir teus itens vc deve montar a string $_linha com os dados do select