Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa noite caros!
Como eu faço para imprimir um pedido em uma bematech MP20-MI que só aceita texto do tipo enviado pelo bloco de notas. O sistema trabalha em PHP e MySQL e o que é enviado diretamente do navegador não é reconhecido pela impressora como texto.
Alguma sugestão ?
Pois é, acho que é a melhor e a solução. Vou pesquisar aqui como abrir e escrever em um bloco de notas com comandos do php. Se tiverem algo manda ai pra me ajudar =)
Abaixo vou citar uns Links que pode lhe ajudar com manipulação de Arquivos (TXT) em PHP:
http://www.oficinadanet.com.br/artigo/976/manipulacao_de_arquivos_no_php
http://maurocesarsl.wordpress.com/2008/04/09/criacao-de-arquivo-txt-com-php/
http://www.concatenar.com.br/php/php-como-manipular-arquivos-texto.html
Espero ter Ajudado!
O arquivo está sendo gerado, aliás muito obrigado pelos links jgustavo99 =)
Agora como eu faço pra abrir esse arquivo na tela. Deu pra sacar ? Eu gero o arquivo com os comandos
/*Função fopen usada para abrir arquivo, ou seja, joga-lo na memória do servidor, neste caso o arquivo ainda não existe.
o “w” quer dizer write, que o arquivo pode ser escrito */
$arquivo = fopen(“arquivo.txt”, “w”);
$texto = “Olá Mundo!!!”;Terminou de gerar preciso que ele seja aberto na cara do cliente dentro do bloco de notas pra ele só clicar em imprimir
Você não consegue abrir na tela do Navegador, e clicar em emprimir? Precisa mesmo ser aberto no Bloco de Notas?
Sabe qual o problema, parece que qualquer texto impresso diretamente do navegador, não é um tipo de texto reconhecido por essas impressoras, logo ela imprime em branco.
O que eu preciso é transformar esse texto, no navegador, em texto do mesmo tipo daquele que é gerado no bloco de notas. Porque essa Bematech só imprime aparentemente texto puro.
Já me explicaram, mas não lembro. Se puderem me dizer novamente a diferença do texto do bloco de notas pro texto que é gerado para impressão no navegador, seria bem útil. Já que mesmo abrindo o próprio arquivo .txt gerado pelo navegador, esse parece transformá-lo em outro tipo de texto desconhecido pela impressora em questão.
Você pode baixar a string diretamente sem criar um arquivo para tal.
<?php
$filename = 'file.txt';
$string = 'Download !!!';
header( 'Content-Type: application/force-download' );
header( 'Content-type: text/plain' );
header( sprintf( 'Content-Length: %u', strlen( $string ) ) );
header( sprintf( 'Content-disposition: attachment; filename="%s"', $filename ) );
header( 'Pragma: no-cache' );
header( 'Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0' );
header( 'Expires: 0' );
print( $string );
flush( );
exit;
Depois basta abrir o arquivo e mandar imprimir.
O que ? Rs... O que essa função ae retorna ??
<?php
print( $string );
flush( );
exit;
?>
Esse script já retorna o arquivo salvo no arquivo.txt. O problema é que a impressão n funciona. Porque a impressora é maluca assim msm. Agora se eu conseguir após gerar esse arquivo fazer o windows abrir o arquivo.txt na tela do computador, tipo na cara, tipo um span insejavel que vem sem vc pedir, mas é assim que tem que ser pq ele vai imprimir direto.
Ai sim seria bem o que estou tentando fazer. O script já funciona, só tenho que forçar o windos a abrir em primeiro plano o arquivo.txt. Teria como isso com PHP estruturado e javascript ?
Teria como setar os formatos também ;oxps .doc, etc...
Um cenário ainda mais interessante seria, carregar uma página em um link único na url, com ou sem subdomínio e ali dentro escrever o arquivo .txt personalizado, por ainda tenho que formatar os campos dentro da comanda de 0,65mm rs... ai a forma de impressão poderia ser solicitada ao windows pelo prompt, talvez. Por que assim o navegador fica de fora do trabalho final. Saca!
O problema de forçar o download, é que, o cliente terá obrigatoriamente que clicar confirmando o download caso o navegador não esteja configurado para fazer automaticamente. Logo em seguida, verificar o fim do download para então executar o comando correto com exec.
Já tentou isso :seta: Utilizando Impressora Não-Fiscal Bematech em Aplicações WEB (PHP)
Nossa cara, finalmente um tuto sobre a impressora certa rsrsrsrs Vlw Carlos!
Pra finalizar. Como utilizo essa classe ? É nativa do PHP, tem que baixar e incluir no script ou o que ?
Sim, COM ela é uma das extensões somente para Windows
O link que te passei responde todas as sua dúvidas.
O link é ótimo. Onde acho esse GUID ? rs
Vá no menu iniciar do windows e digite regedit e de enter. Você irá abrir o editor de registro do windows.
:seta: http://technet.microsoft.com/pt-br/library/cc758067(v=ws.10).aspx.aspx)
Vlw achei aqui!
Mas ele diz não encontrar essa classe. Ela já existe no windows ? Não entendi bem onde ela é criada
Você já verificou em [inline][HKEY_CLASSES_ROOT] >> BemaPrinterXControl1.BemaPrinter >> Clsid (Veja o valor da chave)l[/inline]
Sim. Olha só como aparece lá
[[/size]HKEY_CLASSES_ROOT[/size]][/size] [/size]>>[/size] [/size]BemaPrinterXControl1[/size].[/size]BemaPrinter[/size] [/size]>>[/size] [/size]Clsid[/size] (310DBDAC-85FF-4008-82A8-E22A09F9460B)[/size]
Estou imprimindo à partir de uma rede, preciso fazer o msm procedimento para os computadores que irão utilizar essa impressora ou ele consegue recuperar os registros pela própria rede ?
Só dando um UP! Continuo agarrado no problema de cima
Estou seguindo esse tutorial aqui enviado pelo Carlos Coelho Utilizando Impressora Não-Fiscal Bematech em Aplicações WEB (PHP)
Já verifiquei o GUID e a numeração está correta: 310DBDAC-85FF-4008-82A8-E22A09F9460B
A impressora imprime a página teste e qualquer envio à partir de um editor de textos. Porém via WEB não.
A função javascript que estou usando e que retorna um erro de execução, qualquer uma retorna esse erro, como se estivesse faltando alguma coisa
function Inicializa(){
document.FormPrinter.EdTxtImpressao.value = "Digite seu texto aqui.";
}
function Finaliza(){
BemaPrinter1.FechaPorta();
}
function ImprimeTextoFormatado() {
BemaPrinter1.FormataTX( document.FormPrinter.EdTxtImpressao.value );
}
E o código php que também não funciona, ambos são os mesmo utilizados no tutorial
<?php
//carrega o componente pelo GUID (pelo nome não funcionou)
$bema = new COM("{310DBDAC-85FF-4008-82A8-E22A09F9460B}");
//abre porta
$init = $bema->IniciaPorta("LPT1");
//verifica erro
if ($init <= 0) {
echo "erro!";
exit;
}
//imprime texto com formatação em cada linha
//o espaçamento deve ser ajustado a depender da impressora
$bema->FormataTX("--------------------------------- \n", 2, 0 , 0, 0, 0);
$bema->FormataTX("Bar do Robson \n", 3, 1 , 0, 1, 0);
$bema->FormataTX(" Sistema de Bar e Restaurante \n", 2, 0 , 0, 0, 0);
$bema->FormataTX("--------------------------------- \n", 2, 0 , 0, 0, 0);
$bema->FormataTX("Mesa: 35 \n", 2, 0 , 0, 0, 0);
$bema->FormataTX("--------------------------------- \n", 2, 0 , 0, 0, 0);
$bema->FormataTX("05 - Cerveja Skol2,00 10,00 \n", 2, 0 , 0, 0, 0);
$bema->FormataTX("01 - Picanha 15,00 15,00 \n", 2, 0 , 0, 0, 0);
$bema->FormataTX("02 - Batata Frita 4,008,00 \n", 2, 0 , 0, 0, 0);
$bema->FormataTX(" ------ \n", 2, 0 , 0, 0, 0);
$bema->FormataTX(" Total 33,00 \n", 2, 0 , 0, 0, 0);
$bema->FormataTX("--------------------------------- \n", 2, 0 , 0, 0, 0);
$bema->FormataTX("BarRestaurante v1.0 01/05/2007 \n", 1, 0 , 1, 0, 0);
$bema->FormataTX("--------------------------------- \n", 2, 0 , 0, 0, 0);
//fecha a porta de impressao
$bema->FechaPorta();
?>
A princípio essas são as duas formas de enviar comandos à impressora, porém nenhuma delas está funcionando. HELP!
Caro desenvolvedor,
O código em questão é para imprimir em uma impressora conectada ao servidor onde roda a sua aplicação PHP.
Esta é uma realidade?
Pelo que você informa em seus testes, você quer que o cliente da aplicação (ou seja, o navegador), faça a impressão.
Correto?
Veja se isso ajuda:
http://partners.bematech.com.br/2013/05/edicao-143-comunicando-com-a-mp-4200-th-via-web/
Você pode tentar criar pelo PHP um arquivo TXT com os suas strings, e depois mostrar na tela. Derrepente a impressora aceite.