<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Crysfel&#039;s Blog &#187; Java</title>
	<atom:link href="http://www.crysfel.com/category/java/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.crysfel.com</link>
	<description>Blog geek</description>
	<lastBuildDate>Wed, 10 Mar 2010 23:16:42 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Generar reporte de una colección de beans con JasperReport</title>
		<link>http://www.crysfel.com/2008/01/21/generar-reporte-de-una-coleccion-de-beans-con-jasperreport/</link>
		<comments>http://www.crysfel.com/2008/01/21/generar-reporte-de-una-coleccion-de-beans-con-jasperreport/#comments</comments>
		<pubDate>Mon, 21 Jan 2008 18:26:04 +0000</pubDate>
		<dc:creator>Crysfel</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Tutoriales]]></category>

		<guid isPermaLink="false">http://www.crysfel.com/index.php/2008/01/21/generar-reporte-de-una-coleccion-de-beans-con-jasperreport/</guid>
		<description><![CDATA[El día de hoy quiero continuar con el tutorial de JasperReport, he explicado una introducción a la estructura principal del reporte, el paso de  parámetros al reporte y como llenar un reporte desde una base de datos incluyendo el Query dentro del jrxml, en esta ocasión explicaré como llenar un reporte por medio de [...]


No related posts.

Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<p>El día de hoy quiero continuar con el tutorial de JasperReport, he explicado <a href="http://www.crysfel.com/index.php/2007/06/19/introduccion-a-jasperreport">una introducción</a> a la estructura principal del reporte, el <a href="http://www.crysfel.com/index.php/2007/10/01/enviar-parametros-a-un-reporte-en-jasperreport">paso de  parámetros</a> al reporte y como llenar un reporte <a href="http://www.crysfel.com/index.php/2008/01/14/generar-reporte-desde-una-base-de-datos-en-jasperreport/">desde una base de datos</a> incluyendo el Query dentro del jrxml, en esta ocasión explicaré como llenar un reporte por medio de una colección de objetos VO o DTO, como mejor los conozcas.</p>
<p><strong>Objetivos.</strong></p>
<ol>
<li>Cómo poner acentos y eñes dentro del reporte jrxml.</li>
<li>Poner una imagen en formato gif.</li>
<li>Generar la fecha actual del sistema y desplegarla en el reporte con un formato legible.</li>
<li>Pasarle la información al reporte por medio de una colección de beans.</li>
<li>Cómo poner títulos a las columnas de la información desplegada.</li>
<li>Realizar un reporte <a href="http://www.crysfel.com/wp-content/uploads/2008/01/plantilla.pdf">como este</a>.</li>
</ol>
<p>Una vez definidos los objetivos se puede apreciar el alcance de este tutorial y así decidir si al lector le conviene continuar con la lectura de este tutorial.</p>
<p><span id="more-55"></span></p>
<p><strong>Cómo poner acentos y eñes.</strong><br />
Lo primero es definir la cabecera del archivo jrxml, y dentro de este especificarle el encode a utilizar dentro del documento, generalmente el encode por de facto es UTF8, pero este encode no soporta los caracteres extendidos, que es donde se encuentran los acentuados y la eñe, es por eso que si no ponemos el encode correcto, al compilar el reporte obtendremos un error, para evitar esto, es necesario indicar que el encode a utilizar sea ISO-8859-1, el cual contiene los caracteres necesarios para el español.</p>
<p><code lang="xml"><br />
<?xml version="1.0" encoding="ISO-8859-1"  ?><br />
<!DOCTYPE jasperReport PUBLIC "//JasperReports//DTD Report Design//EN"<br />
"http://jasperreports.sourceforge.net/dtds/jasperreport.dtd"><br />
<!--======================================================================================== --><br />
<!--===================================== Por Crysfel Villa==================================== --><br />
<!--======================================================================================== --><br />
</code></p>
<p><strong>Paso de parámetros e información.</strong><br />
Lo siguiente es pasarle algunos parámetros para desplegar el titulo, y el subtitulo, además de declararse las Fields de la información a desplegar en el reporte.</p>
<p><code lang="xml"><br />
<jasperReport<br />
		 name="plantilla"<br />
		 pageWidth="595"<br />
		 pageHeight="842"<br />
		 leftMargin="20"<br />
		 rightMargin="20"<br />
		 topMargin="20"<br />
		 bottomMargin="20"></p>
<parameter name="P_TITULO" class="java.lang.String"/>
<parameter name="P_SUBTITULO" class="java.lang.String"/>
<parameter name="LOGO_URL" class="java.lang.String"/>
<p>	<field name="universidad" class="java.lang.String"/><br />
	<field name="rector" class="java.lang.String"/><br />
	<field name="direccion" class="java.lang.String"/><br />
	<field name="alumnos" class="java.lang.Integer"/><br />
</jasperReport><br />
</code></p>
<p>A diferencia del <a href="http://www.crysfel.com/index.php/2008/01/14/generar-reporte-desde-una-base-de-datos-en-jasperreport/">tutorial anterior</a>, únicamente se le ha suprimido el Query que consultaba la base de datos, esto es por que ahora la información se le pasará directamente desde Java por medio de una colección de DTOs (Data Transfer Object).</p>
<p>Más adelante explicaré mas a detalle el paso de información, por ahora basta con declarar la información a desplegar en la parte del detail.</p>
<p><strong>Poner una imagen en formato gif.</strong><br />
En esta sección se definirá el background y la cabecera del documento, en el <a href="http://www.crysfel.com/index.php/2008/01/14/generar-reporte-desde-una-base-de-datos-en-jasperreport/">tutorial anterior</a> explique cómo hacerlo, el día de hoy será exactamente igual con la diferencia de  que en lugar de pasarle una imagen JPG se le pasará una imagen GIF, además de que las medidas y posiciones son diferentes, todo esto escrito en código es:</p>
<p><code lang="xml"><br />
<background><br />
	<band height="67"><br />
		<image><br />
			<reportElement<br />
				x="430"<br />
				y="0"<br />
				width="100"<br />
				height="67"/><br />
			<imageExpression class="java.lang.String"><![CDATA[$P{LOGO_URL}]]&gt;</imageExpression><br />
		</image><br />
	</band><br />
</background><br />
<title><br />
	<band height="90"><br />
		<textField><br />
			<reportElement<br />
				x="0"<br />
				y="40"<br />
				width="530"<br />
				height="30"/><br />
			<textElement><br />
				<font pdfFontName="Helvetica-Bold" size="20" isBold="true"/><br />
			</textElement><br />
		<textFieldExpression   class="java.lang.String"><![CDATA[$P{P_TITULO}]]&gt;</textFieldExpression><br />
		</textField></p>
<line direction="TopDown">
			<reportElement<br />
				x="0"<br />
				y="69"<br />
				width="530"<br />
				height="0"<br />
				key="line"/><br />
			<graphicElement stretchType="NoStretch"/>
		</line>
		<textField><br />
			<reportElement<br />
				x="0"<br />
				y="70"<br />
				width="250"<br />
				height="20"<br />
				key="textField"/><br />
			<textElement><br />
				<font pdfFontName="Helvetica-Bold" size="10"/><br />
			</textElement><br />
		<textFieldExpression   class="java.lang.String"><![CDATA[$P{P_SUBTITULO}]]&gt;</textFieldExpression><br />
		</textField><br />
		<textField pattern="EEEEE dd MMMMM yyyy"><br />
			<reportElement<br />
				x="260"<br />
				y="70"<br />
				width="270"<br />
				height="20"<br />
				key="textField"/><br />
			<textElement textAlignment="Right"><br />
				<font pdfFontName="Helvetica-Bold" size="10"/><br />
			</textElement><br />
		<textFieldExpression   class="java.util.Date"><![CDATA[new java.util.Date()]]&gt;</textFieldExpression><br />
		</textField><br />
	</band><br />
</title><br />
</code></p>
<p>Hasta aquí no hay nada nuevo, excepto que en el campo donde se despliega la fecha, en lugar de sacarla de la base de datos como en el <a href="http://www.crysfel.com/index.php/2008/01/14/generar-reporte-desde-una-base-de-datos-en-jasperreport/">tutorial anterior</a>, ahora se generará directamente en el reporte, esto es muy sencillo de hacer, únicamente hay que crear una instancia de la clase Date dentro de la expresión del campo:</p>
<p><code lang="java"><br />
new java.util.Date()<br />
</code></p>
<p>El formato es exactamente igual al tutorial anterior.</p>
<p><strong>Poner títulos a las columnas.</strong><br />
Anteriormente no se le había agregado cabeceras a las columnas de la información, pero si había mencionado <a href="http://www.crysfel.com/index.php/2007/06/19/introduccion-a-jasperreport">en la introducción</a> que esto es posible, a continuación se muestra cómo por medio de la sección <strong>&lt;columnHeader&gt;</strong> se puede realizar.</p>
<p><code lang="xml"></p>
<columnHeader>
	<band height="20"><br />
		<staticText><br />
			<reportElement x="0" y="0" width="200" height="13" key="staticText"/><br />
			<text><![CDATA[Universidad]]&gt;</text><br />
		</staticText><br />
		<staticText><br />
			<reportElement x="205" y="0" width="150" height="13"/><br />
			<text><![CDATA[Rector]]&gt;</text><br />
		</staticText><br />
		<staticText><br />
			<reportElement x="360" y="0" width="150" height="13"/><br />
			<text><![CDATA[Dirección]]&gt;</text><br />
		</staticText><br />
		<staticText><br />
			<reportElement x="490" y="0" width="100" height="13"/><br />
			<text><![CDATA[Alumnos]]&gt;</text><br />
		</staticText><br />
	</band><br />
</columnHeader>
</code></p>
<p>Si te das cuenta, esta sección no tiene nada especial que no se haya cubierto en los tutoriales anteriores, simplemente son textos estáticos distribuidos en forma linear, es aquí donde se ha necesitado poner acentos, los cuales son correctamente soportados gracias a que se ha especificado el encoding correcto al inicio del documento.</p>
<p><strong>Desplegar la información principal.</strong><br />
Esta es la sección principal del reporte, las columnas donde se muestra la información. En el <a href="http://www.crysfel.com/index.php/2008/01/14/generar-reporte-desde-una-base-de-datos-en-jasperreport/">tutorial anterior</a> explicaba que esta sección es iterada sobre el data source provisto, anteriormente la consulta SQL generaba una colección de información regresada por la base de datos, en esta ocasión la colección se le pasará desde Java. Al diseñar el reporte esto no tiene ninguna implicación, simplemente se acomodan los campos en las posiciones deseadas, todo esto exactamente igual al <a href="http://www.crysfel.com/index.php/2008/01/14/generar-reporte-desde-una-base-de-datos-en-jasperreport/">tutorial anterior</a>, pero con diferente información a desplegar.</p>
<p><code lang="xml"><br />
<detail><br />
	<band height="15"><br />
		<textField><br />
			<reportElement x="0" y="0" width="200" height="13"/><br />
			<textFieldExpression class="java.lang.String"><br />
				<![CDATA[$F{universidad}]]&gt;<br />
			</textFieldExpression><br />
		</textField><br />
		<textField><br />
			<reportElement x="205" y="0" width="150" height="13"/><br />
			<textFieldExpression class="java.lang.String"><br />
				<![CDATA[$F{rector}]]&gt;<br />
			</textFieldExpression><br />
		</textField><br />
		<textField><br />
			<reportElement x="360" y="0" width="150" height="13"/><br />
			<textFieldExpression class="java.lang.String"><br />
				<![CDATA[$F{direccion}]]&gt;<br />
			</textFieldExpression><br />
		</textField><br />
		<textField><br />
			<reportElement x="515" y="0" width="20" height="13"/><br />
			<textFieldExpression class="java.lang.Integer"><br />
				<![CDATA[$F{alumnos}]]&gt;<br />
			</textFieldExpression><br />
		</textField><br />
	</band><br />
</detail><br />
</code></p>
<p><strong>El reporte completo.</strong><br />
Esto es todo en cuanto al diseño del reporte, todo ha sido semejante por no decir igual al reporte del <a href="http://www.crysfel.com/index.php/2008/01/14/generar-reporte-desde-una-base-de-datos-en-jasperreport/">tutorial anterior</a>, únicamente cambiamos el encoding para que aceptara acentos, se le agregó una nueva sección al reporte para desplegar los titulos de las columnas, la fecha se ha generado directamente en el reporte y se suprimió la consulta SQL a la base de dato, el reporte completo es el siguiente.</p>
<p><code lang="xml"><br />
<?xml version="1.0" encoding="ISO-8859-1"  ?><br />
<!DOCTYPE jasperReport PUBLIC "//JasperReports//DTD Report Design//EN"<br />
"http://jasperreports.sourceforge.net/dtds/jasperreport.dtd"><br />
<!--======================================================================================== --><br />
<!--===================================== Por Crysfel Villa==================================== --><br />
<!--======================================================================================== --><br />
<jasperReport<br />
		 name="plantilla"<br />
		 pageWidth="595"<br />
		 pageHeight="842"<br />
		 leftMargin="20"<br />
		 rightMargin="20"<br />
		 topMargin="20"<br />
		 bottomMargin="20"></p>
<parameter name="P_TITULO" class="java.lang.String"/>
<parameter name="P_SUBTITULO" class="java.lang.String"/>
<parameter name="LOGO_URL" class="java.lang.String"/>
<p>	<field name="universidad" class="java.lang.String"/><br />
	<field name="rector" class="java.lang.String"/><br />
	<field name="direccion" class="java.lang.String"/><br />
	<field name="alumnos" class="java.lang.Integer"/></p>
<p>		<background><br />
			<band height="67"><br />
				<image><br />
					<reportElement<br />
						x="430"<br />
						y="0"<br />
						width="100"<br />
						height="67"/><br />
					<imageExpression class="java.lang.String"><![CDATA[$P{LOGO_URL}]]&gt;</imageExpression><br />
				</image><br />
			</band><br />
		</background><br />
		<title><br />
			<band height="90"><br />
				<textField><br />
					<reportElement<br />
						x="0"<br />
						y="40"<br />
						width="530"<br />
						height="30"/><br />
					<textElement><br />
						<font pdfFontName="Helvetica-Bold" size="20" isBold="true"/><br />
					</textElement><br />
				<textFieldExpression   class="java.lang.String"><![CDATA[$P{P_TITULO}]]&gt;</textFieldExpression><br />
				</textField></p>
<line direction="TopDown">
					<reportElement<br />
						x="0"<br />
						y="69"<br />
						width="530"<br />
						height="0"<br />
						key="line"/><br />
					<graphicElement stretchType="NoStretch"/>
				</line>
				<textField><br />
					<reportElement<br />
						x="0"<br />
						y="70"<br />
						width="250"<br />
						height="20"<br />
						key="textField"/><br />
					<textElement><br />
						<font pdfFontName="Helvetica-Bold" size="10"/><br />
					</textElement><br />
				<textFieldExpression   class="java.lang.String"><![CDATA[$P{P_SUBTITULO}]]&gt;</textFieldExpression><br />
				</textField><br />
				<textField pattern="EEEEE dd MMMMM yyyy"><br />
					<reportElement<br />
						x="260"<br />
						y="70"<br />
						width="270"<br />
						height="20"<br />
						key="textField"/><br />
					<textElement textAlignment="Right"><br />
						<font pdfFontName="Helvetica-Bold" size="10"/><br />
					</textElement><br />
				<textFieldExpression   class="java.util.Date"><![CDATA[new java.util.Date()]]&gt;</textFieldExpression><br />
				</textField><br />
			</band><br />
		</title></p>
<columnHeader>
			<band height="20"><br />
				<staticText><br />
					<reportElement x="0" y="0" width="200" height="13" key="staticText"/><br />
					<text><![CDATA[Universidad]]&gt;</text><br />
				</staticText><br />
				<staticText><br />
					<reportElement x="205" y="0" width="150" height="13"/><br />
					<text><![CDATA[Rector]]&gt;</text><br />
				</staticText><br />
				<staticText><br />
					<reportElement x="360" y="0" width="150" height="13"/><br />
					<text><![CDATA[Dirección]]&gt;</text><br />
				</staticText><br />
				<staticText><br />
					<reportElement x="490" y="0" width="100" height="13"/><br />
					<text><![CDATA[Alumnos]]&gt;</text><br />
				</staticText><br />
			</band><br />
		</columnHeader>
		<detail><br />
			<band height="15"><br />
				<textField><br />
					<reportElement x="0" y="0" width="200" height="13"/><br />
					<textFieldExpression class="java.lang.String"><br />
						<![CDATA[$F{universidad}]]&gt;<br />
					</textFieldExpression><br />
				</textField><br />
				<textField><br />
					<reportElement x="205" y="0" width="150" height="13"/><br />
					<textFieldExpression class="java.lang.String"><br />
						<![CDATA[$F{rector}]]&gt;<br />
					</textFieldExpression><br />
				</textField><br />
				<textField><br />
					<reportElement x="360" y="0" width="150" height="13"/><br />
					<textFieldExpression class="java.lang.String"><br />
						<![CDATA[$F{direccion}]]&gt;<br />
					</textFieldExpression><br />
				</textField><br />
				<textField><br />
					<reportElement x="515" y="0" width="20" height="13"/><br />
					<textFieldExpression class="java.lang.Integer"><br />
						<![CDATA[$F{alumnos}]]&gt;<br />
					</textFieldExpression><br />
				</textField><br />
			</band><br />
		</detail></p>
<p></jasperReport><br />
</code></p>
<p>Ahora viene la parte interesante en Java, la cual cambiará muy poco conforme al <a href="http://www.crysfel.com/index.php/2008/01/14/generar-reporte-desde-una-base-de-datos-en-jasperreport/">tutorial anterior</a>.</p>
<p><strong>Generar el reporte con Java.</strong><br />
Para generar el reporte son necesarios cuatro pasos, muy sencillos por cierto. El paso número uno es llenar el data source con la información a enviar, el paso dos compilar el reporte, paso tres llenarlo con la información y parámetros necesarios, paso cuatro exportar el reporte al formato deseado, en este caso pdf.</p>
<p><code lang="java"><br />
package pruebas;<br />
/**<br />
 * Generar un reporte con Jasper Report<br />
 * Por Crysfel Villa Roman<br />
 * 21/01/2008<br />
 *<br />
 * */<br />
import java.util.ArrayList;<br />
import java.util.Collection;<br />
import java.util.HashMap;<br />
import java.util.Map;</p>
<p>import net.sf.jasperreports.engine.JasperCompileManager;<br />
import net.sf.jasperreports.engine.JasperExportManager;<br />
import net.sf.jasperreports.engine.JasperFillManager;<br />
import net.sf.jasperreports.engine.JasperPrint;<br />
import net.sf.jasperreports.engine.JasperReport;<br />
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;</p>
<p>public class JasperReport4{<br />
  public static void main(String[] args){<br />
	String reportName = "plantilla";<br />
	JRBeanCollectionDataSource dataSource;<br />
	JasperReport jasperReport;<br />
    JasperPrint jasperPrint;<br />
    Map pars = new HashMap();<br />
    pars.put("LOGO_URL", "logo.gif");<br />
    pars.put("P_TITULO", "Reporte de universidades inscritas");<br />
    pars.put("P_SUBTITULO", "Región Nor-Este");<br />
    try{<br />
    	//1-Llenar el datasource con la informacion de la base de datos o de donde este, en este caso "hardcode"<br />
    	Collection lista = populateData();<br />
    	dataSource = new JRBeanCollectionDataSource(lista);</p>
<p>    	//2-Compilamos el archivo XML y lo cargamos en memoria<br />
        jasperReport = JasperCompileManager.compileReport(<br />
        		reportName+".jrxml");</p>
<p>        //3-Llenamos el reporte con la información de la coleccion y parámetros necesarios para la consulta<br />
        jasperPrint = JasperFillManager.fillReport(<br />
            jasperReport, pars, dataSource);</p>
<p>        //4-Exportamos el reporte a pdf y lo guardamos en disco<br />
        JasperExportManager.exportReportToPdfFile(<br />
            jasperPrint, reportName+".pdf");</p>
<p>        System.out.println("Done!");<br />
    }catch (Exception e){<br />
      System.out.println(e);<br />
      e.printStackTrace();<br />
    }<br />
  }<br />
  private static Collection populateData(){<br />
	  Collection list = new ArrayList();<br />
	  list.add(new Universidad("Universidad de Montemorelos","Dr. Oscar Castillo","Montemorelos NL.",new Integer(4800)));<br />
	  list.add(new Universidad("Tecnológico de Monterrey","Dr. Jair Acosta","Monterrey NL.",new Integer(10956)));<br />
	  list.add(new Universidad("Universidad Regiomontana","Dr. Meliza Orduñez","Monterrey NL.",new Integer(5200)));<br />
	  list.add(new Universidad("Universidad Autónoma de México","Dr. Carlos Medina","Mexico DF.",new Integer(15700)));<br />
	  list.add(new Universidad("Instituto Politécnico Nacional","Dr. Manuel Obrador","México DF.",new Integer(16380)));<br />
	  list.add(new Universidad("Universidad del Valle de México","Dr. Héctor Solano","México DF.",new Integer(6280)));<br />
	  return list;<br />
  }<br />
}<br />
</code></p>
<p>Lo mas importante a resaltar aquí es la clase <strong>net.sf.jasperreports.engine.data.JRBeanCollectionDataSource</strong> la cual es la encargada de entregar la información al reporte. Esta clase se instancia con una colección de Objetos DTO. En este caso el objeto es Universidad, que contiene las mismas propiedades que el reporte desplegará con sus respectivos getters y setters.</p>
<p>Para ejemplo se ha hardcodeado la información en el método populateData, en la vida real esto no se hace, este método debiera ser implementado de acuerdo a las necesidades del desarrollador, ya sea consultando una base de datos, un webservice, un archivo de texto, etc.</p>
<p>A continuación el bean necesario para llenar el reporte.</p>
<p><code lang="java"><br />
package pruebas;</p>
<p>public class Universidad {<br />
	private String universidad;<br />
	private String rector;<br />
	private String direccion;<br />
	private Integer alumnos;</p>
<p>	//Obligatorio tener un constructor sin parametros.<br />
	public Universidad(){</p>
<p>	}<br />
	//Constructor util para setear las propiedades inicialmente.<br />
	public Universidad(String universidad,String rector,String direccion,Integer alumnos){<br />
		this.universidad = universidad;<br />
		this.rector = rector;<br />
		this.direccion = direccion;<br />
		this.alumnos = alumnos;<br />
	}</p>
<p>	public Integer getAlumnos() {<br />
		return alumnos;<br />
	}</p>
<p>	public void setAlumnos(Integer alumnos) {<br />
		this.alumnos = alumnos;<br />
	}</p>
<p>	public String getDireccion() {<br />
		return direccion;<br />
	}</p>
<p>	public void setDireccion(String direccion) {<br />
		this.direccion = direccion;<br />
	}</p>
<p>	public String getRector() {<br />
		return rector;<br />
	}</p>
<p>	public void setRector(String rector) {<br />
		this.rector = rector;<br />
	}</p>
<p>	public String getUniversidad() {<br />
		return universidad;<br />
	}</p>
<p>	public void setUniversidad(String universidad) {<br />
		this.universidad = universidad;<br />
	}</p>
<p>}<br />
</code></p>
<p>Lo más importante aquí es que las propiedades deben corresponder a los campos declarados en el reporte, de esta manera el motor de JasperReports puede relacionarlas y desplegar la información.</p>
<p>El código es muy claro y sencillo, si se siguen los cuatro pasos no se tendrá problema para generar el reporte, al igual que en los tutoriales anteriores voy a poner el proyecto para eclipse, con el ejemplo, para <a href="http://www.crysfel.com/wp-content/uploads/2008/01/jasperreportbean.rar">ser descargado</a>.</p>
<p>Po último quiero dar una disculpa por referirme tanto al <a href="http://www.crysfel.com/index.php/2008/01/14/generar-reporte-desde-una-base-de-datos-en-jasperreport/">tutorial anterior</a>, pero tanto este como el <a href="http://www.crysfel.com/index.php/2008/01/14/generar-reporte-desde-una-base-de-datos-en-jasperreport/">tutorial anterior</a> son muy semejantes. <img src='http://www.crysfel.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>Saludos.</p>


<p>No related posts.</p>
<p>Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://www.crysfel.com/2008/01/21/generar-reporte-de-una-coleccion-de-beans-con-jasperreport/feed/</wfw:commentRss>
		<slash:comments>47</slash:comments>
		</item>
		<item>
		<title>Generar reporte desde una Base de datos en JasperReport</title>
		<link>http://www.crysfel.com/2008/01/14/generar-reporte-desde-una-base-de-datos-en-jasperreport/</link>
		<comments>http://www.crysfel.com/2008/01/14/generar-reporte-desde-una-base-de-datos-en-jasperreport/#comments</comments>
		<pubDate>Tue, 15 Jan 2008 00:17:16 +0000</pubDate>
		<dc:creator>Crysfel</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Tutoriales]]></category>

		<guid isPermaLink="false">http://www.crysfel.com/index.php/2008/01/14/generar-reporte-desde-una-base-de-datos-en-jasperreport/</guid>
		<description><![CDATA[En este tutorial voy a explicar como generar un reporte en PDF obteniendo la información de una base de datos, si eres realmente nuevo manejando Jasper Reports, te sugiero darle una leída a la introducción y al paso de parámetros.
El reporte que se generará en este tutorial contendrá un listado de facultades que pertenecen a [...]


No related posts.

Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<p>En este tutorial voy a explicar como generar un reporte en PDF obteniendo la información de una base de datos, si eres realmente nuevo manejando Jasper Reports, te sugiero darle una leída a <a href="http://www.crysfel.com/index.php/2007/06/19/introduccion-a-jasperreport">la introducción</a> y al <a href="http://www.crysfel.com/index.php/2007/10/01/enviar-parametros-a-un-reporte-en-jasperreport">paso de parámetros</a>.</p>
<p>El reporte que se generará en este tutorial contendrá un listado de facultades que pertenecen a una determinada universidad, esta información sacada de una base de datos.</p>
<p>La base de datos a utilizar es MySQL 5.0.45, así que es necesario agregar al classpath de tu proyecto el <a href="http://www.mysql.com/products/connector/j/">MySQL Conector</a>, junto con todas las librerías necesarias (mencionadas en <a href="http://www.crysfel.com/index.php/2007/06/19/introduccion-a-jasperreport">la introducción</a>).</p>
<p>Una vez hecho esto, ha comenzar a codificar el JRXML, primero hay que crear el documento y pasarle dos parámetros, el primero es el id de la universidad que queremos generar el reporte, y el segundo parámetro es la url donde esta la imagen del logotipo de la universidad, hasta ahora tenemos.</p>
<p><code lang="xml"><br />
<?xml version="1.0" encoding="UTF-8"  ?><br />
<!DOCTYPE jasperReport PUBLIC "//JasperReports//DTD Report Design//EN" "http://jasperreports.sourceforge.net/dtds/jasperreport.dtd"><br />
<jasperReport<br />
		 name="plantilla"<br />
		 pageWidth="595"<br />
		 pageHeight="842"<br />
		 leftMargin="20"<br />
		 rightMargin="20"<br />
		 topMargin="20"<br />
		 bottomMargin="20"></p>
<parameter name="P_ID_UNIVERSIDAD" class="java.lang.String"/>
<parameter name="LOGO_URL" class="java.lang.String"/>
<p></jasperReport><br />
</code></p>
<p>La estructura de la base de datos es muy simple, consta de dos tablas, una se llama Universidades y la otra se llama Facultades, la tabla Universidades solo tiene tres campos, el id, el nombre de la universidad y el domicilio, la tabla facultades contiene cinco campos, el id, facultad, director, total de alumnos y una relación a la tabla universidades, a continuación muestro el SQL de la base de datos.</p>
<p><span id="more-51"></span></p>
<p><code lang="sql"><br />
--<br />
-- Base de datos: `test`<br />
--</p>
<p>-- --------------------------------------------------------</p>
<p>--<br />
-- Estructura de tabla para la tabla `facultades`<br />
--</p>
<p>CREATE TABLE `facultades` (<br />
  `id_facultad` int(10) unsigned NOT NULL auto_increment,<br />
  `id_universidad` int(10) unsigned NOT NULL,<br />
  `facultad` varchar(200) NOT NULL,<br />
  `director` varchar(200) NOT NULL,<br />
  `alumnos` int(11) NOT NULL,<br />
  PRIMARY KEY  (`id_facultad`),<br />
  KEY `id_universidad` (`id_universidad`)<br />
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=10 ;</p>
<p>--<br />
-- Volcar la base de datos para la tabla `facultades`<br />
--</p>
<p>INSERT INTO `facultades` VALUES (1, 1, 'Facultad de Ingeniería y Tecnología', 'Pedro Mejia', 251);<br />
INSERT INTO `facultades` VALUES (2, 1, 'Facultad de Artes y Comunicación', 'Imelda Torrez', 193);<br />
INSERT INTO `facultades` VALUES (3, 1, 'Facultad de Ciencias de la Salud', 'Oscar Ochoa', 428);<br />
INSERT INTO `facultades` VALUES (4, 1, 'Facultad de Educación', 'Lorena Mena', 173);<br />
INSERT INTO `facultades` VALUES (5, 1, 'Facultad de Ciencias Sociales', 'Alfonso Reyes', 95);<br />
INSERT INTO `facultades` VALUES (6, 1, 'Facultad de Teología', 'Emanuel Perez', 162);<br />
INSERT INTO `facultades` VALUES (7, 2, 'Facultad de Comunicacion', 'Hector Solano', 320);<br />
INSERT INTO `facultades` VALUES (8, 2, 'Facultad de Diseño', 'Sergio Monrroy', 245);<br />
INSERT INTO `facultades` VALUES (9, 2, 'Facultad de Salud', 'Juana Salazar', 562);</p>
<p>-- --------------------------------------------------------</p>
<p>--<br />
-- Estructura de tabla para la tabla `universidades`<br />
--</p>
<p>CREATE TABLE `universidades` (<br />
  `id_universidad` int(10) unsigned NOT NULL auto_increment,<br />
  `nombre` varchar(200) NOT NULL,<br />
  `domicilio` varchar(250) NOT NULL,<br />
  PRIMARY KEY  (`id_universidad`)<br />
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ;</p>
<p>--<br />
-- Volcar la base de datos para la tabla `universidades`<br />
--</p>
<p>INSERT INTO `universidades` VALUES (1, 'Universidad de Montemorelos', 'Montemorelos NL MX');<br />
INSERT INTO `universidades` VALUES (2, 'Tecnológico de Monterrey', 'Monterrey NL MX');<br />
INSERT INTO `universidades` VALUES (3, 'Universidad del Valle de Mexico', 'Mexico DF MX');<br />
INSERT INTO `universidades` VALUES (4, 'Universidad Regiomontana', 'Monterrey NL MX');</p>
<p>--<br />
-- Filtros para las tablas descargadas (dump)<br />
--</p>
<p>--<br />
-- Filtros para la tabla `facultades`<br />
--<br />
ALTER TABLE `facultades`<br />
  ADD CONSTRAINT `facultades_ibfk_1` FOREIGN KEY (`id_universidad`) REFERENCES `universidades` (`id_universidad`) ON DELETE CASCADE ON UPDATE CASCADE;<br />
</code></p>
<p>El siguiente paso es hacer el Query con el que se llenará la información, en este caso será el siguiente.</p>
<p><code lang="sql"><br />
SELECT U.nombre AS universidad, U.domicilio, CURDATE( ) AS fecha, F.facultad, F.director, F.alumnos<br />
FROM facultades F, universidades U<br />
WHERE U.id_universidad = F.id_universidad<br />
AND U.id_universidad =1<br />
</code></p>
<p>He sacado la fecha del sistema para mostrar como dar formato a una fecha en JasperReport. Ahora hay que introducir el Query al reporte y pasarle el parámetro necesario para que podamos sacar dinámicamente, desde Java, la universidad que queramos.</p>
<p><code lang="xml"><br />
<queryString><![CDATA[<br />
		SELECT  U.nombre AS universidad, U.domicilio, CURDATE() AS fecha, F.facultad, F.director, F.alumnos<br />
		FROM facultades F, universidades U<br />
		WHERE U.id_universidad = F.id_universidad<br />
		AND U.id_universidad = $P{P_ID_UNIVERSIDAD}]]&gt;<br />
</queryString></p>
<p><field name="universidad" class="java.lang.String"/><br />
<field name="domicilio" class="java.lang.String"/><br />
<field name="fecha" class="java.util.Date"/><br />
<field name="facultad" class="java.lang.String"/><br />
<field name="director" class="java.lang.String"/><br />
<field name="alumnos" class="java.lang.Integer"/><br />
</code></p>
<p>La etiqueta <queryString/> es la que almacena el Query que se ejecutará cuando el reporte sea mandado a llenar desde Java. Algo importante a mencionar es que se han creado varias <strong>field</strong> (campos), uno para cada campo regresado por el Query, el <strong>name</strong> de cada campo <strong>debe coincidir</strong> con los <strong>capos o alias devueltos por el Query</strong>, de esta manera se puede accesar a la información y colocarla en el reporte.</p>
<p>Como he mencionado en <a href="http://www.crysfel.com/index.php/2007/06/19/introduccion-a-jasperreport">la introducción</a> hay varias secciones en un reporte, y una de ellas es el background, hasta ahora no he mencionado nada sobre esta sección, pero como su nombre lo indica, esta sección es el fondo del documento, aquí se puede poner la plantilla de la empresa, o cualquier cosa, en este caso se pondrá una imagen que es el logotipo de la universidad, todo esto resumido en código queda de la siguiente manera.</p>
<p><code lang="xml"><br />
<background><br />
	<band height="41"><br />
		<image><br />
			<reportElement<br />
				x="500"<br />
				y="0"<br />
				width="33"<br />
				height="38"/><br />
			<imageExpression class="java.lang.String"><![CDATA[$P{LOGO_URL}]]&gt;</imageExpression><br />
		</image><br />
	</band><br />
</background><br />
</code></p>
<p>Para poner una imagen se utiliza la etiqueta <strong>&lt;image&gt;</strong> y la url se le pasa mediante el parámetro <strong>$P{LOGO_URL}</strong>.</p>
<p>La siguiente sección es el titulo del documento, aquí se pondra con letras grandes el nombre de la universidad, el domicilio y la fecha en que se ha generado el reporte, además de una línea divisoria, esto se hace de la siguiente manera.</p>
<p><code lang="xml"><br />
<title><br />
	<band height="70"><br />
		<textField><br />
			<reportElement<br />
				x="0"<br />
				y="20"<br />
				width="530"<br />
				height="30"/><br />
			<textElement><br />
				<font pdfFontName="Helvetica-Bold" size="20" isBold="true"/><br />
			</textElement><br />
		<textFieldExpression   class="java.lang.String"><![CDATA[$F{universidad}]]&gt;</textFieldExpression><br />
		</textField></p>
<line direction="TopDown">
			<reportElement<br />
				x="0"<br />
				y="49"<br />
				width="530"<br />
				height="0"<br />
				key="line"/><br />
			<graphicElement stretchType="NoStretch"/>
		</line>
		<textField><br />
			<reportElement<br />
				x="0"<br />
				y="50"<br />
				width="250"<br />
				height="20"<br />
				key="textField"/><br />
			<textElement><br />
				<font pdfFontName="Helvetica-Bold" size="10"/><br />
			</textElement><br />
		<textFieldExpression   class="java.lang.String"><![CDATA[$F{domicilio}]]&gt;</textFieldExpression><br />
		</textField><br />
		<textField pattern="EEEEE dd MMMMM yyyy"><br />
			<reportElement<br />
				x="260"<br />
				y="50"<br />
				width="270"<br />
				height="20"<br />
				key="textField"/><br />
			<textElement textAlignment="Right"><br />
				<font pdfFontName="Helvetica-Bold" size="10"/><br />
			</textElement><br />
		<textFieldExpression   class="java.util.Date"><![CDATA[$F{fecha}]]&gt;</textFieldExpression><br />
		</textField><br />
	</band><br />
</title><br />
</code></p>
<p>No me voy a detener a explicar la parte de la interface pues esto lo he explicado en <a href="http://www.crysfel.com/index.php/2007/10/01/enviar-parametros-a-un-reporte-en-jasperreport">el paso de parámetros a un reporte</a>, lo que si hay que tomar en cuenta es que a diferencia del tutorial anterior, ahora, en lugar de imprimir parámetros se esta imprimiendo lo que proviene de la base de datos, mediante <strong>$F{universidad}</strong>, mediante el operador <strong>$F{}</strong> se accesa a los campos declarados en el Query, únicamente se escribe dentro de las llaves el nombre del campo a acceder.</p>
<p>Otra diferencia a notar es que al textfield de la fecha se le agrego una propiedad <strong>pattern=&#8221;EEEEE dd MMMMM yyyy&#8221;</strong>, este patrón se puede cambiar al gusto, es posible poner algo como &#8220;dd/MM/yyyy&#8221; para desplegar la fecha en formato &#8220;21/10/2008&#8243;.</p>
<p>Ahora la última parte interesante de este tutorial es la sección “detail”. Es aquí donde se desplegará la información del reporte, esta queda de la siguiente manera.</p>
<p><code lang="xml"><br />
<detail><br />
	<band height="15"><br />
		<textField><br />
			<reportElement x="0" y="0" width="200" height="13"/><br />
			<textFieldExpression class="java.lang.String"><br />
			<![CDATA[$F{facultad}]]&gt;<br />
			</textFieldExpression><br />
		</textField><br />
		<textField><br />
			<reportElement x="205" y="0" width="200" height="13"/><br />
			<textFieldExpression class="java.lang.String"><br />
				<![CDATA[$F{director}]]&gt;<br />
			</textFieldExpression><br />
		</textField><br />
		<textField><br />
			<reportElement x="410" y="0" width="20" height="13"/><br />
			<textFieldExpression class="java.lang.Integer"><br />
				<![CDATA[$F{alumnos}]]&gt;<br />
			</textFieldExpression><br />
		</textField><br />
	</band><br />
</detail><br />
</code></p>
<p>Como se puede ver, solo se han declarado tres textfields, y se ha impreso en ellas lo que proviene de la base de datos, esta sección es diferente a todas las demás, pues esta sección itera el resultset (en este caso) o bien un listado de beans enviado desde Java.</p>
<p>Ya esta listo el reporte, que al final queda de la siguiente manera.</p>
<p><code lang="xml"><br />
<?xml version="1.0" encoding="UTF-8"  ?><br />
<!DOCTYPE jasperReport PUBLIC "//JasperReports//DTD Report Design//EN"<br />
"http://jasperreports.sourceforge.net/dtds/jasperreport.dtd"><br />
<!--======================================================================================== --><br />
<!--===================================== Por Crysfel Villa==================================== --><br />
<!--======================================================================================== --><br />
<jasperReport<br />
		 name="plantilla"<br />
		 pageWidth="595"<br />
		 pageHeight="842"<br />
		 leftMargin="20"<br />
		 rightMargin="20"<br />
		 topMargin="20"<br />
		 bottomMargin="20"></p>
<parameter name="P_ID_UNIVERSIDAD" class="java.lang.String"/>
<parameter name="LOGO_URL" class="java.lang.String"/>
<p>	<queryString><![CDATA[<br />
		SELECT  U.nombre AS universidad, U.domicilio, CURDATE() AS fecha, F.facultad, F.director, F.alumnos<br />
		FROM facultades F, universidades U<br />
		WHERE U.id_universidad = F.id_universidad<br />
		AND U.id_universidad = $P{P_ID_UNIVERSIDAD}]]&gt;<br />
	</queryString></p>
<p>	<field name="universidad" class="java.lang.String"/><br />
	<field name="domicilio" class="java.lang.String"/><br />
	<field name="fecha" class="java.util.Date"/><br />
	<field name="facultad" class="java.lang.String"/><br />
	<field name="director" class="java.lang.String"/><br />
	<field name="alumnos" class="java.lang.Integer"/></p>
<p>		<background><br />
			<band height="41"><br />
				<image><br />
					<reportElement<br />
						x="500"<br />
						y="0"<br />
						width="33"<br />
						height="38"/><br />
					<imageExpression class="java.lang.String"><![CDATA[$P{LOGO_URL}]]&gt;</imageExpression><br />
				</image><br />
			</band><br />
		</background><br />
		<title><br />
			<band height="70"><br />
				<textField><br />
					<reportElement<br />
						x="0"<br />
						y="20"<br />
						width="530"<br />
						height="30"/><br />
					<textElement><br />
						<font pdfFontName="Helvetica-Bold" size="20" isBold="true"/><br />
					</textElement><br />
				<textFieldExpression   class="java.lang.String"><![CDATA[$F{universidad}]]&gt;</textFieldExpression><br />
				</textField></p>
<line direction="TopDown">
					<reportElement<br />
						x="0"<br />
						y="49"<br />
						width="530"<br />
						height="0"<br />
						key="line"/><br />
					<graphicElement stretchType="NoStretch"/>
				</line>
				<textField><br />
					<reportElement<br />
						x="0"<br />
						y="50"<br />
						width="250"<br />
						height="20"<br />
						key="textField"/><br />
					<textElement><br />
						<font pdfFontName="Helvetica-Bold" size="10"/><br />
					</textElement><br />
				<textFieldExpression   class="java.lang.String"><![CDATA[$F{domicilio}]]&gt;</textFieldExpression><br />
				</textField><br />
				<textField pattern="EEEEE dd MMMMM yyyy"><br />
					<reportElement<br />
						x="260"<br />
						y="50"<br />
						width="270"<br />
						height="20"<br />
						key="textField"/><br />
					<textElement textAlignment="Right"><br />
						<font pdfFontName="Helvetica-Bold" size="10"/><br />
					</textElement><br />
				<textFieldExpression   class="java.util.Date"><![CDATA[$F{fecha}]]&gt;</textFieldExpression><br />
				</textField><br />
			</band><br />
		</title></p>
<p>		<detail><br />
			<band height="15"><br />
				<textField><br />
					<reportElement x="0" y="0" width="200" height="13"/><br />
					<textFieldExpression class="java.lang.String"><br />
						<![CDATA[$F{facultad}]]&gt;<br />
					</textFieldExpression><br />
				</textField><br />
				<textField><br />
					<reportElement x="205" y="0" width="200" height="13"/><br />
					<textFieldExpression class="java.lang.String"><br />
						<![CDATA[$F{director}]]&gt;<br />
					</textFieldExpression><br />
				</textField><br />
				<textField><br />
					<reportElement x="410" y="0" width="20" height="13"/><br />
					<textFieldExpression class="java.lang.Integer"><br />
						<![CDATA[$F{alumnos}]]&gt;<br />
					</textFieldExpression><br />
				</textField><br />
			</band><br />
		</detail></p>
<p></jasperReport><br />
</code></p>
<p>Lo siguiente es compilar el jrxml y generar el pdf mediante java, esto es muy sencillo y se logra con muy pocas lineas de código.</p>
<p><code lang="java"><br />
package pruebas;<br />
/**<br />
 * Generar un reporte con Jasper Report<br />
 * Por Crysfel Villa Roman<br />
 * 14/01/2008<br />
 *<br />
 * */<br />
import java.sql.Connection;<br />
import java.sql.DriverManager;<br />
import java.util.HashMap;<br />
import java.util.Map;</p>
<p>import net.sf.jasperreports.engine.JREmptyDataSource;<br />
import net.sf.jasperreports.engine.JasperCompileManager;<br />
import net.sf.jasperreports.engine.JasperExportManager;<br />
import net.sf.jasperreports.engine.JasperFillManager;<br />
import net.sf.jasperreports.engine.JasperPrint;<br />
import net.sf.jasperreports.engine.JasperReport;</p>
<p>public class JasperReport2{<br />
  public static void main(String[] args){<br />
	String reportName = "plantilla";<br />
	JasperReport jasperReport;<br />
    JasperPrint jasperPrint;<br />
    Map pars = new HashMap();<br />
    pars.put("LOGO_URL", "logo.jpg");<br />
    pars.put("P_ID_UNIVERSIDAD", "1");<br />
    try{<br />
    	//1-Se hace la conexion a la Base de Datos<br />
    	Class.forName("com.mysql.jdbc.Driver");<br />
    	Connection conn = DriverManager.getConnection ("jdbc:mysql://localhost:3306/test?user=root&#038;password=la_password_del_servidor");</p>
<p>    	//2-Compilamos el archivo XML y lo cargamos en memoria<br />
        jasperReport = JasperCompileManager.compileReport(<br />
        		reportName+".jrxml");</p>
<p>        //3-Llenamos el reporte con la información (de la DB) y parámetros necesarios para la consulta<br />
        jasperPrint = JasperFillManager.fillReport(<br />
            jasperReport, pars, conn);</p>
<p>        //4-Exportamos el reporte a pdf y lo guardamos en disco<br />
        JasperExportManager.exportReportToPdfFile(<br />
            jasperPrint, reportName+".pdf");</p>
<p>        //5-Cerrar la conexion<br />
        conn.close();</p>
<p>        System.out.println("Done!");<br />
    }catch (Exception e){<br />
      System.out.println(e);<br />
      e.printStackTrace();<br />
    }<br />
  }<br />
}<br />
</code></p>
<p>Primero es necesario conectarse a la base de datos, puede ser cualquier base de datos, pero en este ejemplo es MySQL.<br />
El segundo paso es compilar el reporte.<br />
El tercer paso es llenar el reporte con la información de la base de datos y pasarle los parámetros necesarios.<br />
El cuarto paso es exportarlo al formato deseado.<br />
Por ultimo se cierra la conexión a la base de datos.</p>
<p>A diferencia de los tutoriales anteriores en este voy a poner el proyecto configurado con las librerías y códigos necesarios, para que lo instales en el eclipse y lo puedas ejecutar, esto por que en los tutoriales pasados algunas personas no pudieron completar el tutorial, el proyecto lo puedes <a href='http://www.crysfel.com/wp-content/uploads/2008/01/jasperreportdb.rar' title='jasperreportdb.rar'>descargar desde aqui</a>.</p>
<p>Saludos.</p>


<p>No related posts.</p>
<p>Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://www.crysfel.com/2008/01/14/generar-reporte-desde-una-base-de-datos-en-jasperreport/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>Enviar parámetros a un reporte en JasperReport</title>
		<link>http://www.crysfel.com/2007/10/01/enviar-parametros-a-un-reporte-en-jasperreport/</link>
		<comments>http://www.crysfel.com/2007/10/01/enviar-parametros-a-un-reporte-en-jasperreport/#comments</comments>
		<pubDate>Mon, 01 Oct 2007 22:43:01 +0000</pubDate>
		<dc:creator>Crysfel</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Tutoriales]]></category>

		<guid isPermaLink="false">http://www.crysfel.com/index.php/2007/10/01/enviar-parametros-a-un-reporte-en-jasperreport/</guid>
		<description><![CDATA[Hoy quiero continuar el tema de generar reportes pdf por medio de JasperReports, este tutorial es mas avanzado que el anterior, así que te sugiero leer la introducción en caso de que seas realmente nuevo con esta herramienta.
Goals
Hoy tratare el tema de paso de parámetros al reporte, y se definiran algunos conceptos claves, al igual [...]


No related posts.

Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<p>Hoy quiero continuar el tema de generar reportes pdf por medio de JasperReports, este tutorial es mas avanzado que el anterior, así que te sugiero leer <a href="http://www.crysfel.com/index.php/2007/06/19/introduccion-a-jasperreport/">la introducción</a> en caso de que seas realmente nuevo con esta herramienta.</p>
<p><strong>Goals</strong><br />
Hoy tratare el tema de paso de parámetros al reporte, y se definiran algunos conceptos claves, al igual que se hará un plantilla donde se mostrara como dar formato a texto entre otras cosas mas.</p>
<p>Para comenzar es necesario poner el enviroment adecuado, ya sabes, agregar al classpath las librerías requeridas (Señaladas en <a href="http://www.crysfel.com/index.php/2007/06/19/introduccion-a-jasperreport/">la introducción</a>), luego de esto creamos un archivo de texto llamado <strong>plantilla.jrxml</strong> y nos disponemos a diseñar la plantilla por medio de xml.</p>
<p><strong>Preparando el papel</strong><br />
Para este tutorial se va a realizar un reporte que muestre los alumnos de una carrera x de una universidad z, no voy a pasarle la información de los alumnos, solo la información necesaria para generar una plantilla, El primer paso es agregar la cabecera y configurar el nodo principal.</p>
<p><span id="more-40"></span></p>
<p><code lang="xml"><br />
<?xml version="1.0"?><br />
<!DOCTYPE jasperReport<br />
  PUBLIC "-//JasperReports//DTD Report Design//EN"<br />
  "http://jasperreports.sourceforge.net/dtds/jasperreport.dtd"></p>
<p><jasperReport name="Plantilla"<br />
         pageWidth="595"<br />
         pageHeight="842"<br />
         leftMargin="20"<br />
         rightMargin="20"<br />
         topMargin="20"<br />
         bottomMargin="20"></p>
<p></jasperReport><br />
</code></p>
<p>Si te das cuenta, se le han especificado algunas propiedades, tales como el ancho, el largo y los márgenes de la pagina, estos datos corresponden a una hoja tamaño carta, los márgenes los puedes poner al gusto, dependiendo tus necesidades.</p>
<p><strong>Los parametros</strong><br />
Ahora viene una de las partes mas importantes de este tutorial, y es que continuación se define dentro de la plantilla los parámetros a utilizar, hay que aclarar que los parámetros no es el contenido principal del reporte, simplemente es información útil para mostrar en el reporte, por ejemplo la fecha en que se genera el reporte, o el periodo que se esta desplegando en el reporte, el autor o cosas semejantes, son parámetros importantes del reporte, pero no la información principal del reporte, con esto en cuenta se definen los parámetros a utilizar.</p>
<p><code lang="xml"></p>
<parameter name="P_INSTITUCION" class="java.lang.String"/>
<parameter name="P_FACULTAD" class="java.lang.String"/>
<parameter name="P_CARRERA" class="java.lang.String"/>
</code></p>
<p>Como puedes ver se utiliza la etiqueta <strong>&lt;parameter /&gt;</strong> la cual tiene dos propiedades, <strong>name</strong> que es el nombre o identificador con la que se hará referencia, y <strong>el tipo de dato</strong> que es, en este caso String, es importante mencionar que se debe escribir el paquete exacto donde se encuentra la clase.</p>
<p><strong>La cabecera</strong><br />
Para la cabecera se mostrara el nombre de la institución en letras grandes y sobresalientes, se dibujara una línea horizontal debajo del nombre de la institución, se mostrara la facultad y la carrera. Todo esto lo pondremos dentro de la sección <strong>&lt;title/&gt;</strong> ya que esta únicamente se muestra una vez en el reporte, si existiese mas de una página, esto se muestra solo en la primera.</p>
<p><code lang="xml"><br />
<title><br />
  	<band height="50"><br />
	<!-- AQUI DECLARAMOS EL CONTENIDO --><br />
</band><br />
</title><br />
</code></p>
<p>El único detalle a comentar es que se ha declarado la propiedad height de &#8220;50&#8243;, esto significa que todo el contenido debe ser menor o igual a 50 pixeles, es importante tener en cuenta este dato y no superarlo con el contenido, de lo contrario tendremos un error a la hora de compilar el jrxml.</p>
<p>Como el texto será dinámico, pues desde nuestra aplicación le pasaremos la información, utilizaremos un <strong>textField</strong>, declarándolo de esta manera.</p>
<p><code lang="xml"><br />
<textField><br />
  <reportElement x="0" y="0" width="530" height="30" /><br />
  <textElement><br />
	<font pdfFontName="Helvetica-Bold" size="20" isBold="true"/><br />
  </textElement><br />
  <textFieldExpression class="java.lang.String"><br />
  	<![CDATA[$P{P_INSTITUCION}]]&gt;<br />
  </textFieldExpression><br />
</textField><br />
</code></p>
<p>El código esta más que entendible, primero se especifica las coordenadas y dimensiones del textField, opcionalmente se da formato a la tipografía del textField mediante el bloque<strong> &lt;textElement&gt; </strong>por último la parte más importante, la expresión que contendrá el textField <strong>&lt;textFieldExpression&gt;</strong>, es importante mencionar que se debe especificar la clase que contendrá esta expresión, en este caso es un String, dentro de CDATA se puede concatenar inclusive varios parámetros, en este caso solo estamos poniendo el parámetro P_INSTITUCION.</p>
<p>Una cosa mas que conviene mencionar es que para poder acceder a los parámetros se hace mediante $P{NOMBRE_DEL_PARAMETRO} dende se sustituye el nombre del parámetro que se quiera accesar.</p>
<p>Es el turno de hacer una línea, es muy sencillo, simplemente hacemos lo siguiente.</p>
<p><code lang="xml"></p>
<line direction="TopDown">
  <reportElement x="0" y="29" width="530" height="0" />
</line>
</code></p>
<p>Aquí solo se declara la linea mediante la etiqueta<strong> &lt;line&gt;</strong> luego le especificamos las coordenadas y dimensiones donde estará posicionada.</p>
<p>Para los otros dos parámetros se hace exactamente igual que el anterior, con la diferencia que se le cambian las coordenadas, dimensiones, formato de letra y pasarle el parámetro correcto.</p>
<p>Al final el jrxml debe quedar algo asi:</p>
<p><code lang="xml"><br />
<?xml version="1.0"?><br />
<!DOCTYPE jasperReport<br />
  PUBLIC "-//JasperReports//DTD Report Design//EN"<br />
  "http://jasperreports.sourceforge.net/dtds/jasperreport.dtd"><br />
<jasperReport name="plantilla"<br />
         pageWidth="595"<br />
         pageHeight="842"<br />
         leftMargin="20"<br />
         rightMargin="20"<br />
         topMargin="20"<br />
         bottomMargin="20"></p>
<parameter name="P_INSTITUCION" class="java.lang.String"/>
<parameter name="P_FACULTAD" class="java.lang.String"/>
<parameter name="P_CARRERA" class="java.lang.String"/>
<p>  <title><br />
  	<band height="50"><br />
  	  <textField><br />
		<reportElement x="0" y="0" width="530" height="30" /><br />
		  <textElement><br />
			<font pdfFontName="Helvetica-Bold" size="20" isBold="true"/><br />
		  </textElement><br />
		  <textFieldExpression class="java.lang.String"><br />
		  	<![CDATA[$P{P_INSTITUCION}]]&gt;<br />
		  </textFieldExpression><br />
	  </textField></p>
<line direction="TopDown">
		<reportElement x="0" y="29" width="530" height="0" />
	  </line>
	  <textField isStretchWithOverflow="false" isBlankWhenNull="false" evaluationTime="Now" hyperlinkType="None"  hyperlinkTarget="Self" ><br />
		<reportElement x="0" y="30" width="250" height="20" /><br />
		  <textElement><br />
			<font pdfFontName="Helvetica-Bold" size="10" /><br />
		  </textElement><br />
		  <textFieldExpression class="java.lang.String"><br />
		  	<![CDATA[$P{P_FACULTAD}]]&gt;<br />
		  </textFieldExpression><br />
	  </textField><br />
	  <textField isStretchWithOverflow="false" isBlankWhenNull="false" evaluationTime="Now" hyperlinkType="None"  hyperlinkTarget="Self" ><br />
		<reportElement x="260" y="30" width="270" height="20" /><br />
		  <textElement  textAlignment="Right"><br />
			<font pdfFontName="Helvetica-Bold" size="10" /><br />
		  </textElement><br />
		  <textFieldExpression class="java.lang.String"><br />
		  	<![CDATA[$P{P_CARRERA}]]&gt;<br />
		  </textFieldExpression><br />
	  </textField><br />
  	</band><br />
  </title><br />
  <detail><br />
    <band height="200"></p>
<p>    </band><br />
  </detail><br />
</jasperReport><br />
</code></p>
<p>Una vez diseñado el reporte se necesita compilar y generar el archivo jasper, luego se  le pasan los parámetros y se exporta al formato deseado, en este caso se exportara a PDF.</p>
<p>El código necesario para realizar lo anterior es muy sencillo, es el siguiente.</p>
<p><code lang="java"><br />
package pruebas;</p>
<p>import java.util.HashMap;<br />
import java.util.Map;</p>
<p>import net.sf.jasperreports.engine.JREmptyDataSource;<br />
import net.sf.jasperreports.engine.JRException;<br />
import net.sf.jasperreports.engine.JasperCompileManager;<br />
import net.sf.jasperreports.engine.JasperExportManager;<br />
import net.sf.jasperreports.engine.JasperFillManager;<br />
import net.sf.jasperreports.engine.JasperPrint;</p>
<p>public class JasperReport2{<br />
  public static void main(String[] args){</p>
<p>    try{<br />
    	//1. Se compila el reporte<br />
    	JasperCompileManager.compileReportToFile("plantilla.jrxml");</p>
<p>    	//2. Se llena el reporte con la informacion necesaria<br />
    	Map pars = new HashMap();<br />
    	pars.put("P_INSTITUCION", "Universidad de Montemorelos");<br />
    	pars.put("P_FACULTAD", "Facultad de Ingeniería Tecnología");<br />
    	pars.put("P_CARRERA", "Ingeniería en Sistemas Computacionales");</p>
<p>    	JasperPrint jasperPrint = JasperFillManager.fillReport(<br />
    			"plantilla.jasper", pars, new JREmptyDataSource());</p>
<p>    	//3. Se exporta a PDF<br />
    	JasperExportManager.exportReportToPdfFile(<br />
    	          jasperPrint, "plantilla.pdf");</p>
<p>    	System.out.println("Done!");<br />
    }<br />
    catch (JRException e)<br />
    {<br />
      e.printStackTrace();<br />
    }<br />
  }</p>
<p>}<br />
</code></p>
<p>Si te has dado cuenta, en el punto numero dos, se ha creado un HashMap, donde como llave contiene el nombre del parámetro, esto es muy importante, especificarle correctamente el nombre, de lo contrario no sucederá nada.</p>
<p>Pues bien, esto ha sido todo por hoy, creo que con esto queda claro como pasar parámetros a un reporte.</p>


<p>No related posts.</p>
<p>Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://www.crysfel.com/2007/10/01/enviar-parametros-a-un-reporte-en-jasperreport/feed/</wfw:commentRss>
		<slash:comments>28</slash:comments>
		</item>
		<item>
		<title>Conceptos de programación Orientada a Objetos (POO)</title>
		<link>http://www.crysfel.com/2007/07/29/conceptos-de-programacion-orientada-a-objetos-poo/</link>
		<comments>http://www.crysfel.com/2007/07/29/conceptos-de-programacion-orientada-a-objetos-poo/#comments</comments>
		<pubDate>Sun, 29 Jul 2007 18:55:03 +0000</pubDate>
		<dc:creator>Crysfel</dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://www.crysfel.com/index.php/2007/07/29/conceptos-de-programacion-orientada-a-objetos-poo/</guid>
		<description><![CDATA[
El día de hoy quiero compartir este organizador grafico llamado telaraña, su objetivo es describir una idea central, sea una cosa, un concepto, un proceso o un asunto, en este caso estoy mostrando los conceptos del paradigma de la programación orientada a objetos, en esta entrada se habla más a detalle, ademas puedes descargar la [...]


No related posts.

Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.crysfel.com/common/ejemplos/conceptosPoo/tns.jpg" alt="Conceptos de Programación Orientada a Objetos" /></p>
<p>El día de hoy quiero compartir este organizador grafico llamado telaraña, su objetivo es describir una idea central, sea una cosa, un concepto, un proceso o un asunto, en este caso estoy mostrando los conceptos del paradigma de la programación orientada a objetos, en esta entrada se habla más a detalle, ademas puedes descargar la <a href="http://www.crysfel.com/common/ejemplos/conceptosPoo/poo.ppt">presentación en ppt</a> y <a href="http://www.crysfel.com/common/ejemplos/conceptosPoo/conceptos.jpg">una imagen jpg</a> con mayor resolución.</p>
<p><span id="more-36"></span></p>
<p><strong>La abstracción</strong><br />
Es la capacidad de concentrar las propiedades y comportamientos necesarios para la correcta representación del objeto dentro del sistema, otra definición es que consiste en el aislamiento conceptual de una propiedad de un objeto.</p>
<p>En otras palabras, cuando modelamos pensando en objetos, necesitamos tomar las características y propiedades de un ente real, y llevarlo a un objeto, por ejemplo en una escuela existen alumnos, estos tienen diferentes propiedades (miles), pero existen algunas que caracterizan a todos los estudiante, estas son las que debemos tomar, por ejemplo, un estudiante tiene una matricula, tiene materias, tiene un grado, un curso, una calificación, y muchas cosas mas, dependiendo del sistema que este en cuestión, serán las propiedades que se tomaran en cuenta, a esto se le llama abstracción.</p>
<p><strong>Encapsulamiento</strong><br />
Las propiedades son privadas, accesadas mediante métodos públicos o protegidos, permitiendo así consistencia en la información y el aumento de la cohesión.</p>
<p>Mediante el encapsulamiento la información esta oculta a los demás objetos, permitiendo el acceso mediante métodos públicos o protegidos, aquí se habla del alcance de una propiedad o método, que puede ser private, protected o public. Al implementar este concepto, cuando se ha desarrollado un objeto, al utilizarlo no nos interesa como funciona internamente, simplemente lo que nos regresa o lo que hace.</p>
<p><strong>Herencia</strong><br />
Crear nuevos objetos a partir de los existentes de forma que heredan las propiedades y comportamientos de sus ancestros.  Existen dos clases de herencia:  simple y múltiple.</p>
<p>La herencia es muy utilizada dentro de la POO, y es que mediante esta se puede especializar el comportamiento de las clases hijas, permitiendo así un buen diseño del sistema.</p>
<p><strong>Polimorfismo</strong><br />
Es la capacidad de tener métodos con el mismo nombre, con comportamientos diferentes, conocido como la sobre-escritura de métodos y la sobrecarga de operadores.</p>
<p>El polimorfismo nos permite declarar métodos con el mismo nombre, y comportamientos diferentes, haciendo diferencia entre estos por medio de la firma del método, la firma del método se le conoce a los parámetros que recibe un método, esto es que el numero de parámetros debe de ser diferente, en caso de ser el mismo estos deben ser diferentes en su tipo de dato.</p>
<p>Otra manera de aplicar el polimorfismo es cuando una clase hija sobre escribe un método de la clase padre, cambiando o modificando su comportamiento.</p>
<p><strong>Cohesión</strong><br />
Es una medida de la especialización con la que cuenta un objeto dentro de un sistema, entre mas alta sea esta, es mejor.</p>
<p>Este concepto viene del paradigma clásico, y este fue un concepto que permitió el salto a este nuevo paradigma.</p>
<p><strong>Acoplamiento</strong><br />
Es la medida con la que un objeto depende de otro para funcionar, entre menor sea esta, es mejor.</p>
<p>La información fluye a través de mensajes.</p>


<p>No related posts.</p>
<p>Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://www.crysfel.com/2007/07/29/conceptos-de-programacion-orientada-a-objetos-poo/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Introducción a JasperReport</title>
		<link>http://www.crysfel.com/2007/06/19/introduccion-a-jasperreport/</link>
		<comments>http://www.crysfel.com/2007/06/19/introduccion-a-jasperreport/#comments</comments>
		<pubDate>Wed, 20 Jun 2007 00:48:50 +0000</pubDate>
		<dc:creator>Crysfel</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Tutoriales]]></category>

		<guid isPermaLink="false">http://www.crysfel.com/index.php/2007/06/19/introduccion-a-jasperreport/</guid>
		<description><![CDATA[
En estos últimos días he estado jugando un poco con JasperReports, y de verdad que es muy sencillo hacer reportes, lo más dificultoso, es el encontrar documentación, los ejemplos que hay en Internet no están muy claros, y no abarcan todo lo que uno necesita saber, es por eso que me dediqué a realizar una [...]


No related posts.

Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<div style="float:left;margin:0px 10px 0px 0px;"><img src="http://www.crysfel.com/common/img/jsr1.gif" alt="JasperReport" title="JasperReport" /></div>
<p>En estos últimos días he estado jugando un poco con JasperReports, y de verdad que es muy sencillo hacer reportes, lo más dificultoso, es el encontrar documentación, los ejemplos que hay en Internet no están muy claros, y no abarcan todo lo que uno necesita saber, es por eso que me dediqué a realizar una búsqueda exhaustiva con respecto al tema.</p>
<p>En esta entrada, voy a explicar los conceptos básicos para hacer reportes, no voy a profundizar en todas las opciones, pretendo hacerlo más adelante, quiero presentar a grandes rasgos el proceso para generar un reporte en pdf.</p>
<p>Para comenzar es necesario descargar la última versión de esta herramienta, directamente desde la página del proyecto <a href="http://www.jasperforge.org/">http://www.jasperforge.org/</a> para poder descargar es necesario registrarse en el sitio, así que regístrate rápidamente, luego en la página principal encontrarás varios proyectos, el primero de la lista es JasperReports, da clic sobre el link que dice downloads, descarga la última versión (1.3.4 es la actual), luego de esto aparecen archivos, algunos JARS, y un zip, el que tienes que descargar es el *-proyect.zip, de aproximadamente 35 MG.</p>
<p><span id="more-29"></span></p>
<p>Una vez que termine la descarga, descomprime el archivo, aquí hay varias carpetas, la que nos interesa es la que dice lib y dist, de la carpeta dist, sacamos el jar de jasperReport, creas un proyecto nuevo, en eclipse, netbeans, etc. creas una carpeta lib en tu nuevo proyecto, y pegas el jar, ahora copia los siguientes jars de la carpeta lib de jasperReports a la carpeta lib de tu proyecto.</p>
<p><strong>bsh-1.x.x.jar<br />
itext-1.x.x.jar<br />
commons-digester.jar<br />
commons-collections.jar<br />
commons-login-1.x.x.jar<br />
commons-beanutils.jar<br />
commons-javaflow-20060411.jar</strong></p>
<p>Es de suma importancia que copies todas estas librerías, y las agregues al classpath, de lo contrario el compilador te marcará errores pidiendo las librerías.</p>
<p>Una vez ya tengas en el classpath todas las librerías, vamos a crear nuestro primer reporte, uno muy sencillo, todavía no voy a mostrar como pasarle datos ni parámetros, el ejemplo de hoy solo imprimirá el hola mundo.</p>
<p>Para crear reportes el procedimiento es el siguiente, primero necesitas diseñar el reporte, esto lo haces con XML, es muy sencillo pues es semejante a diseñar una página XHTML, funciona manera semejante, una vez tengas listo el diseño del reporte lo guardas con extensión .jrxml, después necesitas compilar el XML y generar un archivo *.jasper, la compilación se hace una sola vez, luego ya que tienes el fichero.jasper, este lo cargas a memoria y le mandas los parámetros e información que quieres desplegar (Si es necesario), lo exportas al formato deseado y lo escribes en el disco.</p>
<p>Pues bien, eso es todo el procedimiento, sencillo no? la verdad es que en unas pocas líneas de código Java, haces todo el proceso. Una vez teniendo en mente el procedimiento completo, comencemos con el primer paso, el cual es diseñar el reporte en XML. Primero creamos un archivo llamado primerReporte.jrxml, luego escribes el siguiente código.</p>
<p><code lang="xml"><br />
<?xml version="1.0"?><br />
<!DOCTYPE jasperReport<br />
  PUBLIC "-//JasperReports//DTD Report Design//EN"<br />
  "http://jasperreports.sourceforge.net/dtds/jasperreport.dtd"><br />
</code></p>
<p>Esta es la cabecera del documento, aquí no hay mucho que explicar, simplemente que todos los reportes que diseñemos tienen que llevar esta cabecera.</p>
<p><code lang="xml"><br />
<jasperReport name="primer_reporte"></p>
<p></jasperReport><br />
</code></p>
<p>Este es el nodo principal del documento y es obligatorio, dentro de este va toda la información que queramos desplegar, dividido en las siguiente secciones.</p>
<p><strong>&lt;background&gt;</strong> &#8211; En esta seccion se puede poner cualquier cosa que quieras que aparesca por debajo de todas las otras seccion, esta sección es el fondo del documento.<br />
<strong>&lt;title&gt; </strong>- El contenido de esta sección será impreso solo una vez al principio del reporte, como su nombre lo dice es el título que el reporte tendrá.<br />
<strong>&lt;pageHeader&gt;</strong> &#8211; Esta sección será impresa en cada página que el reporte contenga, es la cabecera del reporte.<br />
<strong>&lt;columnHeader&gt;</strong> &#8211; Esta sección se utiliza para poner la cabecera de la sección &#8220;detail&#8221;, en otras palabras el titulo de la información desplegada en el &#8220;detail&#8221;.<br />
<strong>&lt;detail&gt;</strong> &#8211; En esta sección es donde se colocan la información a desplegar del reporte, es el cuerpo principal del reporte, generalmente en esta sección se despliegan tablas.<br />
<strong>&lt;pageFooter&gt;</strong> &#8211; Esta sección el pie de página y es impresa al final de cada página del reporte, aquí puedes poner el número de página o alguna otra información.</p>
<p>Dentro de estas secciones es que se ponen etiquetas estáticas, dinámicas, líneas, imágenes, etc. es importante mencionar que todas estas secciones contienen la etiqueta <strong>&lt;band&gt;</strong>, que es donde la información está contenida, es obligatoria solo cuando necesitas ponerle contenidos a cualquiera de las cuatro secciones anteriores.</p>
<p> Suficiente teoría por ahora, es hora de seguir diseñando el reporte, para este caso dije que sólo imprimiría &#8220;Hola mundo&#8221; en el reporte, así que sólo voy a ocupar la sección detail, poner un texto estático especificándole las medidas y posición donde estará, el código final quedará así.</p>
<p><code lang="xml"><br />
<?xml version="1.0"?><br />
<!DOCTYPE jasperReport<br />
  PUBLIC "-//JasperReports//DTD Report Design//EN"<br />
  "http://jasperreports.sourceforge.net/dtds/jasperreport.dtd"><br />
<jasperReport name="primer_reporte"></p>
<p>  <detail><br />
    <band height="20"><br />
      <staticText><br />
        <reportElement x="180" y="0" width="200" height="20"/><br />
        <text><![CDATA[Hola Mundo! soy Crysfel]]&gt;</text><br />
      </staticText><br />
    </band><br />
  </detail><br />
</jasperReport><br />
</code></p>
<p>Aquí no hay mucho que comentar, excepto que el band debe tener especificado el alto que será, en este caso 20 (Las medidas son en píxeles), y que los objetos que contenga dentro de este, no deben superar esta medida, de lo contrario el compilador nos marcará un error, hasta este punto solo esta imprimiendo un texto estático, puedes hacer pruebas agregándole más textos y posicionándoles en lugares diferentes, no olvides que el height de los objetos, no deben superar los 20px que declaramos al band.</p>
<p>Una vez esta listo el diseño del reporte y guardado  como primerReporte.jrxml es necesario crear una clase que continué con el procedimiento, el código de dicha clase es el siguiente.</p>
<p><code lang="java"><br />
public class JasperReports1<br />
{<br />
  public static void main(String[] args)<br />
  {<br />
    JasperReport jasperReport;<br />
    JasperPrint jasperPrint;<br />
    try<br />
    {<br />
            //1-Compilamos el archivo XML y lo cargamos en memoria<br />
      jasperReport = JasperCompileManager.compileReport(<br />
          "primerReporte.jrxml");</p>
<p>               //2-Llenamos el reporte con la información y parámetros necesarios (En este caso nada)<br />
      jasperPrint = JasperFillManager.fillReport(<br />
          jasperReport, new HashMap(), new JREmptyDataSource());</p>
<p>               //3-Exportamos el reporte a pdf y lo guardamos en disco<br />
      JasperExportManager.exportReportToPdfFile(<br />
          jasperPrint, "holaMundo.pdf");<br />
    }<br />
    catch (JRException e)<br />
    {<br />
      e.printStackTrace();<br />
    }<br />
  }</p>
<p>}<br />
</code></p>
<p>Como puedes ver, el procedimiento es muy sencillo, primero compilamos el jrxml, para aplicaciones reales, esto lo haces solo una vez, y generas un archivo jasper, en esta ocasión no lo estoy generando, eso lo explicaré mas a detalle en futuras entradas, por ahora en el paso 1 se compila y se mantiene en memoria, en el paso 2 se le pasan tres parámetros a la función fillReport, el cual es el reporte, un HashMap con los parámetros y no se le pasa información, por ahora no le estamos pasando nada, en futuras entradas hablaré al respecto, este es solo una introducción, por último, en el paso 3 se exporta a pdf y se guarda en disco como holaMundo.pdf.</p>
<p>Solo basta correr la aplicación y ver los resultados, si has seguido los pasos al pie de la letra, no tendrás errores, al compilar el jrxml tarda un poco, pero es normal, es por eso que repito otra vez, que solo se hace una sola vez y se guarda el archivo compilado con extensión .jasper, en este caso no lo hacemos, pero sigue pendiente en este blog pues hablaré al respecto en un futuro no muy lejano.</p>
<p><strong>Update 17 Enero 2008</strong><br />
Para facilitar el tutorial, ahora voy a proporcionar el <a href="http://www.crysfel.com/wp-content/uploads/2008/01/jasperreport1.rar" title="Descargar Codigo del Tutorial">código fuente</a> para que lo puedas ver funcionando, es un proyecto configurado para eclipse.</p>


<p>No related posts.</p>
<p>Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://www.crysfel.com/2007/06/19/introduccion-a-jasperreport/feed/</wfw:commentRss>
		<slash:comments>68</slash:comments>
		</item>
		<item>
		<title>Instalacion de la plataforma JAVA</title>
		<link>http://www.crysfel.com/2007/05/13/instalacion-de-la-plataforma-java/</link>
		<comments>http://www.crysfel.com/2007/05/13/instalacion-de-la-plataforma-java/#comments</comments>
		<pubDate>Sun, 13 May 2007 20:20:01 +0000</pubDate>
		<dc:creator>Crysfel</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Tutoriales]]></category>

		<guid isPermaLink="false">http://www.crysfel.com/index.php/2007/05/13/instalacion-de-la-plataforma-java/</guid>
		<description><![CDATA[Hoy quiero mostrar para beneficio de muchos que comienzan en el mundo de Java, como configurar su Windows xp para poder iniciar a desarrollar con esta herramienta.
Primero necesitamos descargar el JSE (Java Standard Edition) desde aquí, seleccionamos la plataforma en la que desarrollaremos, Linux, Solaris, Windows, depende de tu sistema operativo, y la versión que [...]


No related posts.

Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<p>Hoy quiero mostrar para beneficio de muchos que comienzan en el mundo de Java, como configurar su Windows xp para poder iniciar a desarrollar con esta herramienta.</p>
<p>Primero necesitamos descargar el JSE (Java Standard Edition) <a href=" http://java.sun.com/javase/downloads/index.jsp">desde aquí</a>, seleccionamos la plataforma en la que desarrollaremos, Linux, Solaris, Windows, depende de tu sistema operativo, y la versión que queremos descargar. Hasta ahora la versión más reciente es la JDK 6u1.</p>
<p>Supongamos que la bajaremos para Windows, seleccionamos entonces windows y esperamos a que se termine de descargar.<br />
Mientras esperamos, te voy a contar un poco de la historia y de como trabaja JAVA.</p>
<p>Java surge en 1990 por su fundador James Gosling, en un principio Java fue desarrollado para dispositivos como calculadoras, microondas, y otros dispositivos semejantes. En 1995 el internet comenzaba a crecer a grandes escalas, así que Bill Joy decidió desarrollar Java para que pudiera funcionar en la red.<br />
<span id="more-21"></span><br />
A la fecha Java es una tecnología muy poderosa, aquí algunas características de este lenguaje:</p>
<p>- Multiplataforma<br />
- Orientado a Objetos<br />
- Código Reutilizable<br />
- Portable<br />
- Amplia documentación<br />
- Etc, etc&#8230;</p>
<p>Bueno, algo importante que debes de saber, es que para lograr que Java sea un lenguaje multiplataforma, es gracias a la JVM (Java Virtual Machine), esta es la encargada de interpretar los byte-codes que se generan al compilar nuestros códigos fuentes.</p>
<p>Excelente, ya termino la descarga, OK procederemos a instalarla, aceptas la licencia, lo demás es siguiente, siguiente, esperas a que se termine de instalar y luego te pide reiniciar tu Ordenador.</p>
<p>Ahora vamos a dar de alta la variable de entorno JAVA_HOME y a agregar en el PATH del sistema operativo el directorio donde esta el compilador, esto para que podamos compilar desde la consola, sin necesidad de entrar a la carpeta donde están los archivos binarios del compilador.</p>
<p>OK, si estás en Windows xp, ve a <strong>Start -> Properties -> Advanced -> Enviroment Variables -> New</strong>, ahora escribe <strong>JAVA_HOME</strong> como name y en value pones la <strong>URL donde esta instalado el JSDK</strong>, presionas OK.</p>
<p>ahora localizamos la variable PATH y le damos Edit y al final del value, agregamos <strong>;%JAVA_HOME%\bin</strong> al final de todos los que existen.</p>
<p>Pues bien, ahora estamos listos para comenzar a aprender este lenguaje.</p>
<p>Saludos!!</p>


<p>No related posts.</p>
<p>Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://www.crysfel.com/2007/05/13/instalacion-de-la-plataforma-java/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
