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

Problema al imprimir (en papel) varios txt

Estas en el tema de Problema al imprimir (en papel) varios txt en el foro de Java en Foros del Web. ¡Buenos días! Este es mi primer mensaje en este foro (ya leí las Políticas de Foros del Web) y en primer lugar quería agradecerles porque ...
  #1 (permalink)  
Antiguo 21/11/2010, 07:57
Avatar de farfamorA  
Fecha de Ingreso: noviembre-2010
Ubicación: Lima
Mensajes: 136
Antigüedad: 13 años, 5 meses
Puntos: 24
Sonrisa Problema al imprimir (en papel) varios txt

¡Buenos días! Este es mi primer mensaje en este foro (ya leí las Políticas de Foros del Web) y en primer lugar quería agradecerles porque muchísimos de los temas que he leído me han sido útiles. Soy un programador novato en Java y, bueno, al grano:

Contexto (Esta parte se puede obviar, pero he visto que hay usuarios que gustan leer el contexto del problema a resolver)
Estoy desarrollando un sencillo programa en Java (utilizo el IDE NetBeans 6.9.1) que genera archivos .TXT (esto funciona bien ;D) con datos leídos de una tabla .DBF (también los lee bien ;D). Explícitamente: el programa recibe dos parámetros String, los busca en determinada columna del .DBF y guarda (temporalmente) el número de fila en el que aparecen. Acto seguido, genera un .TXT para cada una de las filas entre ambos parámetros.
Por ejemplo: ingreso "ABC" y "XYZ" y el programa busca estos String en, digamos la columna 3, y obtiene que el String "ABC" y "XYZ" se encuentran en las filas 5 y 10 respectivamente. Entonces, el programa procede a usar la información de las filas 5, 6, 7, 8 , 9 y 10 del .DBF para crearle un .TXT para cada una de ellas. Como dije, hasta aquí, a pesar de complicaciones iniciales, he tenido relativo éxito.


Problema
Yo utilizo este código para imprimir (no en consola, sino en una impresora EPSON FX-890) un archivo .TXT (por cierto, funciona bien ;D)
Código PHP:
public class imprimir {
   public static 
void documento(String cadenaBuscadathrows FileNotFoundExceptionPrintException
   
{
java.awt.Desktop desktop java.awt.Desktop.getDesktop();
java.io.File fichero = new java.io.File(cadenaBuscada);
if (
desktop.isSupported(Desktop.Action.PRINT)){
            try {
                
desktop.print(fichero);
            } catch (
IOException ex) {
                
Logger.getLogger(Main.class.getName()).log(Level.SEVEREnullex);
            }
}else{
    
JOptionPane.showMessageDialog(null,"El sistema no permite imprimir usando la clase Desktop.\n"
            
"Actualiza tu versión de JVM""Error imprimiendo"JOptionPane.ERROR_MESSAGE);
}
   }

El código no es mío, lo encontré leyendo en un foro de internet, un experto lo dió como ejemplo para un usuario que había hecho una consulta.

El problema surge cuando mando a imprimir varios archivos .TXT en una misma ejecución. A veces, los imprime en el orden correcto en el que los mando, pero a veces no. Me explico: Yo tengo un String[] almacen (con los nombres de los archivos .TXT a imprimir) y básicamente hago lo siguiente:

Código PHP:
for (int=0;i<nombres.length();i++)
imprimir.documento(nombres[i]); 
No creo que esto sea una buena práctica. Probé también poner el bucle dentro del método documento, con resultados similares: me imprime a veces en orden, a veces en desorden.

No entiendo por qué, pues el vector String[] almacen se genera siempre ordenado (lo he comprobado, pues en consola muestro el String[] almacen y lo veo ordenado, y cuando los mando a imprimir, las impresiones salen en desorden).

Muchos se dirán, y si las hojas me salen en desorden ¡pues las ordeno! El problema es que yo trabajo con papel continuo. Y la impresora tiene que imprimir los archivos en estricto orden como están en el String[] almacen.

Ya no sé que pensar: Al parecer, el programa envía "muy rápido" los archivos a la cola de la impresora, la cual no reacciona bien y las recibe como puede. Cabe mencionar que cuando salen en desorden, no están completamente en desorden: o sea, si tenía que imprimir en el orden 1, 2, 3, 4 y 5, entonces es probable que salga 3, 2, 1, 4 y 5 o 5, 1, 2, 3 y 4 o algo parecido.

Probé usar el
Código PHP:
Thread.sleep(milisegundos
, para darle un respiro a la impresora entre cada envío, pero al estar este código en un bucle (el for), no funcionó bien (vamos, me imprimía una línea de cada .TXT, a veces sólo algunas letras, se volvía loca la impresora ;O). También probé poner el mismo código dentro del método documento, con resultados desalentadores.

Entonces, mi pregunta es:

¿Qué puedo hacer para lograr que la impresora reciba la cola de impresión en orden? Se me ocurre que será algo parecido al Thread.sleep(), pero que me funcione bien ;D. O quizás simplemente estoy utilizando mal el Thread.sleep() ;O.

Desde ya, les agradezco por su tiempo.

¡Un saludo desde Lima!
  #2 (permalink)  
Antiguo 25/11/2010, 13:24
Avatar de farfamorA  
Fecha de Ingreso: noviembre-2010
Ubicación: Lima
Mensajes: 136
Antigüedad: 13 años, 5 meses
Puntos: 24
Respuesta: Problema al imprimir (en papel) varios txt

Aún no logro resolver esto... =(
¿Alguno tiene cualquier idea? La que sea...
  #3 (permalink)  
Antiguo 25/11/2010, 14:36
 
Fecha de Ingreso: abril-2010
Mensajes: 25
Antigüedad: 14 años
Puntos: 1
Respuesta: Problema al imprimir (en papel) varios txt

Cita:
Iniciado por farfamorA Ver Mensaje
Aún no logro resolver esto... =(
¿Alguno tiene cualquier idea? La que sea...
La única que conozco ( algo que se aproxima ), es la clase Timer ; Ejemplo:
que ejecuta un comando en determinado tiempo pero no para los procesos con el sleep(creo).

http://www.rgagnon.com/javadetails/java-0144.html
  #4 (permalink)  
Antiguo 27/11/2010, 23:53
Avatar de farfamorA  
Fecha de Ingreso: noviembre-2010
Ubicación: Lima
Mensajes: 136
Antigüedad: 13 años, 5 meses
Puntos: 24
Respuesta: Problema al imprimir (en papel) varios txt

¡Muchas gracias, lo probaré y veré que tal me resulta!
Salu2!

Etiquetas: txt
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 13:18.