Lo pongo aquí a groso modo. Cuando tenga un ratito le doy mas formato y comento mas y mejor
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 |
package ad.pruebas; // import java.util.Iterator; import java.util.logging.Level; // import org.eclipse.birt.report.engine.api.EngineConfig; import org.eclipse.birt.report.engine.api.EngineException; import org.eclipse.birt.report.engine.api.HTMLCompleteImageHandler; import org.eclipse.birt.report.engine.api.HTMLRenderOption; import org.eclipse.birt.report.engine.api.IReportEngine; import org.eclipse.birt.report.engine.api.IReportRunnable; import org.eclipse.birt.report.engine.api.IRunAndRenderTask; import org.eclipse.birt.report.engine.api.ReportEngine; import org.eclipse.birt.report.model.api.OdaDataSourceHandle; // // clase para encapsular birt. requiere la existencia de un .rptdessign previo y genera un pdf // // para compilar, basta con que, por ejemplo, nuestro ide eclipse tenga el plugin de birt, pero la ejecución requiere la existencia de un runtime birt en el filesystem, y cuando lancemos el java -jar o java -cp, dicha carpeta estara en el path. sin embargo, si nuestro proyecto es web, podemos usar url's para acceder a los informes. // // la ruta de la cadena de conexion de la bd se asigna dinamicamente, sobreescribiendo la configuracion que tenga el datasource del .rptdesign // // ejemplo de uso: // genera un report a partir de un diseño finalizado y deposita el resultado en el filesystem // GestorInformesBirt gib = new GestorInformesBirt(null, null); // gib.preparaInforme ("c:/carpeta1/RptCataleg/informe1.rptdesign", "pdf"); // gib.estableixParametre("pIdMinim", "500" ); // gib.estableixParametre("pTitol" , "prova de titol"); // gib.EjecutaInforme (); // utils.obrePdf (rutaRpts+"informe1.pdf"); // // us de jt400.jar: // per que birt trobi el jt400.jar: // si estem executant en fase de disseny (des del ide eclipse ): // - el .rptdesign ha de tenir una ruta valida al datasource que apunti al jar. // si estem executant en entorn productiu(amb comandes birt o java -jar): // - el .rptdesign ha de tenir una ruta valida al datasource que apunti al jar, o be // - el jar ha de formar part del package del projecte (haura estat inclos amb mvn i incorporat amb maven-shade-plugin al package), o be // - el jar ha de ser a la mateixa ruta que el .rptdesign que executem, o be // - el jar ha de ser a la carpeta ...\ReportEngine\lib del runtime que estiguem fent servir. // // pdf resultant: // actualment, el pdf resultant ho estem deixant a la mateixa carpeta que el .rptdesign // public class GestorInformesBirt { // private String urlBDdev = "jdbc:as400://192.168.999.999"; // la que sea private String urlBDpre = "jdbc:as400://192.168.999.999"; // la que sea private String urlBDpro = "jdbc:as400://192.168.999.999"; // la que sea // private String idBD = "asdev"; // en el constructor se li pot especificar asdev, aspre, o aspro. per defecte es mante asdev private EngineConfig config = null; private IReportEngine enginy = null; private IReportRunnable informe = null; private IRunAndRenderTask tasca = null; private HTMLRenderOption options = null; // private String nomCanonicInforme = ""; // public GestorInformesBirt(String idBD, String nivellLogBirt) { // podem indicar contra quina instancia as400 treballarem if (!idBD.equals("")) { this.idBD = idBD; } // prepara configuracio del enginy gestor d'informes config = new EngineConfig(); // aplica el nivell de log birt solicitat (inclos) switch (nivellLogBirt) { // case "tot" : config.setLogConfig("", Level.ALL ); break; // crec que es el defecte case "logSiWarning": config.setLogConfig("", Level.WARNING); break; case "logSiError" : config.setLogConfig("", Level.SEVERE ); break; case "senseLog" : config.setLogConfig("", Level.OFF ); break; default : break; } // prepara objecte del enginy gestor d'informes (un enginy pot ser utilitzat per executar diferents informes) enginy = new ReportEngine(config); } public void preparaInforme(String nomCanonicInforme, String format) { // obre .rptdesign try { informe = enginy.openReportDesign(nomCanonicInforme); } catch (Exception e) { System.err.println("Hi ha hagut problemes al obrir "+nomCanonicInforme); System.err.println("Una possible causa es (si esta executant des de linia de comanda, es a dir, al cmd o amb java -jar, no des de l'ide),"); System.err.println("que no hagi incorporat (amb la propia comanda) les llibreries(jars)birt que hi ha dins .../ReportEngine/lib/*"); System.err.println("Exemple de crida(a linux cal sustituir els dos punts i coma per dos punts):"); System.err.println("java -cp c:/carpeta1/ReportEngine/lib/*;c:/carpeta1/workspace1/projecte1/target/projecte1-0.0.1-b001-jar-with-dependencies.jar ad.pruebas.Main"); e.printStackTrace(); enginy.destroy(); System.exit(1); } // modifica la url de la bd dinamicament for (Iterator iter = informe.getDesignHandle().getModuleHandle().getDataSources().iterator(); iter.hasNext();){ Object element = iter.next(); if (element instanceof OdaDataSourceHandle){ OdaDataSourceHandle dsHandle = (OdaDataSourceHandle) element; String key = dsHandle.getName(); if (key == null){ continue; } try { switch (idBD) { case "aspre": dsHandle.setProperty("odaURL", urlBDpre); break; // altres propietat son odaDriverClass, odaUser, odaPassword, ... case "aspro": dsHandle.setProperty("odaURL", urlBDpro); break; default : dsHandle.setProperty("odaURL", urlBDdev); break; } } catch (Exception e) { e.printStackTrace(); } } } // crea tasca per executar l'informe, convertir la sortida a html o pdf, i definir on s'ubicara tasca = enginy.createRunAndRenderTask(informe); options = new HTMLRenderOption(); options.setOutputFormat(format); options.setOutputFileName(nomCanonicInforme.replaceFirst(".rptdesign", "."+format)); options.setImageHandler(new HTMLCompleteImageHandler()); tasca.setRenderOption(options); } public void estableixParametre(String parametre, String valor) { tasca.setParameterValue(parametre, valor); } public void estableixParametre(String parametre, int valor) { tasca.setParameterValue(parametre, valor); } public void estableixParametre(String parametre, double valor) { tasca.setParameterValue(parametre, valor); } public void ExecutaInforme() { // executa l'informe try { tasca.run( ); } catch (EngineException e1) { System.err.println("l'execucio de "+nomCanonicInforme+" ha fallat: "+e1.toString()); } enginy.destroy( ); } } |