Exportar a Excel un Reporte Web con JasperReports 3.0.0

Partiendo de un ejemplo anterior.

Editar el archivo pom.xml para dar soporte mediante las librerias necesarias.

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
 <modelVersion>4.0.0</modelVersion>
 <groupId>jrwebapp</groupId>
 <artifactId>jrwebapp</artifactId>
 <packaging>war</packaging>
 <version>1.0-SNAPSHOT</version>
 <name>jrwebapp Maven Webapp</name>
 <url>http://maven.apache.org</url>
 <dependencies>
 <dependency>
 <groupId>javax.servlet</groupId>
 <artifactId>servlet-api</artifactId>
 <version>2.2</version>
 <scope>provided</scope>
 <optional>true</optional>
 </dependency>
 <dependency>
 <groupId>commons-beanutils</groupId>
 <artifactId>commons-beanutils</artifactId>
 <version>1.7.0</version>
 <scope>compile</scope>
 </dependency>
 <dependency>
 <groupId>commons-collections</groupId>
 <artifactId>commons-collections</artifactId>
 <version>[2.1,)</version>
 <scope>compile</scope>
 </dependency>
 <dependency>
 <groupId>commons-digester</groupId>
 <artifactId>commons-digester</artifactId>
 <version>[1.7,)</version>
 <scope>compile</scope>
 </dependency>
 <dependency>
 <groupId>commons-logging</groupId>
 <artifactId>commons-logging</artifactId>
 <version>[1.0,)</version>
 <scope>compile</scope>
 </dependency>
 <dependency>
 <groupId>eclipse</groupId>
 <artifactId>jdtcore</artifactId>
 <version>[3.1.0,)</version>
 <scope>compile</scope>
 </dependency>
 <dependency>
 <groupId>poi</groupId>
 <artifactId>poi</artifactId>
 <version>3.0-FINAL</version>
 </dependency>
 <dependency>
 <groupId>jasperreports</groupId>
 <artifactId>jasperreports</artifactId>
 <version>3.0.0</version>
 </dependency>
 <dependency>
 <groupId>mysql</groupId>
 <artifactId>mysql-connector-java</artifactId>
 <version>5.1.6</version>
 </dependency>
 <dependency>
 <groupId>junit</groupId>
 <artifactId>junit</artifactId>
 <version>3.8.1</version>
 <scope>test</scope>
 </dependency>
 </dependencies>
 <build>
 <finalName>jrwebapp</finalName>
 <pluginManagement>
 <plugins>
 <plugin>
 <groupId>org.apache.maven.plugins</groupId>
 <artifactId>maven-compiler-plugin</artifactId>
 <version>2.0.2</version>
 <configuration>
 <source>1.5</source>
 <target>1.5</target>
 </configuration>
 </plugin>
 <plugin>
 <groupId>org.apache.maven.plugins</groupId>
 <artifactId>maven-eclipse-plugin</artifactId>
 <version>2.4</version>
 <configuration>
 <downloadSources>false</downloadSources>
 <wtpversion>1.5</wtpversion>
 </configuration>
 </plugin>
 </plugins>
 </pluginManagement>
 </build>
</project>

Ejecutar:

mvn clean install

Luego:

mvn eclipse:clean eclipse:eclipse

Modificar el método service de JRServlet.java así:

protected void service(HttpServletRequest request,
 HttpServletResponse response) throws ServletException, IOException {
 try {

 /*
 * Asegurar que existe el archivo jasper
 */
 ServletContext sc = getServletConfig().getServletContext();
 String vjrxmlPath = "/WEB-INF/classes/reports/detObjMet.jrxml";
 String vjasperPath = "/WEB-INF/classes/reports/detObjMet.jasper";

 InputStream is = sc.getResourceAsStream(vjasperPath);

 if (is == null) {
 String rp = sc.getRealPath(vjrxmlPath);
 JasperCompileManager.compileReportToFile(rp);
 is = sc.getResourceAsStream(vjasperPath);
 }

 /*
 * Configuracion del datasource
 */
 Connection con;
 Statement stm;
 ResultSet rs;

 String jdbcDriver = "com.mysql.jdbc.Driver";
 Class.forName(jdbcDriver);
 String jdbcUrl = "jdbc:mysql://localhost:3306/course?user=root";
 con = DriverManager.getConnection(jdbcUrl);

 String query = "SELECT COURSE_ID, NAME, COURSE FROM COURSE";
 stm = con.createStatement();
 rs = stm.executeQuery(query);

 JRResultSetDataSource jrds = new JRResultSetDataSource(rs);

 /*
 * Configuracion de los parametros de posicionamiento de imagenes
 */
 String vlogoPath = "/images/logo_home_2.jpg";
 String logoPath = sc.getRealPath(vlogoPath);
 String vukasPath = "/images/ukas.gif";
 String ukasPath = sc.getRealPath(vukasPath);
 String vsgsPath = "/images/sgs.gif";
 String sgsPath = sc.getRealPath(vsgsPath);
 HashMap<String, String> params = new HashMap<String, String>();
 params.put("logoPath", logoPath);
 params.put("ukasPath", ukasPath);
 params.put("sgsPath", sgsPath);

 /*
 * Creamos el objeto jasper print
 */
 String jasperPath = sc.getRealPath(vjasperPath);
 JasperPrint jprint = JasperFillManager.fillReport(jasperPath,
 params, jrds);

 /*
 * Creamos el archivo xls
 */
 String vxls = "/WEB-INF/classes/reports/detObjMet.xls";
 String xls = sc.getRealPath(vxls);
 JRXlsExporter exporter = new JRXlsExporter();
 exporter.setParameter(JRExporterParameter.JASPER_PRINT, jprint);
 exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, xls);
 exporter.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET,
 Boolean.TRUE);
 exporter.exportReport();

 /*
 * Configuramos el tipo de archivo, la cabecera http
 */
 File f = new File(xls);
 response.setContentType("application/vnd.ms-excel");
 response.setHeader("Content-Disposition", "attachment;filename=\""
 + "detObjMet.xls" + "\"");
 InputStream in = new FileInputStream(f);
 ServletOutputStream sos = response.getOutputStream();

 int bit = 256;
 while ((bit) >= 0) {
 bit = in.read();
 sos.write(bit);
 }

 sos.flush();
 sos.close();
 in.close();

 } catch (JRException e) {
 StringWriter sw = new StringWriter();
 PrintWriter pw = new PrintWriter(sw);
 e.printStackTrace(pw);
 response.setContentType("text/plain");
 response.getOutputStream().print(sw.toString());
 } catch (ClassNotFoundException e) {
 StringWriter sw = new StringWriter();
 PrintWriter pw = new PrintWriter(sw);
 e.printStackTrace(pw);
 response.setContentType("text/plain");
 response.getOutputStream().print(sw.toString());
 } catch (SQLException e) {
 StringWriter sw = new StringWriter();
 PrintWriter pw = new PrintWriter(sw);
 e.printStackTrace(pw);
 response.setContentType("text/plain");
 response.getOutputStream().print(sw.toString());
 }
 }

Desplegar la aplicación, el resultado final es:

XLS format file

XLS format file

Etiquetas:

Una respuesta to “Exportar a Excel un Reporte Web con JasperReports 3.0.0”

  1. Gustavo Burgos Says:

    Que linda Información !!!!
    Gracias !!!

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s


A %d blogueros les gusta esto: