Impressao de cheque via porta serial

0 respostas
gilcwb

Um cliente comprou uma impressora a CheckPrinter da MennoEquipamentos,
Pelo que eu entendi, tenho que a partir do programa deles feito em java desenvolver o meu próprio programa. Vou colocar o email deles abaixo.
O que eu gostaria de saber é se alguém já fez esta personalização?
Se o programa deles tivessem uma importação de dados via xml, mas não tem, a idéia é fazer isso.
---- email ---------
Segue manual solicitado.

Conforme solicitado, estou enviando em anexo manual e arquivo prn, contendo o formato das informações que a impressora recebe.

Como comentei, a impressora é para comunicação direta através de uma porta serial virtual.

Não temos API ou DLL para auxilio no desenvolvimento, mas passo abaixo um pequeno tutorial de como desenvolver a parte de impressão utilizando java.



Não foi testado o programa abaixo, apenas foi montando com código que foi usado em nosso aplicativo de impressão de cheques, pode ser que precise de uma revisão, mas qualquer duvida estamos a disposição.

==============================================

Biblioteca Java para Serial: jssc.jar

https://code.google.com/archive/p/java-simple-serial-connector/


import jssc.SerialPort;

import jssc.SerialPortException;

import jssc.SerialPortList;

import jssc.SerialPortEvent;

import jssc.SerialPortEventListener;

public class Deskcheck

{

public static void main(String[] args) throws Exception

{

System.out.println(“Entrou no Main.”);

try

{

     SerialPort serialPort;

     PortNames = new Vector<String>();



     String[] portNames = SerialPortList.getPortNames();

     PortNames.clear();       

     for(int i = 0; i < portNames.length; i++){

           PortNames.add( portNames[i] );

           }

serialPort = new SerialPort( PortNames.toArray()[0].toString() );

serialPort.openPort(); //Open serial port

serialPort.setParams( //Set params. Also serialPort.setParams(9600, 8, 1, 0);

SerialPort.BAUDRATE_9600  

                       SerialPort.DATABITS_8,

                       SerialPort.STOPBITS_1,

                       SerialPort.PARITY_NONE); 



     byte btCmds[] = new byte[200];         

     int szCmds, wdCnt;

     String stValue;

//Envia pacote de dados

btCmds[0] = 0x1B; 

     btCmds[1] = '?';     //Pede Status         

     szCmds = 2;       //Comando de 2 Bytes



      for(int Count = 0;Count <  szCmds; Count ++)

           serialPort.writeByte( btCmds[Count]);    //Preferi usar esse modo.

      //serialPort.writeBytes( btCmds);   //Outro modo

//Aguarda algum retorno

int Idx=0, wdTmo, pmTimeOut = 2000;    //Timeout em miliseg

      byte[] ptData  = new byte[10];

      byte[] Ret = new byte[2];

       

      wdTmo = pmTimeOut;

      while( wdTmo > 0 )

           {

           while( serialPort.getInputBufferBytesCount() > 0 )         

                 {

                 wdTmo = pmTimeOut;

                 Ret = serialPort.readBytes(1);

                 ptData[Idx] = Ret[0];                

                 Idx = Idx + 1;

                 }             

          TimeUnit.MILLISECONDS.sleep(100);

          wdTmo = wdTmo - 100;

          }



       System.out.println("Dados Recebidos: "+ptData);

//Monta comando de um cheque completo

stValue = "001";      //Banco

        btCmds[1] = (byte)0xA2;    

        btCmds[0] = 0x1B;    

        for(wdCnt=0;wdCnt < stValue.length() ;wdCnt++ )

           { btCmds[wdCnt+2] = stValue.getBytes()[wdCnt]; }

        btCmds[wdCnt+2] = 0x0D;

        szCmds = wdCnt+3;     

        for(int Count = 0;Count <  szCmds; Count ++)   //Envia Dados

           serialPort.writeByte(btCmds[Count]);

        

        stValue = "123456,00"; //Valor

        obReg.Valor = stValue;

        btCmds[1] = (byte)0xA3;    

        btCmds[0] = 0x1B;    

        for(wdCnt=0;wdCnt < stValue.length() ;wdCnt++ )

           { btCmds[wdCnt+2] = stValue.getBytes()[wdCnt]; }

        btCmds[wdCnt+2] = 0x0D;    

        szCmds = wdCnt+3;     

        for(int Count = 0;Count <  szCmds; Count ++)   //Envia Dados

           serialPort.writeByte(btCmds[Count]);            



        stValue = "01/01/2018";  //Data

        btCmds[1] = (byte)0xA4;    

        btCmds[0] = 0x1B;    

        for(wdCnt=0;wdCnt < stValue.length() ;wdCnt++ )

           { btCmds[wdCnt+2] = stValue.getBytes()[wdCnt]; }

        btCmds[wdCnt+2] = 0x0D;

        szCmds = wdCnt+3;     

        for(int Count = 0;Count <  szCmds; Count ++)   //Envia Dados

           serialPort.writeByte(btCmds[Count]);

        

        stValue = "ERECHIM";  //Local

        if( stValue.length() > 1 ) {               

           btCmds[1] = (byte)0xA1;    

           btCmds[0] = 0x1B;    

           for(wdCnt=0;wdCnt < stValue.length() ;wdCnt++ )

              { btCmds[wdCnt+2] = stValue.getBytes()[wdCnt]; }

           btCmds[wdCnt+2] = 0x0D;    

           szCmds = wdCnt+3;     

           for(int Count = 0;Count <  szCmds; Count ++)   //Envia Dados

                serialPort.writeByte(btCmds[Count]);               

           }

        

        stValue = "FAVORECIDO";  //Favorecido

        if( stValue.length() > 1 ) {

           btCmds[1] = (byte)0xA0;    

           btCmds[0] = 0x1B;    

           for(wdCnt=0;wdCnt < stValue.length() ;wdCnt++ )

              { btCmds[wdCnt+2] = stValue.getBytes()[wdCnt]; }

           btCmds[wdCnt+2] = 0x0D;    

           szCmds = wdCnt+3;     

           for(int Count = 0;Count <  szCmds; Count ++)   //Envia Dados

                serialPort.writeByte(btCmds[Count]);

           }

        

        btCmds[1] = (byte)0xB0;       //Imprime      

        btCmds[0] = 0x1B;    

        btCmds[2] = 0x0D;

        szCmds = 3;     

        for(int Count = 0;Count <  szCmds; Count ++)   //Envia Dados

           serialPort.writeByte(btCmds[Count]); 



       serialPort.closePort();

       }

catch (SerialPortException ex)  { System.out.println(ex); }

System.out.println(“Encerrou o Main.”);

System.exit(0);

}

}

Segue abaixo link para download do nosso aplicativo para impressão de cheques:

https://www.dropbox.com/s/exwk0pix31qim8o/Software%20Deskcheck%20REV%202C.zip?dl=0

Instale o aplicativo e na pasta de instalação estará os driver da USB.

Segue link de um vídeo para auxílio na instalação em caso de dúvidas:

https://www.youtube.com/watch?v=LRnECEG2jPo&t=217s

Segue link de todos os vídeos de utilização e configuração da impressora:

https://www.youtube.com/channel/UCSDKG9P-vUgVAvMrowJtbVg/videos

Lembrando que para a instalação do aplicativo de impressão de cheques é necessário ter o software JAVA instalado no computador.

Qualquer dúvida mantenham contato.

----------- fim do email -------------

Criado 7 de maio de 2019
Respostas 0
Participantes 1