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