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
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
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
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...(http://oi52.tinypic.com/ipaz5e.jpg)
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 .. :-\ :-\