Aprende Java Aprende Php Aprende C++ Aprende HTML 5 Aprende JavaScript Aprende JSON Aprende MySQL Aprende SQLServer Aprende Visual Basic 6 Aprende PostgreSQL Aprende SQLite Aprende Redis Aprende Kotlin Aprende XML Aprende Linux VSC Aprende Wordpress Aprende Laravel Aprende VueJS Aprende JQuery Aprende Bootstrap Aprende Netbeans Aprende Android
Sigueme en Facebook Sigueme en Twitter Sigueme en Instagram Sigueme en Youtube Sigueme en TikTok Sigueme en Whatsapp
Home / iReport / Java / Impresión de reportes con JasperReport + YAPA

Impresión de reportes con JasperReport + YAPA

Por jc mouse sábado, noviembre 24, 2012

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

impresion-nado

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

choose print

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

Tags

Artículos similares

Ejecutables con Launch4J

Launch4j es un software OpenSource hecho en Java que permite crear ejecutables para programas escritos en ese mismo leng[...]

Terminator: Terminal multiventanas para Linux

Cada versión de Linux viene con su propia terminal predeterminada para interactuar con el Sistema Operativo a través de[...]

Blog MVC – Iniciando el proyecto [p2]

Segunda parte del tutorial [Crea tu blog con el patrón MVC y php]. En esta 2da parte toca ver lo que es la creación del[...]

Conectar SQL Server con PHP 8.x

Lo que veremos en este post es la configuración del driver para PHP de SQL Server que ha creado Microsoft el cual permit[...]

Juego: Acierta los colores (Código Fuente)

Acierta los colores o Adivina los colores es un sencillo juego que consiste en que dado 6 colores «rojo», «verde», «salm[...]

Minimizar aplicación al SystemTray/Bandeja del Sistema

El SystemTray/Bandeja del Sistema o como también se le llama «Área de Notificación» es la sección de la barra de tareas[...]