jueves, 14 de abril de 2011

Breve apunte de programación con Java. Impresión con JasperReports a doble cara


Otro breve apunte de programación con Java. Hoy trataremos el tema de imprimir a doble cara usando JasperReports.

Para imprimir algo a doble cara, la forma más sencilla es decirle al driver de impresora que se ponga en modo duplex e imprimir normalmente (el driver se encarga de hacer la impresión a doble cara).

El problema está en que si estamos imprimiendo continuamente cosas a doble cara y cosas que no van a doble cara, que sea el usuario quien cambie las funciones de impresión en cada impresión no es lo más recomendable, por lo que la opción más adecuada es que sea el programa el que indique al driver que vamos a imprimir en duplex, imprimamos como lo haríamos normalmente y sea el driver quien se encargue del duplex y al finalizar el informe deje el tema duplex como antes del mismo.

Con un ejemplo se verá más claro:
jreport = JasperCompileManager.compileReport(new FileInputStream("miReport.jrxml"));

Map parametros = new HashMap();
parametros.put("misql", "select * from clientes order by razon_social");

JasperPrint print = JasperFillManager.fillReport(jreport, parametros, conn);

JRExporter exporter = new JRPrintServiceExporter();
exporter.setParameter(JRExporterParameter.JASPER_PRINT, print);

PrintRequestAttributeSet attrSet = new HashPrintRequestAttributeSet();
attrSet.add(Sides.DUPLEX);

exporter.setParameter(JRPrintServiceExporterParameter.PRINT_REQUEST_ATTRIBUTE_SET, attrSet);
exporter.exportReport();

En el ejemplo anterior observamos varias cosas: El report recibe un parámetro (que debemos haber indicado en la creación del mismo) llamado misql, el cuál contiene la SQL que recupera los datos del report.

Una vez tenemos el objeto JasperPrint podemos imprimirlo normalmente o bien crear un objeto JRExporter para aplicarle ciertos parámetros de impresión (en este caso, la impresión DUPLEX).

Finalmente con exporter.exportReport() lo que hacemos es imprimir con los parámetros fijados en exporter.

2 comentarios: