Hola a todos, ya he conseguido hacer funcionar mi report con 3 subreport utilizando como conexion una JRDataSource. Me a costado mucho, pues la documentacion del ireport es una grandisima mierda. Para todo aquel que necesite hacer lo mismo, ahi va el codigo de mi aplicacion, para uso y beneficio de todos.
Los datos son inventados,pero sustituyendo los inventados por reales tiene que funcionar.
Los archivos .jasper los almacene en la maquina del servidor de la aplicacion. y la foto tambien.
No entro con mucho en este foro, pero con gusto respondere a las posibles dudas en "
[email protected]".
Ahi va el codigo:
esta la clase que hace de "Action" para los que trabajen con java Strut:
FileInputStream fis=null; File fe=null;
FileOutputStream fos=null; File fs=null;
FileInputStream fisope=null;
String inf_fi_entrada="H:\\RecursosPortal\\Informes\\fich aExplotacion.jasper";
String inf_fi_salida="H:\\RecursosPortal\\Informes\\ficha Explotacion.pdf";
try {
fis = new FileInputStream(inf_fi_entrada);
fos = new FileOutputStream(inf_fi_salida);
} catch (Exception e1) {
StringWriter stringWriter = new StringWriter();
PrintWriter printWriter = new PrintWriter(stringWriter);
e1.printStackTrace(printWriter);
}
JRDataSource dataSource = Informe.createReportDataSource();
String subOperadores="H:\\RecursosPortal\\Informes\\opera doresSubreport.jasper";
String subServicios="H:\\RecursosPortal\\Informes\\atipic osSubreport.jasper";
String subAtipicos="H:\\RecursosPortal\\Informes\\servici osSubreport.jasper";
Object operadores=generaOperadores();
Object atipicos=generaAtipicos();
Object servicios=generaServicios();
Map parameters = new HashMap();
parameters.put("OPERADORES","H:\\RecursosPortal\\I nformes\\operadoresSubreport.jasper");
parameters.put("ATIPICOS","H:\\RecursosPortal\\Inf ormes\\atipicosSubreport.jasper");
parameters.put("SERVICIOS","H:\\RecursosPortal\\In formes\\serviciosSubreport.jasper");
parameters.put("IMAGEN","H:\\RecursosPortal\\Infor mes\\logo.jpg");
try{
JasperRunManager.runReportToPdfStream(fis,fos ,parameters, dataSource);
}catch (JRException e){
mmanager.reportWarning(e.getMessage());
}
fos.close();
La clase Informe que genera los datos debidamente ordenados, es :
public class Informe {
public static JRDataSource createReportDataSource()
{
JRBeanCollectionDataSource dataSource;
Collection reportRows = rellenaColeccion();
dataSource = new JRBeanCollectionDataSource(reportRows);
return dataSource;
}
public static Collection rellenaColeccion()
{
ArrayList reportRows = new ArrayList();
InputStream imagen=null;
String imagenn="";
Object operadores=generaOperadores();
Object atipicos=generaAtipicos();
// Object atipicos=null;
// Object operadores=null;
Object servicios=generaServicios();
// Object servicios=null; "C:\\Documents and Settings\\jnunez\\Escritorio\\DOCU-SAP\\operadoresSubreport.jasper";
String subOperadores="H:\\RecursosPortal\\Informes\\opera doresSubreport.jasper";
String subAtipicos="H:\\RecursosPortal\\Informes\\atipico sSubreport.jasper";
String subServicios="H:\\RecursosPortal\\Informes\\servic iosSubreport.jasper";
try{
imagen=null;
imagenn="H:\\RecursosPortal\\Informes\\logo.jpg";
}catch(Exception e){
e.printStackTrace();
}
reportRows.add(new CabeceraReSub("nombre","direccion","cp","provincia ","propietario","porcentaje","sociedad","responsab le","tlf","fax","fechaApertura","superficieTotal", "superficieBruta","parcelas","numComercio","mixCom ercial","numPlantComercial","numPlantAparca","numP lantAparcaInt","numPlantAparcaExt","conUtil","aflu encia","presupuesto","horarioSemana","horarioFin", "presupuestoTotal","superficieAlqui","gerente",ima genn, operadores,atipicos,servicios,subOperadores,subAti picos,subServicios));
return reportRows;
}
public static Object generaOperadores(){
Object operadores=null;
ArrayList ope=new ArrayList();
InputStream imagen=null;
try{
imagen=null;
ope.add(new Operadores("empresa1","rotulo1","actividad1","supe rficie1","renta1",imagen));
ope.add(new Operadores("empresa22","rotulo22","actividad22","s uperficie22","renta2",imagen));
ope.add(new Operadores("empresa3","rotulo22","actividad22","su perficie22","renta2",imagen));
ope.add(new Operadores("empresa4","rotulo224","actividad22","s uperficie22","renta2",imagen));
ope.add(new Operadores("empresa5","rotulo22","actividad22","su perficie22","renta2",imagen));
ope.add(new Operadores("empresa6","rotulo22","actividad22","su perficie22","renta2",imagen));
ope.add(new Operadores("empresa112","rotulo1","actividad1","su perficie1","renta1",imagen));
ope.add(new Operadores("empresa221234","rotulo2234t5","activid ad24682","superficie2356832","renta46782",imagen)) ;
ope.add(new Operadores("empresa3134513","rotulo22134","activid ad24682","superficie86722","renta4682",imagen));
ope.add(new Operadores("empresa4345","rotulo22134t4","activida d24682","superficie246782","renta4682",imagen));
ope.add(new Operadores("empresa51345","rotulo22134t","activida d2567842","superficie46784622","renta46782",imagen ));
ope.add(new Operadores("empresa61345","rotulo21348u67582","act ividad246782","superficie467822","renta46782",imag en));
operadores=new JRBeanCollectionDataSource(ope);
}catch(Exception e){
e.printStackTrace();
}
return operadores;
}
public static Object generaAtipicos(){
Object atipicos=null;
ArrayList ati=new ArrayList();
InputStream imagen=null;
try{
imagen=null;
ati.add(new Atipicos("maquinas","secur","julian mengano","123123","09870987",imagen));
ati.add(new Atipicos("maquinas22","secur22","julian22 mengano","222123123","22209870987",imagen));
ati.add(new Atipicos("maquinas33","secur33","julian mengano33","12312334","09870987",imagen));
ati.add(new Atipicos("maquinas44","secur44","julian22 mengano44","222123123","22209870987",imagen));
ati.add(new Atipicos("maquinas72457","secur456835","julian mengano3567","1231233567","09870987",imagen));
ati.add(new Atipicos("maquinas22287257","secur223586275","juli an22 mengano","222123123","22209870987",imagen));
ati.add(new Atipicos("maquinas33268257","secur25724533","julia n mengano324753","12312334","09870987",imagen));
ati.add(new Atipicos("maquinas442472457","secur24724744","juli an22 mengano4247245","222123123","22209870987",imagen)) ;
atipicos=new JRBeanCollectionDataSource(ati);
}catch(Exception e){
e.printStackTrace();
}
return atipicos;
}
public static Object generaServicios(){
Object servicios=null;
ArrayList ser=new ArrayList();
InputStream imagen=null;
try{
imagen=null;
ser.add(new Servicios("tipoServicio","empresa","912345678","90 1876234","perContac","fechaFin","perioPre","frecSe rvi","precio",imagen,"duracion"));
ser.add(new Servicios("tipoServicio23","empresa32","tlf23","fa x23","perContac32","fechaFin23","perioPre23","frec Servi23","precio32",imagen,"duracion"));
ser.add(new Servicios("tipoServicio2","empresa2","tlf2","fax2" ,"perContac2","fechaFin2","perioPre2","frecServi2" ,"precio2",imagen,"duracion"));
ser.add(new Servicios("tipoServicio22","empresa22","tlf22","fa x22","perContac22","fechaFin22","perioPre22","frec Servi22","precio22",imagen,"duracion"));
ser.add(new Servicios("tipoServicio72457","empresa458635","912 345678","901876234","perContac","fechaFin","perioP re","frecServi","precio",imagen,"duracion"));
ser.add(new Servicios("tipoServicio22712453","empresa34568232" ,"912736458","912736458","baltasar escribano","fechaFin23","perioPre23","frecServi23" ,"precio32",imagen,"duracion"));
ser.add(new Servicios("tipoServicio2725721457","empresa5356832 ","912736458","912736458","manuel rodrigurz","fechaFin2","perioPre2","frecServi2","p recio2",imagen,"duracion"));
ser.add(new Servicios("tipoServicio2265845672","empresa2535682 ","912736458","912736458","perContac22","fechaFin2 2","perioPre22","frecServi22","precio22",imagen,"d uracion"));
servicios=new JRBeanCollectionDataSource(ser);
}catch(Exception e){
e.printStackTrace();
}
return servicios;
}
}
Despues solo tienes que contruirte los javaBean con sus get(),set(), y constructor
Tienes que tener 4 javaBean.
uno generico para construir el objeto del report Master y otros 3 para los subreport.Tienes un ejemplo real de como hacerlo en el mensaje anterior.
Gracias a todos los que colaborais en este foro.
Un Saludo