Suporte ao Desenvolvedor - Impressoras Bematech e PHP
---
Utilizando Impressora Não-Fiscal Bematech em Aplicações WEB (PHP)
Robson Tenório (01/05/2007)
http://robsontenorio.net
---
======================================
Nota
======================================
Este guia é para MINI-IMPRESSORAS BEMATECH NÃO-FISCAL.
Impressora testada foi "MP-20 MI".
O Sistema Operacional é Windows XP, e linguagem de programação utilizada foi PHP(5.2).
Este exemplo, utiliza o componente "BemaMP32.OCX" para comunicação com a "MP2032.DLL" em aplicações WEB.
=====================================
Motivação
=====================================
É possível uma aplicação Web imprimir dados diretamente em impressora não-fiscal (ou fiscal) ?
Uma aplicação Web para Controle de Mesas em Restaurantes desenvolvida em PHP e instalada ná máquina do cliente necessitava que a conta da mesa fosse impressa diretamente em uma impressora. O cliente determinou que a impressora a ser utilizada seria a supracitada. Como o PHP possui suporte a utilização componentes pela sua classe "COM", mantive as esperanças e iniciei a minha pesquisa focando na possibilidade de utilizar alguma DLL e Driver fornecido pelo fabricante.
======================================
Visão Geral
======================================
# É necessário registrar o driver da impressora "BemaIO.sys"
# É necessário registrar o componente "BemaMP32.OCX"
# A "MP2032.DLL" é necessária.
# Para usar no PHP, vamos carregar o componente "BemaMP32.OCX" pelo GUID
======================================
Procedimentos iniciais
======================================
# Baixar pacote "bemaMP32.zip"
Disponível em www.bematech.com.br (Suporte / Mini-Impressoras não-fiscal / Windows). Dentro existem 2 helps. Eles causam uma certa confusão. Na secção seguinte é explicado o que realmente é necessário ser feito.
======================================
Registrando Driver e Componente
======================================
A) Registrando o driver da impressora
--> Copie o arquivo "BemaIO.REG" e "BemaIO.SYS" para "c:\windows\system32\drivers"
--> Execute "BemaIO.REG" para registrar o driver
B) Registrando o componente "BemaMP32.OCX"
--> Copie "BemaMP32.OCX", "MP2032.DLL", "REGISTRAR.BAT" para "c:\windows\system32"
--> Execute o arquivo " Registrar.BAT", para registrar o componente
C) Pronto! Reinicie o computador.
======================================
Como Funciona
======================================
Ao registrar o componente "BemaMP32.OCX" este pode ser carregado pelo PHP, atraves de sua classe "COM". Dessa forma, o PHP poderá enviar comandos à impressora (utilizando funções implementadas em "MP2032.DLL"), que por sua vez depende do driver da impressora estar registrado.
Isso é possível a qualquer linguagem que suporte a utilização de componentes (exemplo a seguir).
======================================
Usando Componente no PHP
======================================
A) Procure o GUID no registro do Windows
Geralmente é {310DBDAC-85FF-4008-82A8-E22A09F9460B}
... Ou ...
Verifique o GUID pelo Caminho no registro :
[HKEY_CLASSES_ROOT] >> BemaPrinterXControl1.BemaPrinter >> Clsid (Veja o valor da chave)
B) Use a classe "COM" do PHP para carregar o componente e ter acesso as suas funções.
Exemplo:
//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 Skol 2,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,00 8,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();
?>
Mais exemplo de chamadas de função estão no arquivo ImpNaoFiscal.HTM . São exemplos de chamadas com declaração do ActiveX, que são ativadas pelo JavaScript. Entretanto quando carregamos o componente pelo PHP, podemos utilizar as mesmas assinaturas de funções para utilizar a impressora. Verifique os HELPS que vem no pacote para referência sobre as funções suportadas pela impressora.
======================================Conclusões
======================================
Este guia se aplica ao Windows, para Linux seria semelhante, com a diferença de ter os drivers/componentes necessários. Infelizmente até a presente data não está disponível o pacote Linux para MINI-IMPRESSORAS BEMATECH NÃO-FISCAL.
Para este guia usei como exemplo o PHP, qualquer outra linguagem que tem suporte a utilização de componentes, pode-se aplicar este guia.
