En un post anterior [Guardar reporte PDF directamente con Jasperreports] vimos una manera de imprimir reportes directamente en PDF sin mostrar la ventana de visualización de Jasper, en esta ocasión veremos dos manera de imprimir directamente en la impresora del sistema.
Utilizaremos la misma base de datos y el mismo archivo *.jasper del post anterior [VER], te recomiendo que te pases primero por ese post :).
Manos a la obra.
1.- Impresión por defecto
Este es el método mas cortito, se hace uso de JasperPrintManager.printReport(jasperPrint, true); donde jasperPrint es el reporte a imprimir y el parámetro boolean, especifica si se muestra o no la ventana de dialogo de impresión. Por defecto se hace uso de la impresora predeterminada del sistema así como la configuración de página.
01 public void Imprimir(){ 02 JasperReport jasperReport; 03 JasperPrint jasperPrint; 04 try 05 { 06 //se carga el reporte 07 URL in=this.getClass().getResource( "reporte.jasper" ); 08 jasperReport=(JasperReport)JRLoader.loadObject(in); 09 //se procesa el archivo jasper 10 jasperPrint = JasperFillManager.fillReport(jasperReport, new HashMap(), this.getConexion() ); 11 //impresion de reporte 12 // TRUE: muestra la ventana de dialogo "preferencias de impresion" 13 JasperPrintManager.printReport(jasperPrint, true); 14 } 15 catch (JRException ex) 16 { 17 System.err.println( "Error iReport: " + ex.getMessage() ); 18 } 19 }
2.- Impresión con PrintService y JRPrintServiceExporter
Con este método podemos trabajar un poco nuestra función de impresión, por ejemplo podríamos definir una impresora diferente para cada tipo de reporte o permitir al usuario elegir con que impresora desea realizar la impresión. Inclusive se puede definir ya un formato para el reporte, tamaño de página por ejemplo.
01 public void Imprimir2(){ 02 /* Array para almacenar las impresoras del sistema */ 03 PrintService[] printService = PrintServiceLookup.lookupPrintServices(null, null); 04 if( printService.length>0 )//si existen impresoras 05 { 06 //se elige la impresora 07 PrintService impresora = (PrintService) JOptionPane.showInputDialog(null, "Eliga impresora:", 08 "Imprimir Reporte", JOptionPane.QUESTION_MESSAGE, null, printService, printService[0]); 09 if( impresora != null ) //Si se selecciono una impresora 10 { 11 try { 12 //esto para el JasperReport 13 JasperReport jasperReport; 14 JasperPrint jasperPrint; 15 //se carga el reporte 16 URL in = this.getClass().getResource("reporte.jasper"); 17 jasperReport = (JasperReport) JRLoader.loadObject(in); 18 //se procesa el archivo jasper 19 jasperPrint = JasperFillManager.fillReport(jasperReport, new HashMap(), this.getConexion()); 20 //se manda a la impresora 21 JRPrintServiceExporter jrprintServiceExporter = new JRPrintServiceExporter(); 22 jrprintServiceExporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint ); 23 jrprintServiceExporter.setParameter(JRPrintServiceExporterParameter.PRINT_SERVICE, impresora ); 24 jrprintServiceExporter.setParameter(JRPrintServiceExporterParameter.DISPLAY_PRINT_DIALOG, Boolean.TRUE); 25 jrprintServiceExporter.exportReport(); 26 } catch (JRException ex) { 27 System.err.println("Error JRException: " + ex.getMessage()); 28 } 29 } 30 } 31 }
Cada uno de estos métodos tiene sus pro y sus contra, el primer método es sencillo y rápido pero tiene pocas opciones de personalización, el segundo al contrario permite realizar muchas más configuración desde código, pero es lento, dependiendo del contenido y cantidad de páginas que tenga el reporte, puede tardar desde segundos a minutos.
YAPA
JasperReport no solo nos permite imprimir reportes a PDF, también existen otros formatos permitidos, por ejemplo guardar el reporte en una imagen.
Primero se hace la captura del reporte en memoria (BufferedImage), después se guarda en disco con ImageIO.write, indicando la ruta y nombre del archivo, este tipo de impresión solo esta disponible por 1 página a la vez.
01 public void ImprimirImagen(){ 02 JasperReport jasperReport; 03 JasperPrint jasperPrint; 04 try 05 { 06 //se carga el reporte 07 URL in=this.getClass().getResource( "reporte.jasper" ); 08 jasperReport=(JasperReport)JRLoader.loadObject(in); 09 //se procesa el archivo jasper 10 jasperPrint = JasperFillManager.fillReport(jasperReport, new HashMap(), this.getConexion() ); 11 //impresion de reporte en imagen 12 // parametros: jasperPrint , Pagina , Zoom 13 BufferedImage bufferedImage = (BufferedImage) JasperPrintManager.printPageToImage(jasperPrint, 0, 2f); 14 //se escribe imagen en disco en formato JPG y en la direccion indicada en FILE 15 ImageIO.write(bufferedImage, "jpg", new File("e:/temporal/reportecanchero.jpg") ); 16 System.out.println("Reporte creado en formato JPG"); 17 } 18 catch (IOException ex) { 19 System.err.println( "Error IOException: " + ex.getMessage() ); 20 } 21 catch (JRException ex) 22 { 23 System.err.println( "Error iReport: " + ex.getMessage() ); 24 } 25 }
o.O eso es todo, bájate el ejemplo completo en este «enlace canchero :)» , esta en netbeans 6.9 y hace uso de JasperReport en su versión 3.7.2
Webcam Capture es un API que permite usar una cámara web incorporada o externa directamente desde código Java utilizand[...]
En este segundo post sobre Android y SQLite, veremos el uso de los métodos de gestión de base de datos más utilizados, e[...]
Muchas de las innovaciones computacionales de la NASA se desarrollaron para ayudar a explorar el espacio, pero ahora la[...]
HyperSQL DataBase (HSQLDB) es un moderno administrador de bases de datos relacionales, es portátil e implementado en jav[...]
El error: Instalaba SQL Server 2008 R2 en español en Windows con el idioma «Español (Bolivia)»y de repente me salio este[...]
Para colocar un JCheckBox dentro una celda de un JTable debemos sobre escribir algunas clases para que el componente pue[...]