Ver Mensaje Individual
  #4 (permalink)  
Antiguo 09/07/2008, 02:31
Nefernani
 
Fecha de Ingreso: julio-2008
Mensajes: 3
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: JasperReport + Hibernate

Hola, soy algo nueva en esto pero me gustaría poner lo que he desarroyado ya que a mi me costó un montón obtener información y al final como a veces pasa salió solo.
Quería utilizar jasperreport con hibernate y obtener un pdf, en este caso lo obtengo que se pueda guardar o no, y quería que la query se incorporara dentro del pdf no hacerla con el ireport, os diré paso a paso lo importante.
1. Podemos hacer el jrxml desde ireport sin ningún problema pero OJO MUY IMPORTNTE los nombres de los field y de los textFieldExpression tienes que ser los mismos que en el name que tenemos mapeado y en el bean para obtenerlo, pongo unas lineas para que lo veais:
jrxml:<field name="valor" class="java.lang.String"/> ... <textFieldExpression class="java.lang.String"><![CDATA[$F{valor}]]></textFieldExpression>
hbm.xml(mapeo) <property name="nombre" type="java.lang.String" column="dom_nombre_tx" length="20" />
<property name="valor" type="java.lang.String" column="dom_valor_tx" length="20" />
Esto es lo mas importante para que los valores nos salgan en el reporte
y por último hice una clase para obtener los bytes y sacarlo en el pdf os pongo todo junto aunque es un struts y tiene distintas partes.

//sitio donde yo tengo mis jrxml
public static final String REPORTE_IMPORTE = "/report/prueba_Mano.jrxml";

public static byte[] sacarReporte(String tipoReporte) throws ClassNotFoundException,
SQLException, JRException {

JasperDesign dis enioReporte;
JRDesignQuery queryReporte;
//Ruta de Archivo Jasper
Reporte reporte = new Reporte();
String fileName;
byte[] bytes = null;
//hibernateUtil es una clase propia que me devuelve un SessionFactory
Session session = HibernateUtil.getSessionFactory().getCurrentSessio n();
session.beginTransaction();
//UsuarioBean es donde tengo los geter y seter, para esto si hay ejemplos
//por lo que no me estiendo
List usuarios = session.createQuery("from UsuarioBean").list();
fileName = reporte.Path(REPORTE_IMPORTE);

//cargamos el archivo
disenioReporte = JRXmlLoader.load(fileName);
//lo compilamos
JasperReport report = JasperCompileManager.compileReport(disenioReporte) ;
//obtenmos de forma adecuada los valores de las select para incorporalos.
JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(usuarios);
//HibernateQueryResultDataSource ds = new HibernateQueryResultDataSource(usuarios,campos);

//obtenemos lo que vamos a sacar
bytes = JasperRunManager.runReportToPdf(report, parameters, ds);
return bytes;
}
//método para obtener el path del archivo
public String Path(String tipoReporte) {


URL url = this.getClass().getResource(tipoReporte);

return url.getPath();

}

}

Una vez obtenido esto lo saco mi metodo es.
public void imprime(HttpServletResponse response, String tipoReporte)
throws Exception {


byte[] bytes = Reporte.sacarReporte(tipoReporte);
if(bytes!=null){

// Con esta sentencia hacemos que se pueda descargar el archivo y guardarlo pero sin extensión
//response.setContentType("application/x-download");
//convertimos el archivo en pdf y nos pregunta que queremos hacer y lo abrimos o lo guardamos en pdf
response.setHeader("Content-Disposition", "attachment; filename=informe.pdf" );
//Si solo ponemos esta parte de código nos saldrá el archivo en pdf directamente
response.setContentLength(bytes.length);
OutputStream ouputStream = response.getOutputStream();
ouputStream.write(bytes, 0, bytes.length);
ouputStream.flush();
ouputStream.close();


}

try{

System.out.println("El reporte está escrito");
}
catch (Exception e){

System.out.println("error");

}


}

Espero que les sirva