Buscar
Social
Ofertas laborales ES

Foro sobre Java EE > java + jasper + unix + print

Gentes, recurro a ustedes a ver si les paso.
Estoy imprimiendo un reporte que se necesita seleccionar la impresora, el mismo funciona en windows, pero cuando sublo el war al servidor que esta en unix no funciona.

el error que me da el log es el siguiente "net.sf.jasperreports.engine.JRException: Error printing report."

solo eso.
las versiones es java 1.6 irerport 4.0.2.

y les paso el codigo


List<Stagging> list;
list = imprimirServicio.imprimirStagging(ciclo);
HashMap<String , String> mp = new HashMap<String, String>();
JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(list);
InputStream reportStream = request.getSession().getServletContext().getResourceAsStream("/reports/Stagging.jasper");
String url = request.getSession().getServletContext().getRealPath("/reports/subreporte.jasper");
mp.put("urlSubreport", url);
try {
JasperPrint print = JasperManager.fillReport(reportStream, mp, ds);
JasperPrintManager.printReport(print , true);
} catch (Exception e) {
e.printStackTrace();
log.error(e.toString());
}

bueno espero me puedan ayudar.
que tengan un excelente dia

diciembre 20, 2013 | Unregistered Commenterzavhier

Hola.

Sabes si en el servidor estan registrada la impresora?
Es decir si estan instaldos los drivers de la impresora?

Podrias verificar esto con un comando apra imprimir :
http://www.seas.upenn.edu/cets/answers/unixprint.html
http://help.cs.umn.edu/printing/unix
http://docs.oracle.com/cd/E16764_01/bi.1111/b32121/pbr_uxprt002.htm

Si verificas que puedes imprimir "nativamente", recien podemos revisar tu codigo.

Saludos

diciembre 21, 2013 | Registered Commenterjrichard

Muchas gracias por tu respuesta, jrichard.
te comento,
antes de modificar el codigo lo imprimia directamente y salia por la impresora predeterminada. pero yo necesito que el usuario eligiera la impresora y probe el siguiente codigo
JasperPrintManager.printReport(print , true);

true = es para que salga el dialogo de impresión, eso en windows funciona bien.
pero en unix no.

lo probe en diferente versiones de unix, con y sin entorno gráfico en los mismo no funciono.

nuevamente gracias por tu respuesta

diciembre 23, 2013 | Unregistered Commenterzavhier

Zavier puedo intuir cual es el problema.

La linea :

JasperPrintManager.printReport(print , true);

Imprime el reporte a la impresora predeterminada. Esta impresion se logra para aplicaciones DESKTOP O DE ESCRITORIO (SWING) :

http://www.jc-mouse.net/java/impresion-de-reportes-con-jasperreport-yapa

Este dialogo de impresion es SWING o AWT por lo tanto no puede ser ejecutado cuando la aplicacion es web (WAR).

Esa puede ser la explicacion a el problema.

Si tu aplicacion es de escritio (AWT / SWING / JAR) y aun asi no funciona, es otro tema.

Si tu aplicacion es web (JSP/ HTML / SERVLETS / WAR) debes usar un applet para que el usuario pueda seleccionar una impresora (tambien podrias imprimir a la impresora por defecto con este applet). El applet es necesario debido a que cuando la pagina es visualizada, esto se da en el lado del usuario (BROWSER) por lo que para poder manipular la impresora necesitas acceder a recursos de la maquina del usuario(permisos/seguridad).

Podrias revisar esta herramienta la cual fue usada en un par de proyectos de los que fui parte:

http://code.google.com/p/jzebra/

Este tema no esta solucionado al  100%. Esto se debe a que la unica solucion para que tu aplicacion web pueda imprimir es un applet, dll , algun activex (internet explorer) o algun codigo extraño. Estas alternativas son lentas al cargar la web, necesitan actualizarse si el browser se actualiza (applets) , permisos de seguridad, cuelgan el browser etc etc.

Hace unos meses estaba ideando una solucion pero por temas de tiempo y prioridad se quedo en stop.

Saludos y feliz navidad javahispano :)

http://jrichardsz.weebly.com

diciembre 25, 2013 | Unregistered Commenterjrichard