Thursday, December 04, 2014

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


No comments: