wicket-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From reiern70 <reier...@gmail.com>
Subject Re: DownloadLink, BIRT report
Date Thu, 01 Jan 2009 00:32:16 GMT

Hi,

For the BIRT part you need to install somewhere a BIRT runtime. Essentially,
this an equinox OSGi runtime with a folder structure like:

{root}-configuration`
         -plugins

If you have extended BIRT by adding your own ODA extensions then you have to
drop them on the plugins folder. There is also a folder (e.g.
plugins/org.eclipse.birt.report.data.oda.jdbc_2.3.0.v20080610/drivers) where
you have to drop any JDBC drivers you need to connect to your database (in
case you are using standard ODA drivers). I usually install the BIRT runtime
under WEB-INF...

The next step is to have instantiate this runtime and use it to generate
your reports. I do this via a class like the following:


public class Birt {
	
        .............

        private static IReportEngine engine;


	public static final void startEngine() {
		try {
			if(engine != null)
				return;
			
			EngineConfig engCnf = new EngineConfig();			
		
engCnf.setEngineHome(ConfigGlobal.i.resuelveRuta("WEB-INF/birt").toString());
			engCnf.setLogConfig(ConfigGlobal.i.resuelveRuta("../logs").toString(),
Level.ALL);			
			Platform.startup(engCnf);
			IReportEngineFactory factory = (IReportEngineFactory) Platform
				.createFactoryObject(
IReportEngineFactory.EXTENSION_REPORT_ENGINE_FACTORY );
			engine = factory.createReportEngine(engCnf);
			engine.changeLogLevel( Level.OFF );						
		} catch (Throwable ex) {
			log.fatal("", ex);
		}
	}
	
	public static final void stopEngine() {
		try {
			engine.destroy();
			engine = null;
		} catch (Exception e) {
		}
	}
	
	public static IReportEngine getEngine() {
		if(engine == null) {
			startEngine();
		}
		return engine;
	}
 

        public static void generateBirtReport(String file, 
			String fmt, 
			OutputStream out, 
			IdSql area, 
			ReportInfo petA, 
			JSONObject parametros_Reporte, Locale locale, boolean autoPageBreaking)
throws Exception {
		Attachment attachment = Attachment.loadFromTable(file, area);
		File tmpDir =
ConfigGlobal.i.resuelveRuta(LectorConfig.i.get().getChild("dirs").getChild("tmp").getValue());
		// creating a resource locator that is capable of retrieving libraries 
		// or images from the database...
		DataBaseResourceLocator dataBaseResourceLocator = new
DataBaseResourceLocator(area);
		IReportRunnable design =
getEngine().openReportDesign("test",attachment.getAsInputStream(),
dataBaseResourceLocator);
	
updateDataSources((ReportDesignHandle)design.getDesignHandle().getModuleHandle(),
petA);
		IRunAndRenderTask renderTask = getEngine().createRunAndRenderTask(design);
		RenderOption opcRend;
		if ("pdf".equals(fmt)) {
			PDFRenderOption opc = new PDFRenderOption();
			opc.setOutputFormat("pdf");
			//ReportDesignHandle designHandle =
(ReportDesignHandle)design.getDesignHandle().getModuleHandle();			
			//designHandle.setDisplayName(null);
			// para reducir la pagina tal como sale desde el diseƱador BIRT
			opc.setOption(PDFRenderOption.PAGEBREAK_PAGINATION_ONLY,
autoPageBreaking);
			opc.setOption(PDFRenderOption.FIT_TO_PAGE, autoPageBreaking);
			
			opcRend = opc;
		} else if ("excel".equals(fmt)){
			// TODO: find if there is 
			opcRend = new RenderOption();
			opcRend.setOutputFormat("xls");			
		} else {
			HTMLRenderOption opc = new HTMLRenderOption();
			opc.setHtmlTitle(design.getReportName());
			opc.setBaseImageURL("/recursos/img/x.birt-img?imagen=");
			opc.setImageDirectory(tmpDir.getAbsolutePath());
			opc.setImageHandler(new HTMLServerImageHandler());
			opcRend = opc;
		}
		// hanlde report paramteters.
		if(parametros_Reporte != null) {
			Iterator<String> it = (Iterator<String>)parametros_Reporte.keys(); 
			while(it.hasNext()) {
				String param = it.next();
				try {
					// first try to handle the parameter as multivalued.
					JSONArray array = parametros_Reporte.getJSONArray(param);
					Object[] values = new Object[]{array.length()};
					for(int i=0; i < array.length(); i++) {
						try {
							values[i] = array.get(i);
						} catch (Exception e) {
							values[i] = null;
						}
					}
					renderTask.setParameterValue(param, values);
				} catch (Exception e) {
					// if parameter is not multi-valued then treat it as single-valued.
					String value = parametros_Reporte.getString(param);				
					renderTask.setParameterValue(param, value);
				}				
			}
		}
		opcRend.setOutputStream(out);				
		renderTask.setLocale(locale);
		renderTask.setRenderOption(opcRend);
		renderTask.run();
	}
        .........

}

This class initializes a singleton BIRT runtime and the
generateBirtReport(...) method can be used to read the report design from a
database and generate the corresponding report (PDF, excel, HTML).  If you
filter out the logic that is specific to my use case you can easily build
your own machinery for building reports based on code given above.

As for the generation of the download link there should be plenty of
examples and/or related threads in this list... 

Best,

Ernesto







newbieabc wrote:
> 
> The generation of the excel report.
> I am really new to BIRT and wicket..
> I've created the BIRT report (report.rptdesign)(in eclipse) but need it to
> be output as xls.
> I'd really appreciate some help. 
> Thank you
> 
> 
> reiern70 wrote:
>> 
>> Sure you can... Which part is giving you problems? The generation of the
>> excel report with BIRT? Or the creation of the link?
>> 
>> Best,
>> 
>> Ernesto
>> 
>> newbieabc wrote:
>>> Hello..
>>> How can create a download link on a webpage, that converts a BIRT report
>>> to
>>> excel format and downloads to client machine?
>>>
>>> Thank you.
>>>   
>> 
>> 
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
>> For additional commands, e-mail: users-help@wicket.apache.org
>> 
>> 
>> 
> 
> 

-- 
View this message in context: http://www.nabble.com/DownloadLink%2C-BIRT-report-tp21218997p21238208.html
Sent from the Wicket - User mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org


Mime
View raw message