Beruflich Dokumente
Kultur Dokumente
Por cortesa de Pablo y de John. El Jasper Report es una librera para la generacin de informes. Est escrita en java y es libre. http://jasperforge.org/ El funcionamiento consiste en escribir un xml donde se recogen las particularidades del informe. Este xml lo tratan las clases del Jasper para obtener una salida. Esta salida puede ser un PDF, XML, HTML, CSV, XLS, RTF, TXT. Otra ventaja de utilizar Jasper Report es que se integra perfectamente con el JFreeChart que es una librera libre para la generacin de todo tipo de graficas. http://www.jfree.org/jfreechart/ Para generar el xml lo recomendable es bajarse la herramienta iReport que es un editor grfico que est implementado en java y se integra perfectamente con el Jasper Report http://jasperforge.org/sf/projects/ireport. (Yo recomiendo bajarse el instalable windows).
Un ejemplo bsico:
Para generar un reporte con jasper report debemos seguir los siguientes pasos: 1. 2. 3. 4. Generar un fichero .jrxml en el que se configura cmo queremos el informe Compilar el fichero .jrxml para obtener un fichero .jasper Rellenar los datos del informe. Esto generar un fichero .jrprint Exportar el fichero .jrprint al formato que deseemos (pdf, etc). Esto generar el fichero en cuestin.
donde conn es la conexin con la base de datos. No es necesario indicar el select ni nada similar, puesto que esta informacin est incluida en el .jrxml .
El ejemplo
Vamos a ver todo esto con un ejemplo concreto. Este ejemplo saca la informacin de una tabla en base de datos de pases y muestra su id, el nombre del pas y un cod de dos letras. En este caso atacamos contra MySQL y estos son los datos:
BBDD : tecnireg_osc1 Usuario : root Password : No hay password Tabla : countries La tabla countries tiene los siguientes campos : countries_id countries_name countries_iso_code_2 countries_iso_code_3
Ficheros adjuntos:
InformeMySql.java (Main java ) InformeMySql.jrxml (Plantilla xml con la definicin del informe) InformePaisesMySQL.pdf (Pdf generado `por la aplicacin).
El fichero .java
InformeMySql.java
package pruebasInformes; /* * Created on 11-nov-2004 */ import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException;
/** * <p> * Ejemplo prctico de visualizacin de un reporte de JasperReports que contiene * un subreporte. * </p> * <p> * Esta clase ha sido desarrollada para ilustrar el tutorial "JasperReports, * iReport y Subreportes" . * </p> */ public class InformeMySql { static Connection conn = null; /** * * @param args */ public static void main(String[] args) { // Cargamos el driver JDBC try { Class.forName("com.mysql.jdbc.Driver"); } catch (ClassNotFoundException e) { System.out.println("MySQL JDBC Driver not found."); System.exit(1); } //Para iniciar el Logger. //inicializaLogger(); try { conn = DriverManager.getConnection("jdbc:mysql://localhost/tecnireg_osc1","ro ot", ""); conn.setAutoCommit(false); } catch (SQLException e) { System.out.println("Error de conexin: " + e.getMessage()); System.exit(4); } try { Map parameters = new HashMap(); parameters.put("TITULO", "PAISES"); parameters.put("FECHA", new java.util.Date()); JasperReport report = JasperCompileManager.compileReport( "C:\\informes JAsper\\JRXML\\InformeMySql.jrxml"); JasperPrint print = JasperFillManager.fillReport(report, parameters, conn); // Exporta el informe a PDF JasperExportManager.exportReportToPdfFile(print, "C:\\informes JAsper\\PDF's\\InformePaisesMySQL.pdf");
} catch (Exception e) { e.printStackTrace(); } finally { /* * Cleanup antes de salir */ try { if (conn != null) { conn.rollback(); System.out.println("ROLLBACK EJECUTADO"); conn.close(); } } catch (Exception e) { e.printStackTrace(); } }
} /** * Puedes descomentar esto si quieres instanciar el loger. Necesitas la libreia log4j y el siguiente import * import org.apache.log4j.*; * Debes llamarlo desde el main. */ /* static void inicializaLogger() { PatternLayout pat = new PatternLayout( "[%-5p][%t] (%F:%L) : %m%n"); Logger.getRootLogger().addAppender(new ConsoleAppender(pat)); Logger.getRootLogger().setLevel(Level.DEBUG); } */ } // main()
columnWidth="535" columnSpacing="0" leftMargin="30" rightMargin="30" topMargin="20" bottomMargin="20" whenNoDataType="NoPages" isTitleNewPage="false" isSummaryNewPage="false"> <property name="ireport.scriptlethandling" value="2" /> <property name="ireport.encoding" value="UTF-8" /> <import value="java.util.*" /> <import value="net.sf.jasperreports.engine.*" /> <import value="net.sf.jasperreports.engine.data.*" /> <parameter name="TITULO" isForPrompting="false" class="java.lang.String"/> <parameter name="FECHA" isForPrompting="false" class="java.util.Date"/> <queryString><![CDATA[SELECT * FROM Countries GROUP BY countries_id ORDER BY countries_name]]></queryString> <field <field <field <field <field name="countries_id" class="java.lang.Integer"/> name="countries_name" class="java.lang.String"/> name="countries_iso_code_2" class="java.lang.String"/> name="countries_iso_code_3" class="java.lang.String"/> name="address_format_id" class="java.lang.Integer"/>
<background> <band height="0" isSplitAllowed="true" > </band> </background> <title> <band height="50" isSplitAllowed="true" > <staticText> <reportElement x="165" y="11" width="104" height="26" key="staticText-1"/> <box topBorder="None" topBorderColor="#000000" leftBorder="None" leftBorderColor="#000000" rightBorder="None" rightBorderColor="#000000" bottomBorder="None" bottomBorderColor="#000000"/> <textElement textAlignment="Center" verticalAlignment="Middle"> <font size="18" isBold="true"/> </textElement> <text><![CDATA[INFORME]]></text> </staticText> <textField isStretchWithOverflow="false" isBlankWhenNull="false" evaluationTime="Now" hyperlinkType="None" hyperlinkTarget="Self" > <reportElement x="278" y="11"
width="100" height="26" key="textField"/> <box topBorder="None" topBorderColor="#000000" leftBorder="None" leftBorderColor="#000000" rightBorder="None" rightBorderColor="#000000" bottomBorder="None" bottomBorderColor="#000000"/> <textElement textAlignment="Left" verticalAlignment="Middle"> <font size="18" isBold="true"/> </textElement> <textFieldExpression class="java.lang.String"><![CDATA[$P{TITULO}]]></textFieldExpression> </textField> <textField isStretchWithOverflow="false" pattern="EEEEE dd MMMMM yyyy" isBlankWhenNull="false" evaluationTime="Now" hyperlinkType="None" hyperlinkTarget="Self" > <reportElement x="444" y="14" width="84" height="18" key="textField"/> <box topBorder="None" topBorderColor="#000000" leftBorder="None" leftBorderColor="#000000" rightBorder="None" rightBorderColor="#000000" bottomBorder="None" bottomBorderColor="#000000"/> <textElement textAlignment="Right" verticalAlignment="Middle"> <font/> </textElement> <textFieldExpression class="java.util.Date"><![CDATA[$P{FECHA}]]></textFieldExpression> </textField> </band> </title> <pageHeader> <band height="9" isSplitAllowed="true" > </band> </pageHeader> <columnHeader> <band height="28" isSplitAllowed="true" > <staticText> <reportElement mode="Opaque" x="355" y="6" width="61" height="17" forecolor="#FFFFFF" backcolor="#666666" key="staticText-4"/> <box topBorder="None" topBorderColor="#000000" leftBorder="None"
<textElement textAlignment="Center" verticalAlignment="Middle"> <font size="12" isBold="true"/> </textElement> <text><![CDATA[COD]]></text> </staticText> <staticText> <reportElement mode="Opaque" x="84" y="6" width="41" height="17" forecolor="#FFFFFF" backcolor="#666666" key="staticText-2"/> <box topBorder="None" topBorderColor="#000000" leftBorder="None" leftBorderColor="#000000" rightBorder="None" rightBorderColor="#000000 " bottomBorder="None" bottomBorderColor="#000000"/> <textElement textAlignment="Center" verticalAlignment="Middle"> <font size="12" isBold="true"/> </textElement> <text><![CDATA[ID]]></text> </staticText> <staticText> <reportElement mode="Opaque" x="168" y="6" width="142" height="17" forecolor="#FFFFFF" backcolor="#666666" key="staticText-3"/> <box topBorder="None" topBorderColor="#000000" leftBorder="None" leftBorderColor="#000000" rightBorder="None" rightBorderColor="#000000" bottomBorder="None" bottomBorderColor="#000000"/> <textElement textAlignment="Center" verticalAlignment="Middle"> <font size="12" isBold="true"/> </textElement> <text><![CDATA[NOMBRE]]></text> </staticText> </band> </columnHeader> <detail> <band height="27" isSplitAllowed="true" >
<textField isStretchWithOverflow="false" isBlankWhenNull="false" evaluationTime="Now" hyperlinkType="None" hyperlinkTarget="Self" > <reportElement x="85" y="4" width="41" height="18" key="textField"/> <box topBorder="None" topBorderColor="#000000" leftBorder="None" leftBorderColor="#000000" rightBorder="None" rightBorderColor="#000000" bottomBorder="None" bottomBorderColor="#000000"/> <textElement textAlignment="Center"> <font/> </textElement> <textFieldExpression class="java.lang.Integer"><![CDATA[$F{countries_id}]]> </textFieldExpression> </textField> <textField isStretchWithOverflow="false" isBlankWhenNull="false" evaluationTime="Now" hyperlinkType="None" hyperlinkTarget="Self" > <reportElement x="169" y="4" width="141" height="18" key="textField"/> <box topBorder="None" topBorderColor="#000000" leftBorder="None" leftBorderColor="#000000" rightBorder="None" rightBorderColor="#000000" bottomBorder="None" bottomBorderColor="#000000"/> <textElement> <font/> </textElement> <textFieldExpression class="java.lang.String"><![CDATA[$F{countries_name}]]> </textFieldExpression> </textField> <textField isStretchWithOverflow="false" isBlankWhenNull="false" evaluationTime="Now" hyperlinkType="None" hyperlinkTarget="Self" > <reportElement x="366" y="4" width="39" height="18" key="textField"/> <box topBorder="None" topBorderColor="#000000" leftBorder="None" leftBorderColor="#000000" rightBorder="None" rightBorderColor="#000000"
<font/> </textElement> <textFieldExpression class="java.lang.String"><![CDATA[$F{countries_iso_code_2}]]> </textFieldExpression> </textField> </band> </detail> <columnFooter> <band height="0" isSplitAllowed="true" > </band> </columnFooter> <pageFooter> <band height="31" isSplitAllowed="true" > <line direction="TopDown"> <reportElement x="88" y="5" width="312" height="0" key="line-1"/> <graphicElement stretchType="NoStretch"/> </line> <textField isStretchWithOverflow="false" isBlankWhenNull="false" evaluationTime="Now" hyperlinkType="None" hyperlinkTarget="Self" > <reportElement x="151" y="10" width="114" height="16" key="textField"/> <box topBorder="None" topBorderColor="#000000" leftBorder="None" leftBorderColor="#000000" rightBorder="None" rightBorderColor="#000000" bottomBorder="None" bottomBorderColor="#000000"/> <textElement textAlignment="Right"> <font/> </textElement> <textFieldExpression class="java.lang.String"><![CDATA["Pgina " + $V{PAGE_NUMBER} + " de "]]></textFieldExpression> </textField> <textField isStretchWithOverflow="false" isBlankWhenNull="false" evaluationTime="Report" hyperlinkType="None" hyperlinkTarget="Self" > <reportElement x="269" y="10"
width="133" height="16" key="textField"/> <box topBorder="None" topBorderColor="#000000" leftBorder="None" leftBorderColor="#000000" rightBorder="None" rightBorderColor="#000000" bottomBorder="None" bottomBorderColor="#000000"/> <textElement> <font/> </textElement> <textFieldExpression class="java.lang.String"><![CDATA["" + $V{PAGE_NUMBER} + ""]]></textFiel dExpression> </textField> </band> </pageFooter> <lastPageFooter> <band height="50" isSplitAllowed="true" > </band> </lastPageFooter> <summary> <band height="50" isSplitAllowed="true" > </band> </summary> </jasperReport>
REPORT A
import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import import import import import import import import import import net.sf.jasperreports.engine.JRExporterParameter; net.sf.jasperreports.engine.JasperCompileManager; net.sf.jasperreports.engine.JasperExportManager; net.sf.jasperreports.engine.JasperFillManager; net.sf.jasperreports.engine.JasperPrint; net.sf.jasperreports.engine.JasperReport; net.sf.jasperreports.engine.export.JRCsvExporter; net.sf.jasperreports.engine.export.JRRtfExporter; net.sf.jasperreports.engine.export.JRXlsExporter; net.sf.jasperreports.engine.export.JRXlsExporterParameter;
public class Jasper { public Jasper() { } public static void main(String[] args) { Jasper jasper = new Jasper(); Connection conn = null; //Cargamos el driver JDBC try { Class.forName("oracle.jdbc.driver.OracleDriver"); }catch (ClassNotFoundException e) { System.out.println("JDBC Driver not found.");} try { String dburl = "jdbc:oracle:thin:@localhost:1521:XE"; conn = DriverManager.getConnection(dburl,"user","pass"); }catch (SQLException e){ System.out.println("Error de conexin: " + e.getMessage());} JasperReport report; try { report = JasperCompileManager.compileReport("C:\\report.jrxml"); null, conn); JasperPrint print = JasperFillManager.fillReport(report, //Exporta el informe a PDF
String destFileNamePdf="C:\\trabajo\\reporte1.pdf"; //Creacin del PDF JasperExportManager.exportReportToPdfFile(print, destFileNamePdf); /*Otras importaciones //Exporta el informe a HTML JasperExportManager.exportReportToHtmlFile(print, destFileNamePdf); //Exporta el informe a excel OutputStream ouputStream= new FileOutputStream(new File("C:/trabajo/catalog.xls")); ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); JRXlsExporter exporterXLS = new JRXlsExporter(); exporterXLS.setParameter(JRXlsExporterParameter.JASPER_PRINT,print); exporterXLS.setParameter(JRXlsExporterParameter.OUTPUT_STREAM,byteArra yOutputStream); exporterXLS.exportReport(); ouputStream.write(byteArrayOutputStream.toByteArray()); ouputStream.flush(); ouputStream.close(); //Exporta el informe a csv String destFileNamePdf="C:\\trabajo\\reporte1.csv"; JRCsvExporter exporter = new JRCsvExporter(); File destFile = new File(destFileNamePdf); print); exporter.setParameter(JRExporterParameter.JASPER_PRINT,
exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, destFile.toString()); exporter.exportReport(); //Exporta el informe a rtf OutputStream ouputStream= new FileOutputStream(new File("C:/trabajo/catalog.rtf")); ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); JRRtfExporter exporter = new JRRtfExporter(); exporter.setParameter(JRExporterParameter.JASPER_PRINT,
print);