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

Popular posts from this blog

FileUpload con Primefaces

FileUpload con Primefaces

Si queremos subir imagenes a nuestra aplicación usaremos el componente FileUploadDebemos realizar los siguientes pasos:
Agregar al archivo web.xml

   <filter>        <filter-name>PrimeFaces FileUpload Filter</filter-name>        <filter-class>            org.primefaces.webapp.filter.FileUploadFilter        </filter-class>    </filter>    <filter-mapping>        <filter-name>PrimeFaces FileUpload Filter</filter-name>        <servlet-name>Faces Servlet</servlet-name>    </filter-mapping>



Crear dentro de resources el directorio donde deseamos almacenar las imagenesEn este ejemplo: resources/fotos/clinicas y agregue una imagen llamada fotos.png que se usará como imagen inicial.



En JSFUtil u otro @Named Beans que usemos agregamos tres métodos uno para obtener el path de la aplicación web , otro para obtener el path relativo a /fotos/clinicas y el otro para copiar los archivos. /*

NetBeans 8.0.1 en Español

NetBeans 8.0.1 disponible en español
http://bits.netbeans.org/netbeans/8.0.1/community/
Esta disponible NetBeans 8.0.1 en varios idiomas .


Puedes descargar la nueva versión y utilizar las nuevas características


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, imagenesSource 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 aplicación 

Esperamos que se inicie GlassFish y se cargue la aplicación
Este se ejecutara en nuestro servidor local y…