PHP – Programando em PHP para impressoras não fiscais – uso local

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>&nbsp; </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”>&nbsp;</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:

http://desenvolvedoresdaruma.com.br/

Não trabalho mais com automação comercial. Abraços!

Anúncios
Esse post foi publicado em Programação em PHP. Bookmark o link permanente.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s