Hola que tal, me compre una impresora fiscal ibm 4610 1NR, viene en modo entrenamiento y con el manual con los comandos y un pequeño ejemplo en pseudocodigo:
Estoy tratando de imprimir algo en java pereo no puedo:
pesudocodigo:
Código:
Apertura_de_Puerto
OpenCom_n(19200,8,n,1)
Control_de_Flujo(DSR)
Fin_Apertura_de_Puerto
Envia_Comando(String comando)
String respuesta=””
Char byte=0x00
//se construye comando agregándole inicio frame(87H) y fin frame(88H)
comando=0x87+comando+0x88
// se envía al puerto RS232 byte a byte
Para i=1 hasta largo(comando)
EscribePuerto(mid(comando,i,1))
Fin Para
// se lee desde el puerto RS232 byte a byte
Haga_Mientras(byte <> 0x0D and byte <> 0x0C)
{
byte = LeePuerto() // lee byte a byte
Si (byte==0x0A) Entonces
Break; //ACK(el comando fue satisfactorio)
Sino
respuesta=respuesta+byte //se concatena hasta que llega el fin
0DH(errores,comando 35 y 48) o 0CH(comando 43 en modo descarga)
Fin_Si
}
Fin_Haga_Mientras
Fin_Envia_Comando
Inicio_de_Boleta
String comando=””
comando=”000”
Envia_Comando(comando)
Fin_Inicio_de_Boleta
Java:
Código:
package impresora;
import java.util.List;
import giovynet.nativelink.SerialPort;
import giovynet.serial.Baud;
import giovynet.serial.Com;
import giovynet.serial.Parameters;
public class Impresora {
/**
* www.giovynet.com
* @param args
*/
public static void main(String[] args)
{
try {
SerialPort serialPort = new SerialPort();
List<String> portsFree;
portsFree = serialPort.getFreeSerialPort();
/**** If there are free ports, use the first found. ****/
if(portsFree!=null&&portsFree.size()>0)
{
for (String free : portsFree)
System.out.println("Free port: "+free);
/****Open the port.****/
Parameters parameters = new Parameters();
parameters.setPort("COM1");
parameters.setBaudRate(Baud._19200);
System.out.println("Open port: COM1");
Com com = new Com(parameters);
/****Send data.****/
System.out.println("Send Data Port: COM1");
//Inicio boleta, imprimir un logo
String comando="ç001ê";
for(int i=0; i<comando.toCharArray().length; i++)
{
try{
com.sendSingleData(comando.toCharArray()[i]);
}catch(Exception e){
System.out.println("Error=>"+e.getMessage());
}
}
String respuesta=new String();
byte bytes=0x00;
while(bytes!=0x0D && bytes!=0x0C)
{
bytes=(byte)com.receiveSingleChar();
if(bytes==0x0A)
break;
else
respuesta+=bytes;
Thread.currentThread();
Thread.sleep(500);
}
System.out.println("response: "+respuesta);
/****Close the port.****/
System.out.println("Close Port: COM1");
com.close();
}
else{
System.out.println("No Free ports!!!");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
el código anterior no imprime nada y la impresora tampoco retorna nada, solo devuelve ceros...
La descripción del comando según el manual:
Línea Inicio Boleta ( tipo 00 )
Posición dentro del frame Contenido
ç ( Caracter no imprimible 0x87)
0 ( primer caracter del tipo, no se imprime )
0 ( segundo caracter del tipo, no se imprime )
g
ê ( Caracter no imprimible 0x88)
Notas:
g: indicador de impresión de gráfico (logo) precargado ( 1 byte )
. 0 no imprime
. 1 sí imprime
El gráfico será impreso siempre con 200 DPI ( modo normal )
La IF imprime el encabezado con los datos proporcionados en el comando de seteo de encabezado de
tienda y con el rut y razón social proporcionados en el proceso de inicialización de la IF.