Generación de Informes pdf con DataVision

2
39657

Informes con DataVision

En todas las aplicaciones normalmente debemos construir informes.

Es un gran perdida de tiempo construir el código de estos informes o
reportes ya que normalmente los podemos generar directamente a través del
modelo de datos.

Hay muchas herramientas de pago y gratuitas. Hoy vamos a ver DataVision (ya
probaremos otras)

Como suele pasar, la documentación es un poco escueta pero bueno…. es tan
intuitiva que es fácil ponerla en marcha.

Vamos a ir a http://sourceforge.net/projects/datavision/ y
buscar es proyecto.

Una vez descargado y descomprimido, encontraremos un directorio tal que así:

Si pulsamos el bat, arranca la aplicación y nos solicita una fuente de datos
(aseguraos de tener el driver de la base de datos en el classpath).

Yo voy a usar MySql (como habitualmente)

La estructura de mi tabla es la siguiente

Ahora, nos aparece la pantalla donde componemos nuestro informe …. y en
castellano (que alegría).

Añadimos algunas etiquetas de texto

Y podemos añadir campos de la base de datos.

Los vamos pinchando y arrastrando a la parte de la pantalla que nos interesa

Podemos ver el sql que se va generando

Esta es nuestra consulta

En el menú, también podemos introducir otros elementos como imágenes
(aunque ojo con los trayectos….)

Podemos definir el formato del documento a generar

Y añadir otros datos como el número de página, fecha, etc

Podemos completar campos en el área de resumen (que podemos insertar
también dentro del informe, como podemos ver en la imagen de arriba)

Introducimos nuestros datos

Ahora podemos generar el informa para ver como queda

Tenemos muchas opciones

Elegimos pdf y vemos como queda

Ahora guardaremos el resultado… y se nos genera un fichero como este (en
rojo tomar nota del trayecto que me ha dado un poco de guerra)

<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated by DataVision version 0.8.1 -->
<!-- http://datavision.sourceforge.net -->
<report dtd-version="1.0" name="Listado" title="Tutoriales en Adictosaltrabajo" author="Roberto Canales Mora">
    <description><![CDATA[Lista de los últimos tuturiales]]></description>
    <formula id="1" name=""><![CDATA[]]></formula>
    <paper name="A4" orientation="portrait"/>
    <source>
	<database driverClassName="com.mysql.jdbc.Driver" 
connInfo="jdbc:mysql://localhost/tutoriales" name="tutoriales" username="root"/>
	<query/>
    </source>
    <headers>
	<section height="49.0">
	    <field id="2" type="text">
		<text><![CDATA[Resumen de Tutoriales]]></text>
		<bounds x="61.0" y="10.0" width="288.0" height="34.0"/>
		<format size="18.0" align="center"/>
	    </field>
	    <field id="20" type="image" value="C:\\java\\descarga\\nuevo.gif">
		<bounds x="359.0" y="20.0" width="62.0" height="20.0"/>
	    </field>
	</section>
    </headers>
    <footers>
	<section height="28.0"/>
    </footers>
    <page>
	<headers>
	    <section height="27.0">
		<field id="7" type="text">
		    <text><![CDATA[Descripcion]]></text>
		    <bounds x="136.0" y="7.0" width="120.0" height="16.0"/>
		    <format size="11.0" bold="true" underline="true" align="left"/>
		</field>
		<field id="9" type="text">
		    <text><![CDATA[Titulo]]></text>
		    <bounds x="7.0" y="6.0" width="120.0" height="16.0"/>
		    <format size="11.0" bold="true" underline="true" align="left"/>
		</field>
	    </section>
	</headers>
	<footers>
	    <section height="21.0">
		<field id="1" type="text">
		    <text><![CDATA[Demostración de uso de Datavision en www.adictosaltrabajo.com]]></text>
		    <bounds x="51.0" y="4.0" width="259.0" height="15.0"/>
		    <format size="8.0" italic="true" align="center"/>
		</field>
		<field id="11" type="special" value="page.number">
		    <bounds x="366.0" y="3.0" width="91.0" height="16.0"/>
		</field>
	    </section>
	</footers>
    </page>
    <details>
	<section height="38.0">
	    <field id="6" type="column" value="tutoriales.descripcion">
		<bounds x="135.0" y="14.0" width="354.0" height="16.0"/>
	    </field>
	    <field id="8" type="column" value="tutoriales.titulo">
		<bounds x="6.0" y="13.0" width="120.0" height="18.0"/>
	    </field>
	</section>
    </details>
</report>

Generar los informes en Servlets

Ahora, vamos a crear un servlet que nos devuelva el pdf, generado al vuelo,
que acabamos de diseñar…

Debéis verificar que tenéis en el lib de vuestra web-app los jar necesarios
(incluyendo los drivers de la base de datos)

Escribimos nuestro servlet

/*
 * informes.java
 *
 * Created on 11 de febrero de 2004, 22:53
 */

import java.io.*;
import java.net.*;

import javax.servlet.*;
import javax.servlet.http.*;

import jimm.datavision.*;
import jimm.datavision.layout.*;
import jimm.datavision.layout.pdf.*;

/**
 * @author  Roberto Canales
 */
public class informes extends HttpServlet {

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

        try
        {
            response.setContentType("application/pdf"); // definimos tipo de salida

            Report report = new Report();   // creamos report
            report.setDatabasePassword(""); // ponemos contraseña

            // leemos el report de disco
            InputStream in = this.getClass().getResourceAsStream("ejemplodatavision.xml");

            // creamos el objeto adecuado
            report.read(new InputStreamReader(in));

            // cogemos buffer de salida
            OutputStream out = response.getOutputStream();

            PDFLE le = new PDFLE(out);    // seleccionamos la presentación de salida
            report.setLayoutEngine(le);   // se lo asociamos al report

            report.runReport();           // procesamos la conversión
        }
         catch(Exception e)
         {   // esto es solo un ejemplo... normalmente lo ho haremos así
             System.out.println("Error al procesar sistema " + e.getMessage());
         }

    }

}

Y vemos el resultado en el navegador …….. impresionante

Ahora, vamos a cambiar un poco el código para generar HTML.

Realmente el cambio es mínimo.

/*
 * informes.java
 *
 * Created on 11 de febrero de 2004, 22:53
 */

import java.io.*;
import java.net.*;

import javax.servlet.*;
import javax.servlet.http.*;

import jimm.datavision.*;
import jimm.datavision.layout.*;
import jimm.datavision.layout.pdf.*;

/**
 * @author  Roberto Canales
 */
public class informes extends HttpServlet {

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

        try
        {
            //response.setContentType("application/pdf"); // definimos tipo de salida

            Report report = new Report();   // creamos report
            report.setDatabasePassword(""); // ponemos contraseña

            // leemos el report de disco
            InputStream in = this.getClass().getResourceAsStream("ejemplodatavision.xml");

            // creamos el objeto adecuado
            report.read(new InputStreamReader(in));
	    // seleccionamos la presentación de salida
            LayoutEngine le = new HTMLLE(response.getWriter());
            report.setLayoutEngine(le);   // se lo asociamos al report

            report.runReport();           // procesamos la conversión
        }
         catch(Exception e)
         {   // esto es solo un ejemplo... normalmente lo ho haremos así
             System.out.println("Error al procesar sistema " + e.getMessage());
         }

    }

}

Y tenemos el resultado

Verificamos lo que genera (viendo el fuente del HTML)

<html>
<head>
<!-- Generated by DataVision version 0.8.1 -->
<!-- http://datavision.sourceforge.net -->
<title>Tutoriales en Adictosaltrabajo</title>
</head>
<body bgcolor="white">
<table width="595.27559pt">
<tr height="49.0pt">
<td width="61.0pt">&nbsp;</td>
<td align="center" width="288pt" height="34pt"><font style="font-size: 18.0pt; ">
Resumen de Tutoriales</font></td>
<td width="10.0pt">&nbsp;</td>
<td align="left" width="62pt" height="20pt">
.......... el resto 
<i>Demostración de uso de Datavision en www.adictosaltrabajo.com</i></font></td>
<td width="285.27558999999997pt">&nbsp;</td>
</tr>
</table>
</body>
</html>

Conclusión

¿Podría ser más fácil? Con un par de trucos (patrones de diseño) podemos
hacer que nuestros servlets o JSPs generen todos los tipos de informes de un
modo trivial…

La verdad es que hay que estar agradecido a su creador …… Jim Menard, jimm@io.com

Sobre el
Autor ( del tutorial )…

 

2 COMENTARIOS

  1. HOLA
    esta muy padre tu tuto me agradaria ver si me puedes ayudar estoy haciendo unos reportes con mysql y datavision pero no entoendo como hacer los reportes con paramentros que le de el usuario por ejemplo mostrar la informacion de una base de datos de siertas fecjas elegidas por el usuario y cosas asi

    si me puedes ayudar te lo agradeceria muchisimo te dejo mi mns por si me puedes ayudar
    de antemando gracias muy bueno tu tuto

    algj_122786@hotmail.com

  2. Hola, me pareció interesante el tutorial, estoy comenzando a utilizar el DataVision, actualmente cuento con una base de datos en mysql, la idea es generar \\\»credenciales\\\» en un archivo PDF, con los datos de mi DB, mi duda es en la conexión, cuando me pide los datos el campo de Información de la conexión exactamente qué es lo que tengo que poner?, mi DB la tengo como local es por eso que entiendo el texto de jdbc:mysql://localhost, pero la parte de /tutoriales a que se refiere?

    Gracias de antemano.

DEJA UNA RESPUESTA

Por favor ingrese su comentario!

He leído y acepto la política de privacidad

Por favor ingrese su nombre aquí

Información básica acerca de la protección de datos

  • Responsable:
  • Finalidad:
  • Legitimación:
  • Destinatarios:
  • Derechos:
  • Más información: Puedes ampliar información acerca de la protección de datos en el siguiente enlace:política de privacidad