ClubEnsayos.com - Ensayos de Calidad, Tareas y Monografias
Buscar

Java Swing

eliasvargas9 de Abril de 2013

3.740 Palabras (15 Páginas)617 Visitas

Página 1 de 15

GENERAR REPORTES

Para generar un reporte con jasper report debemos seguir los siguientes pasos:

1. Generar un fichero .jrxml en el que se configura cómo queremos el informe

2. Compilar el fichero .jrxml para obtener un fichero .jasper

3. Rellenar los datos del informe. Esto generará un fichero .jrprint

4. Exportar el fichero .jrprint al formato que deseemos (pdf, etc). Esto generará el fichero en cuestión.

Generar el fichero .jrxml

El fichero .jrxml se puede generar a mano con este DTD y esta referencia de atributos. De todas formas, una opción mejor es usar la herramienta iReport, que permite generar el fichero .jrxml de forma visual y más fácil.

En este fichero también se configura cual va a ser la fuente de datos (si es una base de datos, un fichero, etc). Incluso si es base de datos, en este fichero se pone el SELECT que devuelve los datos que queremos para el informe.

Compilado del fichero .jrxml

Para compilar el fichero .jrxml y generar el fichero .jasper, desde código podemos poner algo como esto

JasperReport report = JasperCompileManager.compileReport("C:\\informes JAsper\\JRXML\\InformeMySql.jrxml");

Rellenar el informe con datos

Ahora hay que rellenar el informe con datos. Desde código se hace con algo como esto

JasperPrint print = JasperFillManager.fillReport(report, parameters, conn);

donde conn es la conexión con la base de datos. No es necesario indicar el select ni nada similar, puesto que esta información está incluida en el .jrxml .

Obtener el pdf (o el que sea)

Finalmente, para obtener el fichero .pdf, la línea es algo como esto

JasperExportManager.exportReportToPdfFile(print, "C:\\informes JAsper\\PDF's\\InformePaisesMySQL.pdf");

donde el parámetro es el fichero de salida que deseamos.

El ejemplo

Vamos a ver todo esto con un ejemplo concreto.

Este ejemplo saca la información de una tabla en base de datos de países y muestra su id, el nombre del país 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 definición del informe)

• InformePaisesMySQL.pdf (Pdf generado `por la aplicación).

El fichero .java

InformeMySql.java

package pruebasInformes;

/*

* Created on 11-nov-2004

*/

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.SQLException;

import java.util.HashMap;

import java.util.Map;

import net.sf.jasperreports.engine.JasperFillManager;

import net.sf.jasperreports.engine.JasperPrint;

import net.sf.jasperreports.engine.JasperReport;

import net.sf.jasperreports.view.JasperViewer;

import net.sf.jasperreports.engine.JasperExportManager;

import net.sf.jasperreports.engine.JasperCompileManager;

/**

* <p>

* Ejemplo práctico de visualización 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","root", "");

conn.setAutoCommit(false);

}

catch (SQLException e) {

System.out.println("Error de conexión: " + 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");

//Para visualizar el pdf directamente desde java

JasperViewer.viewReport(print, false);

}

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()

Fichero de configuración del informe

InformeMySql.jrxml (creado por iReport a través de una interface gráfica, no te asustes).

GENERAR PDF

import java.io.File;

import java.io.FileOutputStream;

import java.io.OutputStream;

import java.util.Date;

import com.lowagie.text.Document;

import com.lowagie.text.Paragraph;

import com.lowagie.text.pdf.PdfWriter;

public class GeneratePDF {

public static void main(String[] args) {

try {

OutputStream file = new FileOutputStream(new File("C:\\Test.pdf"));

Document document = new Document();

PdfWriter.getInstance(document, file);

document.open();

document.add(new Paragraph("Hola a todos!"));

document.add(new Paragraph(new Date().toString()));

document.close();

file.close();

} catch (Exception e) {

e.printStackTrace();

}

}

}

ENVIAR A IMPRIMIR

Para imprimir desde java hacemos en primer lugar una clase que implemente Printable. Al método print() se le pasan varios parámetros:

• Graphics. Con el que debemos dibujar lo que queremos que salga en la impresora. g.drawText(), g.drawLine(), etc.

• PageFormat. Nos dice si la página está horizontal o vertical, para que lo tengamos en cuenta a la hora de dibujar.

• Número de página. Para que sepamos qué página se está imprimiendo y dibujemos lo que vaya en esa página.

En este método debemos devolver:

• PAGE_EXISTS si hemos dibujado algo en la página cuyo número nos han pasado y debe imprimirse.

• NO_SUCH_PAGE si ese número de página ya no tiene nada que dibujar.

Por ejemplo, si nuestro texto es de una sola página, cuando nos pasen número de página igual a cero escribiremos el texto de la página y devolveremos PAGE_EXISTS. Si nos pasan número de página igual a uno, no dibujaremos nada y devolveremos NO_SUCH_PAGE, con lo que se parará la impresión.

Un ejemplo de esta clase puede ser:

class MiPrintable implements Printable

{

public int print (Graphics g, PageFormat f, int pageIndex)

{

if (pageIndex == 0)

{

// Imprime "Hola mundo" en la primera pagina, en la posicion 100,100

g.drawString("Hola mundo", 100,100);

return PAGE_EXISTS;

}

else

return NO_SUCH_PAGE;

}

}

Una vez que tenemos preparada la clase, sólo hay que pasársela a un PrinterJob y mandarla imprimir. Esto se hace así

PrinterJob

...

Descargar como (para miembros actualizados) txt (21 Kb)
Leer 14 páginas más »
Disponible sólo en Clubensayos.com