Skip to main content

Libro JEE7 Capitulo 06 iReport

Capitulo 06 iReport

Puedes descargarlo en pdf
https://www.dropbox.com/sh/yzivtufjce1h57g/AAAJzegPVBxFtiqzEOlIAdsoa?dl=0

Encuesta
https://docs.google.com/forms/d/1WG7uzOe17V4u36fC05V3ijYEPZ8fhJD1NPUrkNBS0Jk/alreadyresponded?usp=send_form


En este capĆ­tulo mostraremos la forma de crear reportes de una manera muy sencilla utilizando iReport.


Pasos:
  1. Descargar el plugin iReport
  2. Crear reporte
  3. Desarrollar el cĆ³digo para imprimir reporte.


Descargamos el plugin de iReport para NetBeans






Descomprimir el archivo .zip

Desde el menĆŗ de NetBeans Tools-->Plugins-->PestaƱa Downloaded-->Presionar el botĆ³n Add Plugins

En el proyecto seleccionar Build with dependences

Nos ubicamos en resources -->clic derecho y seleccionar New-->Categories: Other→ File Types: Folder

Crear el paquete reportes dentro de resources

Nos ubicamos en reportes y seleccionar  NewOther


Seleccionar Categories: Report
                    File Types: Empty report


dar el nombre





se muestra el diseƱador de reportes





Revisamos los atributos del Entity Estatus.java


Abrimos el reporte y en  Field agregamos los tres fields. Clic derecho seleccionar Add Field

se genera el nombre field1
renombrar a idestatus, estatus,esinicial

En la paleta le cambiamos el tipo de dato en las propiedades
Propiedad Field Class
Arrastramos los campos a la secciĆ³n Detail1, de manera automĆ”tica se coloca en la columna el tĆ­tulo.

Arrastras label Static Text  desde la paleta a la secciĆ³n Page Header
En el texto colocamos ESTATUS y las propiedades seleccionamos Bold, para que lo coloque en negrita.

En Tools arrastramos Current date para agregar la fecha del sistema.

compilamos el reporte
En la barra se genera el mensaje de compilaciĆ³n exitosa

Se muestra el reporte compilado








CREAR CDI/BEANS PARA MANEJO DE IMPRESIONES

CDI Beans GestorImpresion.java lo usaremos para gestionar las diversos mƩtodos para realizar las impresiones.
Crearemos los mƩtodos con dos parƔmetros List<?> t , colocamos el ? para que podamos pasar cual list de objetos al mƩtodo, y String ruta, es la ruta del reporte, HashMap para los parƔmetros que usaremos en los reportes.
  • imprimir(List<?> t,String ruta,HashMap hashmap) ,imprime la lista de objetos pasados
  • pdf(List<?> t, String ruta, HashMap hashmap), genera un pdf
  • docx(List<?> t, String ruta, HashMap hashmap), genera un archivo docx
  • xlsx(List<?> t, String ruta, HashMap hashmap), genera un archivo xlsx
  • odt(List<?> t, String ruta, HashMap hashmap), genera un archivo odt
  • ppt(List<?> t, String ruta, HashMap hashmap), genera un archivo ppt
  • preparar(List<?> t, String ruta, HashMap hashmap), se utiliza internamente para configurar el entorno del reporte.
De esta manera podemos invocar el reporte desde el controller, donde pasaremos la lista de objetos
public String imprimir() {
       String ruta = "/resources/reportes/estatus.jasper";
       HashMap parameters = new HashMap();
       gestorImpresion.imprimir(estatusFacade.getEstatusList(), ruta, parameters);

       return null;
   }


Crear el CDI Beans
  • Desde menĆŗ File, seleccione New
  • en Categories, seleccione Java Server Faces
  • en File Types, seleccione JSF ManagedBeans
  • Class Name: GestorImpresion
  • Package com.avbravo.scrumweb.generales
  • Scope: request







CĆ³digo completo  de GestorImpresion.java

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import javax.enterprise.context.RequestScoped;
import javax.faces.context.FacesContext;
import javax.inject.Named;
import javax.servlet.ServletContext;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRExporterParameter;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import net.sf.jasperreports.engine.export.JRPdfExporter;
import net.sf.jasperreports.engine.export.oasis.JROdtExporter;
import net.sf.jasperreports.engine.export.ooxml.JRDocxExporter;
import net.sf.jasperreports.engine.export.ooxml.JRPptxExporter;
import net.sf.jasperreports.engine.export.ooxml.JRXlsxExporter;

/**
*
* @author avbravo
*/
@Named
@RequestScoped

public class GestorImpresion {

   JRBeanCollectionDataSource ds;
   FacesContext facesContext;
   ServletContext scontext;
   JasperPrint jasperPrint;

   /**
    * Creates a new instance of GestorImpresion
    */
   public GestorImpresion() {
   }

   public String imprimir(List<?> t, String ruta, HashMap hashmap) {
       try {
           preparar(t, ruta, hashmap);
           ByteArrayOutputStream baos = new ByteArrayOutputStream();
           JRPdfExporter exporter = new JRPdfExporter();
           exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
           exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, baos);
           exporter.exportReport();
           byte[] bytes = baos.toByteArray();
           if (bytes != null && bytes.length > 0) {
               HttpServletResponse response = (HttpServletResponse) facesContext.getExternalContext().getResponse();
               response.setContentType("application/pdf");
               response.setHeader("Content­disposition", "inline; filename=\"relatorioPorData.pdf\"");
               response.setContentLength(bytes.length);
               ServletOutputStream outputStream = response.getOutputStream();
               outputStream.write(bytes, 0, bytes.length);
               outputStream.flush();
               outputStream.close();
           }
       } catch (JRException | IOException e) {
           JSFUtil.addErrorMessage(e.getMessage());
       }
       return null;
   }

   public String pdf(List<?> t, String ruta, HashMap hashmap) {
       try {
           preparar(t, ruta, hashmap);
           HttpServletResponse httpServletResponse = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
           httpServletResponse.addHeader("Content­disposition", "attachment;filename=report.pdf");
           ServletOutputStream servletOutputStream = httpServletResponse.getOutputStream();
           JasperExportManager.exportReportToPdfStream(jasperPrint, servletOutputStream);
           FacesContext.getCurrentInstance().responseComplete();
       } catch (JRException | IOException e) {
           JSFUtil.addErrorMessage(e.getMessage());
       }
       return null;
   }

   public String docx(List<?> t, String ruta, HashMap hashmap) {
       try {
           preparar(t, ruta, hashmap);
           HttpServletResponse httpServletResponse = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
           httpServletResponse.addHeader("Content­disposition", "attachment;filename=report.docx");
           ServletOutputStream servletOutputStream = httpServletResponse.getOutputStream();
           JRDocxExporter docxExporter = new JRDocxExporter();
           docxExporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
           docxExporter.setParameter(JRExporterParameter.OUTPUT_STREAM,
                   servletOutputStream);
           docxExporter.exportReport();
           FacesContext.getCurrentInstance().responseComplete();
       } catch (JRException | IOException e) {
           JSFUtil.addErrorMessage(e.getMessage());
       }
       return null;
   }

   public String xlsx(List<?> t, String ruta, HashMap hashmap) {
       try {
           preparar(t, ruta, hashmap);
           HttpServletResponse httpServletResponse = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
           httpServletResponse.addHeader("Content­disposition", "attachment;filename=report.xlsx");
           ServletOutputStream servletOutputStream = httpServletResponse.getOutputStream();
           JRXlsxExporter docxExporter = new JRXlsxExporter();
           docxExporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
           docxExporter.setParameter(JRExporterParameter.OUTPUT_STREAM,
                   servletOutputStream);
           docxExporter.exportReport();
           FacesContext.getCurrentInstance().responseComplete();
       } catch (JRException | IOException e) {
           JSFUtil.addErrorMessage(e.getMessage());
       }
       return null;
   }

   public String odt(List<?> t, String ruta, HashMap hashmap) {
       try {
           preparar(t, ruta, hashmap);
           HttpServletResponse httpServletResponse = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
           httpServletResponse.addHeader("Content­disposition", "attachment;filename=report.odt");
           ServletOutputStream servletOutputStream = httpServletResponse.getOutputStream();
           JROdtExporter docxExporter = new JROdtExporter();
           docxExporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
           docxExporter.setParameter(JRExporterParameter.OUTPUT_STREAM,
                   servletOutputStream);
           docxExporter.exportReport();
           FacesContext.getCurrentInstance().responseComplete();
       } catch (JRException | IOException e) {
           JSFUtil.addErrorMessage(e.getMessage());
       }
       return null;
   }

   public String ppt(List<?> t, String ruta, HashMap hashmap) {
       try {
           preparar(t, ruta, hashmap);
           HttpServletResponse httpServletResponse = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
           httpServletResponse.addHeader("Content­disposition", "attachment;filename=report.pptx");
           ServletOutputStream servletOutputStream = httpServletResponse.getOutputStream();
           JRPptxExporter docxExporter = new JRPptxExporter();
           docxExporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
           docxExporter.setParameter(JRExporterParameter.OUTPUT_STREAM,
                   servletOutputStream);
           docxExporter.exportReport();
           FacesContext.getCurrentInstance().responseComplete();
       } catch (JRException | IOException e) {
           JSFUtil.addErrorMessage(e.getMessage());
       }
       return null;
   }

   private void preparar(List<?> t, String ruta, HashMap hashmap) {
       try {
           ds = new JRBeanCollectionDataSource(t);
           facesContext = FacesContext.getCurrentInstance();
           facesContext.responseComplete();
           scontext = (ServletContext) facesContext.getExternalContext().getContext();
           jasperPrint = JasperFillManager.fillReport(scontext.getRealPath(ruta), hashmap, ds);
       } catch (Exception e) {
           JSFUtil.addErrorMessage(e.getMessage());
       }
   }
 }


































Editar EstatusDataController.java , inyectar GestionImpresion y agregar el mƩtodo imprimir().En este indicaremos la ruta del reporte, la lista de entitys y el HashMap con los parƔmetros. E invocamos al mƩtodo correspondiente en GestionImpresion

@Inject
   GestorImpresion gestorImpresion;

public String imprimir() {
       String ruta = "/resources/reportes/estatus.jasper";
       HashMap parameters = new HashMap();
       gestorImpresion.imprimir(estatusFacade.getEstatusList(), ruta, parameters);
       return null;
   }

/*
*imprimir un solo entity
*/
public String imprimir() {
List<Estatus> list = new ArrayList<>();
list.add(estatus);
       String ruta = "/resources/reportes/estatus.jasper";
       HashMap parameters = new HashMap();
       gestorImpresion.imprimir(list, ruta, parameters);
       return null;
   }



















Editamos estatuslist.xhmtl, agregamos un footer con el boton imprimir, utilizamos en este caso immediate=”true”, para evitar que se realicen las validaciones, ya que desamos mostrar el reporte directamente.

<f:facet name="footer">
             <p:commandButton immediate="true" id="printButton" value="#{app['boton.print']}" action="#{estatusDataController.imprimir()}" icon="ui-icon-print" ajax="false" />                                                                     
  </f:facet>
                        </p:dataTable>
                        </p:dialog>

Cuando ejecutamos el proyecto y seleccionamos estatuslist, se muestra el botĆ³n Imprimir
al presionarlo se muestra el reporte para imprimir


Comments

Estimado profesor como siempre sus aportes son de suma importancia y utilidad.

SeguĆ­ los pasos y funciona a la perfecciĆ³n en un ambiente de desarrollo.

Pero en producciĆ³n al intentar visualizar el archivo pdf el navegador arroja un mensaje de error ""Format error : Not a PDF or corrupted"

Deberia modificar alguna linea para obtener la ruta ?

O el problema se da porque al generar el archivo .WAR los archivos que estan en la carpeta recursos son omitidos ?

Saludos
Estimado profesor como siempre sus aportes son de suma importancia y utilidad.

Realice todos los pasos y funciona a la perfeccion en un ambiente de desarollo.

El problema esta al momento de generar el archivo .war y subir a la aplicacion al servidor para produccion , es entonces cuando al momento de visualizar el reporte el navegador arroja elmensaje de "Format error : Not a PDF or corrupted" .

Eso se debe a que los archivos que estan en la carpeta recursos son omitidos al momento de hacer el deploy o deberia cambiar alguna linea para obtener la ruta exacta de los reportes ?

Desde ya muchas gracias-

Saludos.

Popular posts from this blog

Tutorial bƔsico de aplicaciones Web con NetBeans parte 1

NetBeans ofrece un excelente soporte para el desarrollo de aplicaciones Web, en esta ocasiĆ³n lo haremos utilizando el Framework Java Server Faces 2.0. En el Menu Seleccionamos Nuevo->Proyecto y luego en Categorias Java Web y en tipo de Proyectos Web  Application indicamos el nombre del proyecto Seleccinamos el servidor Web, usamos GlassFish ya que este soporta EJB3.0 y JSF 2.0 Framework Java Server Faces El IDE genera el esquelto del proyecto Web Pages   almacenamos las paginas .html, xhtml, jsf, los archivos de recursos, los scripts .js, imagenes Source Packages    Son las clases Java  Test Packages    Son las clases que usamos para los Test Libraries     Tenemos las bibliotecas de Java y GlassFish necesarias para ejecutar la aplicaciĆ³n Web. Test Libraries     EstĆ”n las bibliotecas usadas para los test  Configuration Files    Archivos de configuraciĆ³n de la aplicaciĆ³n. Ejecutamos la...

Incrementar Memoria NetBeans

Algunas veces necesitamos incrementar la memoria para un mejor rendimiento. http://www.netbeans.org/community/releases/55/uml-download.html Este es un ejemplo para UML. DescripciĆ³n en ingles. Increasing Memory Settings (applicable to all builds) The default memory settings for NetBeans should be increased for UML projects. If you have the available memory, Locate your NetBeans installation directory ($install_dir). This can be found by starting up NetBeans and selecting Help -> About then select the Detail tab. Edit the $install_dir/etc/netbeans.conf file. Find the line defining netbeans_default_options . Increase the maximum memory attribute to -J-Xmx512m. If you experience heap overflows while working with larger files, you should increase this value further.

Cambiando el estado de un checkbox

Cambiando el Estado de un CheckBox Algunas veces deseamos controlar el estado de un checkbox o cambiarlo segĆ¹n determinadas condiciones. Pasos: 1. Creamos un proyecto Web. 2. En el diseƱador agregamos un checkbox y dos botones. * Dar click derecho en el checkbox y luego seleccionar Add Binding Attribute, para agregar los atributos al checkbox, de manera que los podamos usar en nuestro cĆ³digo. Generando automĆ”ticamente private Checkbox checkbox1 = new Checkbox(); public Checkbox getCheckbox1() { return checkbox1; } public void setCheckbox1(Checkbox c) { this.checkbox1 = c; } 3.Damos click derecho en el botĆ³n Habilitar, y seleccionamos Edit Action Event Handler. A continuaciĆ³n, agregamos el cĆ³digo: this.checkbox1.setSelected(true);, el mĆ©todo setSelected con valor true, marca el checkbox como seleccionado, y un valor de false, quita la marca. public String button1_action() { // TODO: Process the action. Return value is a navigation // ...