diferentes maneras de generar un reporte en java?

Iniciado por hack-4-life, 13 Mayo 2011, 18:30 PM

0 Miembros y 1 Visitante están viendo este tema.

hack-4-life

bueno esto esta algo enredado,lo que quiero hacer es generar un reporte de una consulta en java,pára eso ocupo ireport y librerias jasper report...ahora aqui viene mi problema...yo creo el reporte en ireport lo diseño..lo pongoe n una ubicacion y lo mando a llamar el jrxml,me lo compila y me lo manda en pantalla.....pero estaba pensando..si alguien de ustedes me podria decir la manera en que se puede ser automaticamente...

Oseaa tomar la tabla que esta activa con los registros y mandar el reporte asi automatico como hacen los sistemas de oxxo del walrtmart etc...

bueno con este codigo automaticamente me manda a imprimir......esto seria una
Código (java) [Seleccionar]

private void btnImprimirActionPerformed(java.awt.event.ActionEvent evt) {                                            
        try {
           //Mensaje de encabezado
           MessageFormat headerFormat = new MessageFormat("Tutorial Imprimir JTables");
           //Mensaje en el pie de pagina
           MessageFormat footerFormat = new MessageFormat("ContreSpace");
           //Imprimir JTable
           tabla.print(JTable.PrintMode.NORMAL, headerFormat, footerFormat);
       } catch (PrinterException ex) {
           Logger.getLogger(frmImprimir_JTable.class.getName()).log(Level.SEVERE, null, ex);
       }
   }                                        




ahoraa me pregunto si tal si le paso un query y de ese query me genera el reporte,perooo el reporte lo tengo que diseñar...con ireport...sigo buscando de como hacer esto pasando un query y que de ahi me genere el reporte..algo como esto
Código (java) [Seleccionar]

package imprimir_jtable;

import net.sf.jasperreports.engine.*;
import net.sf.jasperreports.engine.export.*;
import net.sf.jasperreports.engine.util.*;
import net.sf.jasperreports.view.*;
import java.sql.*;

import java.io.*;
import java.util.*;

public class Main {

   public Main() {
   }

   public static void main(String[] args) {
       // TODO code application logic here

   try
   {

       //Ruta de Archivo Jasper
       String fileName="C:\\Users\\Hacker\\Desktop\\rep_cli.jasper";
       //Ruta de archivo pdf de destino
       String destFileNamePdf="C:\\Users\\Hacker\\Desktop\\rep_cli.pdf";
       //Ruta de archivo xls de destino
       String destFileNameXls="C:\\Users\\Hacker\\Desktop\\rep_cli.xls";

       //Pasamos parametros al reporte Jasper.
       Map parameters = new HashMap();
           Object put = parameters.put("sql_query",new String("select * from categorias"));


       //Preparacion del reporte (en esta etapa se inserta el valor del query en el reporte).
       JasperPrint jasperPrint=JasperFillManager.fillReport(fileName, (Map) put,getConnection());

       //Creación del PDF
       JasperExportManager.exportReportToPdfFile(jasperPrint,destFileNamePdf);

       //Creación del XLS
       JRXlsExporter exporter = new JRXlsExporter();
       exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
       exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, destFileNameXls);
       exporter.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET, Boolean.TRUE);
       exporter.exportReport();

       System.exit(0);
    }
    catch (Exception e)
    {
           System.out.println(e.getMessage());
    }
   }

   /**Metodo para crear la conexion a DB*/
   private static Connection getConnection() throws ClassNotFoundException, SQLException {
       //Configuración de la conexión.
       String driver = "com.mysql.jdbc.Driver";
       String connectString = "jdbc:mysql://127.0.0.1:3306/almacen";
       String user = "root";
       String password = "12345";

       Class.forName(driver);
       Connection conn = DriverManager.getConnection(connectString, user, password);

       //Retornamos la conexión establecida.
   return conn;
}

}








esta otra manera encontre donde se le pasan las columnas y las filas pero ahi ya estan declaradas como seria para pasarle un query me lo genere de ese resultado....aqui ocupan la libreria  libreria itext
Código (java) [Seleccionar]



package imprimir_jtable;

import java.awt.BorderLayout;

import java.awt.Graphics2D;

import java.awt.Shape;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.WindowAdapter;

import java.awt.event.WindowEvent;

import java.io.FileOutputStream;

import java.io.IOException;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JPanel;

import javax.swing.JTable;

import javax.swing.JToolBar;

import com.lowagie.text.Document;

import com.lowagie.text.DocumentException;

import com.lowagie.text.PageSize;

import com.lowagie.text.pdf.PdfContentByte;

import com.lowagie.text.pdf.PdfWriter;


public class JTable2Pdf extends JFrame {


private JTable table;


public JTable2Pdf() {

getContentPane().setLayout(new BorderLayout());

setTitle("JTable test");

createToolbar();

createTable();

addWindowListener(new WindowAdapter() {

public void windowClosing(WindowEvent e)

{System.exit(0);}

});

}



private void createTable() {

Object[][] data ={

{"Mary", "Campione", "Snowboarding", new

Integer(5), new Boolean(false)},

{"Alison", "Huml", "Rowing", new

Integer(3), new Boolean(true)},

{"Kathy", "Walrath", "Chasing toddlers",

new Integer(2), new Boolean(false)},

{"Mark", "Andrews", "Speed reading", new

Integer(20), new Boolean(true)},

{"Angela", "Lih", "Teaching high school", new Integer(4), new Boolean(false)}

};

String[] columnNames =

{"First Name", "Last Name", "Sport", "# of Years", "Vegetarian"};

table = new JTable(data, columnNames);

// Use a panel to contains the table and add it the frame

JPanel tPanel = new JPanel(new BorderLayout());

tPanel.add(table.getTableHeader(), BorderLayout.NORTH);

tPanel.add(table, BorderLayout.CENTER);

getContentPane().add(tPanel, BorderLayout.CENTER);

}


private void createToolbar() {

JToolBar tb = new JToolBar();

JButton printBtn = new JButton("Print");

printBtn.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

print();

}

});

JButton exitBtn = new JButton("Exit");

exitBtn.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

exit();

}

});

tb.add(printBtn);

tb.add(exitBtn);

getContentPane().add(tb, BorderLayout.NORTH);

}

/////////ojoo aqui es para imprimir el pdf
private void print() {

Document document = new Document(PageSize.A4.rotate());

try {

PdfWriter writer =

PdfWriter.getInstance(document, new FileOutputStream("C:\\Users\\Hacker\\Desktop\\myy_jtable_fonts.pdf"));

document.open();

PdfContentByte cb = writer.getDirectContent();

// Create the graphics as shapes

cb.saveState();

Graphics2D g2 = cb.createGraphicsShapes(500, 500);

// Print the table to the graphics

Shape oldClip = g2.getClip();

g2.clipRect(0, 0, 500, 500);

table.print(g2);

g2.setClip(oldClip);

g2.dispose();

cb.restoreState();

document.newPage();

// Create the graphics with pdf fonts

cb.saveState();

g2 = cb.createGraphics(500, 500);

// Print the table to the graphics

oldClip = g2.getClip();

g2.clipRect(0, 0, 500, 500);

table.print(g2);

g2.setClip(oldClip);

g2.dispose();

cb.restoreState();

} catch (Exception e) {

e.printStackTrace();

System.err.println(e.getMessage());

}

document.close();

}

/**

* Exit app

*/

private void exit() {

System.exit(0);

}


public static void main(String[] args) {

JTable2Pdf frame = new JTable2Pdf();

frame.pack();

frame.setVisible(true);

frame.print();

frame.exit();

}

}v



y esto me da como resultado esto...

no se si ustedes me podria ayudar o dar alguna sugerenciaa  de como han ustedes trabajado con esto y solucionado,si no es mucha molestiaa...de antemano muchas gracias saludos...maness.... seguire buscando en el sen sei google e ir implementando aver si me sale algo decente .. :-\ :-\
""DE QUE SIRVE EL CONOCIMIENTO SI SE PRIVA DE SU DISTRIBUCION"