Foros del Web » Programación para mayores de 30 ;) » Java »

¿Cómo abrir cajón portamonedas en Java?

Estas en el tema de ¿Cómo abrir cajón portamonedas en Java? en el foro de Java en Foros del Web. Hoola, ya sé que hay unas 20 webs y foros que lo dicen por internet, pero ninguno es claro. El mas simple es el de ...
  #1 (permalink)  
Antiguo 02/11/2016, 14:32
 
Fecha de Ingreso: diciembre-2013
Mensajes: 16
Antigüedad: 10 años, 3 meses
Puntos: 1
Pregunta ¿Cómo abrir cajón portamonedas en Java?

Hoola, ya sé que hay unas 20 webs y foros que lo dicen por internet, pero ninguno es claro. El mas simple es el de
http://foro.chuidiang.com/java-j2se/metodo-para-abrir-cajon-portamonedas-en-java/

Pero no tengo las más minima idea de cómo un FileWriter le va a enviar eso a un puerto de windows.
Mi modelo de impresora es: Floureon zj-5890t. 'zj' creo que hace referncia a 'Zjiang'

http://keyhut.com/popopen4.htm
El código es (27,112,0,150,250) en decimal y (ESCp0û.) en ascii.
No sé si la codificación de mi proyecto java tiene que ver, o si tengo que pasar el código a bytes...En el manual no dice nada que me sirva, solo da el formato del código rango de valores y ala.
¿Alguien tiene alguna idea?
  #2 (permalink)  
Antiguo 03/11/2016, 05:18
Avatar de jc_moj  
Fecha de Ingreso: septiembre-2009
Ubicación: Andalucía
Mensajes: 137
Antigüedad: 14 años, 7 meses
Puntos: 12
Respuesta: ¿Cómo abrir cajón portamonedas en Java?

Hola

El cajón portamonedas se conecta a la impresora, al menos todos los que yo tengo, desconozco si los hay que se conectan directamente al ordenador.

Para abrir los que se conectan a la impresora tan solo hay que enviar una secuencia de bytes (la que indica el fabricante, aunque casi todas suelen usar la secuencia de escape de los modelos epson) a la impresora, tan sencillo como eso.

Desconozco cómo se hace en java, pues solo uso java para programar para Android, pero debe ser tan simple como imprimir un texto sencillo.

Un saludo
  #3 (permalink)  
Antiguo 03/11/2016, 11:40
 
Fecha de Ingreso: diciembre-2013
Mensajes: 16
Antigüedad: 10 años, 3 meses
Puntos: 1
Respuesta: ¿Cómo abrir cajón portamonedas en Java?

La impresora esta predeterminada, esto es el método que tengo y no funciona:
Código:
public void cashdrawerOpen() {

		String code1 = "27 112 0 150 250";
		String code = "ESCp0û.";
		 FileInputStream inputStream = null;
	        try {
	            inputStream = new FileInputStream(code1);
	              
	        } catch (FileNotFoundException e) {
	            e.printStackTrace();
	        }
	        if (inputStream == null) {
	            return;
	        }
	 
	        DocFlavor docFormat = DocFlavor.INPUT_STREAM.TEXT_PLAIN_US_ASCII;
	        Doc document = new SimpleDoc(inputStream, docFormat, null);
	 
	        PrintRequestAttributeSet attributeSet = new HashPrintRequestAttributeSet();
	 
	        PrintService defaultPrintService = PrintServiceLookup.lookupDefaultPrintService();
	 
	 
	        if (defaultPrintService != null) {
	            DocPrintJob printJob = defaultPrintService.createPrintJob();
	            try {
	                printJob.print(document, attributeSet);
	 
	            } catch (Exception e) {
	                e.printStackTrace();
	            }
	        } else {
	            System.err.println("No existen impresoras instaladas");
	        }
	 
	        try {
				inputStream.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
	    }
  #4 (permalink)  
Antiguo 03/11/2016, 13:48
Avatar de jc_moj  
Fecha de Ingreso: septiembre-2009
Ubicación: Andalucía
Mensajes: 137
Antigüedad: 14 años, 7 meses
Puntos: 12
Respuesta: ¿Cómo abrir cajón portamonedas en Java?

Hola

Cita:
Iniciado por udok Ver Mensaje
La impresora esta predeterminada, esto es el método que tengo y no funciona:
Cuando dices no funciona ¿No abre el cajón? ¿Da error? Acostumbraos a decir qué es lo que no funciona.

Cita:
Iniciado por udok Ver Mensaje
Código:
public void cashdrawerOpen() {

		String code1 = "27 112 0 150 250";
		String code = "ESCp0û.";
	    }
Yo ahí lo que veo es que has declarado la secuencia de escape como una cadena de texto y así no funciona, tienes que declarar un array de int, tienes que enviarle el código de apertura como bytes, no como texto.

Por cierto "ESCp0û." ¿qué es? No tengo a mano la secuencia de bytes que envío yo a la impresora, pero eso no lo vi nunca.

Un saludo
  #5 (permalink)  
Antiguo 04/11/2016, 09:41
 
Fecha de Ingreso: diciembre-2013
Mensajes: 16
Antigüedad: 10 años, 3 meses
Puntos: 1
Respuesta: ¿Cómo abrir cajón portamonedas en Java?

"ESCp0û." es code1 en ASCII, no sé si hay que enviarlo todo junto o cómo.
Cambié el metodo, para que envie bytes, pero tampoco funciona (ni da error ni se abre el cajón):
Código:
public void cashdrawerOpen() {

		String code1 = "27 112 0 150 250"; //decimal he probado: 27 112 0 150 250 - 271120150250 - 27:112:0:150:250
		String code2 = "1B 70 0 96 FA"; //  hexadecimal: 1B:70:0:96:FA -  0x1B70096FA - 0x1B 70 0 96 FA - 1B70096FA
		String code = "ESCp0û."; //Ascii idem
	
		 PrintService service = PrintServiceLookup.lookupDefaultPrintService();
		 System.out.println(service.getName()); //la impresora esta bien
		 DocFlavor flavor = DocFlavor.BYTE_ARRAY.AUTOSENSE;
		DocPrintJob pj = service.createPrintJob();
		 byte[] bytes;
		 bytes=code1.getBytes();
		 Doc doc=new SimpleDoc(bytes,flavor,null);
		  try {
			pj.print(doc, null);
		} catch (PrintException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	 
	    }

Última edición por udok; 04/11/2016 a las 11:56
  #6 (permalink)  
Antiguo 06/11/2016, 11:46
Avatar de jc_moj  
Fecha de Ingreso: septiembre-2009
Ubicación: Andalucía
Mensajes: 137
Antigüedad: 14 años, 7 meses
Puntos: 12
Respuesta: ¿Cómo abrir cajón portamonedas en Java?

Hola

Como te dije, desconozco completamente la forma de imprimir desde java, pero esta línea de código:

Cita:
Iniciado por udok Ver Mensaje
Doc doc=new SimpleDoc(bytes,flavor,null);
me hace pensar que estas creando un documento que envías a la impresora y eso no funciona, tienes que enviar los bytes que componen la secuencia de escape en raw, directamente a la impresora, no a un documento que luego se imprime.

¿El código del primer post que pusiste te funciona? Imagino que el problema que tienes es el mismo que tenía yo: No podía enviar los datos a un puerto, tenía que hacerlo a la impresora que el usuario había seleccionado, esta selección se guardaba como una cadena de texto con el nombre de la impresora en un archivo de configuración. Por lo tanto no tenía un puerto al que enviarle los datos, sino un texto con el nombre de la impresora.

En mi caso resolví el problema usando directamente la API de windows. Mi programa está escrito en C++, desconozco cómo hacerlo en java, como dije, solo uso java ocasionalmente y para programar para Android,

Un saludo

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:18.