Pessoal,
Boa tarde!
Agora vou colocar aqui um exemplo em PHP para impressão usando impressoras não fiscais. Neste caso usei os comandos para impressoras do tipo DR600 e DR700 da Daruma, mas por se tratar de comandos de comunicação direta, você também pode usar este exemplo para outras impressoras, bastando apenas substituir os comandos de formatação usados pelos que você necessitar.
Neste exemplo começo a usar O.O. (Orientação à Objetos). Caso não sabia como funciona, pode procurar mais materiais na internet, mas acredito que o exemplo está bem explicado.
Começo com a página form_envia_txt.htm, que tem o molde para enviar os parâmetros de configuração para a dual_envia_txt.php e este por sua vez faz um include em txt.class.php (que é a nossa página de classes no php).
<!—form_envia_txt.htm–>
<html>
<head>
<title>Daruma – Exemplo em PHP de envio de Texto – Comunicação Direta com a Porta Serial</title>
<meta http-equiv=”Content-Type” content=”text/html; charset=iso-8859-1″>
</head>
<body bgcolor=”#FFFFFF” link=”#0066FF” vlink=”#6666CC” alink=”#330066″>
<form name=”form_envia_sms” method=”post” action=”dual_envia_txt.php”>
<table width=”809″ height=”237″ border=”2″ align=”center” cellpadding=”2″ cellspacing=”5″ bordercolor=”#006600″ bgcolor=”#FFFFFF”>
<tr>
<td width=”244″ height=”27″ bgcolor=”#B9ECC0″><font size=”3″ face=”Verdana, Arial, Helvetica, sans-serif”>Selecionar
Porta:</font></td>
<td width=”319″ bgcolor=”#B9ECC0″><font size=”3″ face=”Verdana, Arial, Helvetica, sans-serif”>Digitar
Texto:</font></td>
<td width=”204″ bgcolor=”#B9ECC0″><font size=”3″ face=”Verdana, Arial, Helvetica, sans-serif”>Selecione
Modo:</font></td>
</tr>
<tr>
<td valign=”top” bordercolor=”#FFFFFF”> <p>
<select name=”set_porta” size=”1″>
<option value=”0″> </option>
<option value=”com1″ selected>COM1</option>
<option value=”com2″>COM2</option>
<option value=”com3″>COM3</option>
<option value=”com4″>COM4</option>
<option value=”com5″>COM5</option>
<option value=”com6″>COM6</option>
<option value=”com7″>COM7</option>
<option value=”com8″>COM8</option>
<option value=”com9″>COM9</option>
<option value=”com10″>COM10</option>
</select>
<p> </td>
<td rowspan=”3″ align=”left” valign=”top” bordercolor=”#FFFFFF”> <textarea cols=”37″ name=”texto” rows=”8″ wrap=”VIRTUAL”>Teste</textarea>
</td>
<td rowspan=”3″ align=”left” valign=”top” bordercolor=”#FFFFFF”> <font size=”2″ face=”Verdana, Arial, Helvetica, sans-serif”>
<input type=”radio” name=”modo” value=”negrito”>
<strong>Negrito </strong><br>
<input type=”radio” name=”modo” value=”sublinhado”>
<u>Sublinhado</u> <br>
<input type=”radio” name=”modo” value=”condensado”>
<font size=”1″>Condensado</font> <br>
<input type=”radio” name=”modo” value=”expandido”>
<font size=”3″>Expandido</font> <br>
<input type=”radio” name=”modo” value=”dupla_altura”>
<font size=”4″ face=”Tahoma, Arial, Courier”>Dupla Altura</font> <br>
<input name=”modo” type=”radio” value=”normal” checked>
Sem Formatação </font><br> </td>
</tr>
<tr>
<td valign=”top” bgcolor=”#B9ECC0″><font size=”3″ face=”Verdana, Arial, Helvetica, sans-serif”>Selecionar
Velocidade:</font></td>
</tr>
<tr>
<td align=”left” valign=”top” bordercolor=”#FFFFFF”> <p>
<select name=”set_velocidade” size=”1″>
<option value=”0″> </option>
<option value=”9600″ selected>9600</option>
<option value=”38400″>38400</option>
<option value=”115200″>115200</option>
</select>
</td>
</tr>
<tr>
<td align=”left” valign=”top” bordercolor=”#FFFFFF”> </td>
<td bordercolor=”#FFFFFF”><input name=”reset” type=”reset” value=” Limpar “></td>
<td bordercolor=”#FFFFFF”><input name=”dual_envia_txt” type=”submit” value=” Enviar Texto “></td>
</tr>
</table>
</form>
</body>
</html>
Após selecionadas as opções, o form chamará a página dual_envia_txt.php. Ela é a responsável por configurar a porta serial, para posterior utilização, e de mandar a impressão para a porta COM escolhida pelo usuário. Vamos ver como ela está:
<?php
//dual_envia_txt.php
include “txt.class.php”;
//recebo as informações e coloco elas em variáveis que vou utilizar:
$porta = $_POST[‘set_porta’];
$velocidade = $_POST[‘set_velocidade’];
$texto = $_POST[‘texto’];
$modo = $_POST[‘modo’];
//Crio um objeto da classe Envia_Txt
$txt = new Txt();
$porta_ok = $txt->seta_porta($porta, $velocidade);
usleep(20);
/* Declarando as Variáveis para comandos diretos: */
$Ni= chr(27) .chr(69);
$Nf= chr(27) .chr(70);
$Dai= chr(27) .chr(119) .’1′;
$Daf= chr(27) .chr(119) .’0′;
$Ci= chr(15);
$Cf= chr(18);
$Ei= chr(14);
$Ef= chr(20);
$Si= chr(27) .chr(45) .’1′;
$Sf= chr(27) .chr(45) .’0′;
/*Negrito*/
if ($modo == “negrito”)
$texto = $Ni . $texto . $Nf;
/*Sublinhado*/
if ( $modo == “sublinhado” )
$texto = $Si . $texto . $Sf;
/*Condensado*/
if ( $modo == “condensado” )
$texto = $Ci . $texto . $Cf;
/*Expandido*/
if ( $modo == “expandido” )
$texto = $Ei . $texto . $Ef;
/*Dupla Altura*/
if ( $modo == “dupla_altura” )
$texto = $Dai . $texto . $Daf;
// Para o modo normal, vai imprimir o texto que recebeu, sem nenhuma alteração nele.
$retorno = 0;
$retorno = $txt->envia_txt($texto);
usleep(2000);
echo “<br> Verifique o Texto Impresso!!!<br>”;
echo “<a href=’form_envia_txt.htm’>Voltar</a>”
?>
E agora temos a página txt.class.php
<?php
//txt.class.php
class Txt{
//construtor
function Txt(){
$porta = “com1”;
$resposta = “”;
exec(‘mode ‘. $porta .’:9600,n,8,1′); //executa a configuração de velocidade na porta,
}
function seta_porta($porta_recebida, $velocidade_recebida) {
global $porta;
global $velocidade;
$porta = $porta_recebida;
$velocidade = $velocidade_recebida;
//sem uma porta, ou velocidade configurada:
if ($porta_recebida == null || $velocidade_recebida == null)
{
exec(‘mode com1:9600,n,8,1’); //executa a configuração de velocidade na porta setada no construtor
}
//com uma porta e velocidade setadas para ser configurada:
else
{
exec(‘mode ‘. $porta .’:’. $velocidade .’,n,8,1′); //executa a configuração de velocidade na porta
}
}
//função genérica que executa comandos de envio de texto
function envia_txt($comando) {
global $porta;
$nome_arq = ‘envia_txt.txt’;
$fp = fopen($nome_arq,’w+’); // abre o arquivo que receberá o comando
fwrite($fp,$comando); //escrevo o comando que será enviando à impressora
fclose($fp); //fecho o arquivo
exec(‘type ‘. $nome_arq .’ > ‘. $porta);
}
}
?>
Espero ter clareado um pouco com esta idéia. Se você pegar o manual de comandos diretos no site (www.desenvolvedoresdaruma.com.br) vai ver mais opções para fazer, e sugiro que implemente seguindo esta lógica.
Este é apenas um exemplo que fiz de como se comunicar com impressoras não fiscais via comandos de comunicação direta. Baseado nele você pode claramente usar para comandos de impressora fiscal também, de igual forma.
*** Dúvidas, por favor entre em contato direto com a Daruma:
Não trabalho mais com automação comercial. Abraços!