Sunday, July 29, 2007

Reportes en PDF con Report.net

Después de un buen tiempo lejos del mundo blog, vuelvo para hablar de una herramienta que me ha servido para hacer los reportes PDF en ya 3 sistemas de información, me refiero al open-source Report.net, una librería gratuita hosteada en sourceforge (report.net).

Se trata de una librería .net diseñada en lenguaje c# para generar reportes en PDF mediante asp.net y código puro y duro. Aunque a primera vista report.net puede parecer la vuelta al infierno de la generación de reportes, con una adecuada organización de código, llega a ser una herramienta excepcional para la generación de reportes con resultados que igualan y algunas veces superan a los acostumbrados reporteadores "visuales" tales como clásico Crystal Reports o XtraReports de DevExperience.


¿Ventajas?

Pues uno tiene el control total del reporte, es decir, puede manajar todos los aspectos del reporte, no sólo del cargado de datos, sino la creación dinámica de elementos según la programación lo requiera y defina. La libertad otorgada se resume en la customización completa del resultado del reporte. La librería funciona para las versiones 1.1, 2.0 y 3.0 de .net framework.

¿Desventajas?

Al no contar con una interfaz visual, es necesario definir todos y cada uno de los elementos del reporte, desde una tabla, línea de texto o caja de dibujo hasta una constante para definir los bordes. Se debe tener instalado Adobe Acrobat Reader, sugiero que esté instalada a partir de la versión 5.

¿Que tipo de contenido puedo generar?

Pues casi de todo: tablas, cuadros, adición de imágenes, párrafos, listas, formas, etc. Basta con descargar los ejemplos y ver los resultados que pueden realizarse.


Bueno, creo que es hora de un "Hola mundo". Para ello:

  1. Descargar la librería de aqui...

  2. Adicionar la librería Reports.dll a la carpeta bin de nuestra solución web.

  3. Crear una página asp.net llamada PaginaReporte.aspx y en el code-behind pegar el siguiente código

  4. Correr la página y listo.




using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

using Root.Reports;
using System.Drawing;

public partial class PaginaReporte : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
ReporteEjemplo reporte = new ReporteEjemplo();
RT.ResponsePDF(reporte, this);
}
}

public class ReporteEjemplo:Report
{
FontDef _definicionFuente;
FontProp _propiedadFuente;

protected override void Create()
{
NuevaPagina();
InicializarPropiedadesReporte();
ImprimirHolaMundo();
}

private void InicializarPropiedadesReporte()
{
// Este estilo de fuente debe ser definido sólo una vez
_definicionFuente = new FontDef(this, FontDef.StandardFont.TimesRoman);
_propiedadFuente = new FontProp(_definicionFuente, 10, Color.Navy);
}

private void ImprimirHolaMundo()
{
page_Cur.AddCT_MM(100, 50, new RepString(_propiedadFuente, "Hola mundo... ¿que esperabas?"));
}
internal void NuevaPagina()
{
new Root.Reports.Page(this);
}
}

Espero publicar mas ejemplos de reportes para esta librería los siguientes días para ayudar a aquellos que como yo se han visto en la necesidad de crear reportes de manera gratuita.