Desenvolvimento - PHP

Utilizando Impressora Não-Fiscal Bematech em Aplicações WEB (PHP)

Este guia relata a experiência do autor na utilização de mini-impressoras em sistemas comerciais. As informações contidas aqui expressam o seu ponto de vista e a solução encontrada na ocasião.

por Robson Tenório



Este guia relata a minha experiência na utilização de mini-impressoras em sistemas comerciais. As informações contidas aqui expressam o meu ponto de vista e a solução encontrada na ocasião. Qualquer correção/sugestão favor entrar em contato para que este texto possa ser atualizado e servir de referência para outras pessoas que estão desenvolvendo o mesmo tipo de trabalho.

======================================
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:

<?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();
?>

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.

======================================
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.

Robson Tenório

Robson Tenório