java - crear - BIRT en una aplicación de escritorio
aplicacion de escritorio java netbeans (6)
Es posible y puedes crear fácilmente una vista previa del informe en un JeditorPane, tienes que descargar BIRT Runtime y luego puedes probar con el código de ejemplo publicado en esta publicación en el foro de Eclipse.
¿Alguna vez alguien usó un informe BIRT en una aplicación de escritorio? Vengo del entorno .NET y allí puede usar Crystal Reports para mostrar informes en aplicaciones de escritorio. ¿Esto también es posible con BIRT, sin tener que configurar un entorno de servidor?
¿Me puede dar algunos consejos sobre cómo alcanzar este objetivo?
Gracias por adelantado.
Sí, es posible. Aquí hay una descripción general. Aunque he usado Birt en el entorno del servidor, hasta donde sé, hay una interfaz RenderContext a través de la cual puede presentar sus informes de la manera que desee.
Sí, es posible. Lo usé en un proyecto que hice hace unos 1-2 años, así que tendré que volver a contactarlo con los detalles. (Aunque las cosas podrían haber cambiado desde entonces)
Aquí están los complementos que necesitaba:
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="var" path="JUNIT_HOME/junit.jar" sourcepath="JUNIT_SRC_HOME/junitsrc.zip"/>
<classpathentry kind="lib" path="lib/log4j-1.2.14.jar"/>
<classpathentry kind="lib" path="lib/swt.jar"/>
<classpathentry kind="con" path="SWT_CONTAINER"/>
<classpathentry kind="lib" path="org.eclipse.birt.chart_2.1.2.v20070205-1728.jar"/>
<classpathentry kind="lib" path="org.eclipse.birt.chart.device.extension_2.1.2.v20070205-1728.jar"/>
<classpathentry kind="lib" path="org.eclipse.birt.chart.device.swt_2.1.1.v20070205-1728.jar"/>
<classpathentry kind="lib" path="org.eclipse.birt.chart.engine_2.1.2.v20070205-1728.jar" sourcepath="C:/Programme/eclipse/plugins/org.eclipse.birt.chart.source_2.2.0.v20070209/src"/>
<classpathentry kind="lib" path="org.eclipse.birt.chart.engine.extension_2.1.2.v20070205-1728.jar"/>
<classpathentry kind="lib" path="org.eclipse.birt.chart.runtime_2.1.2.v20070205-1728.jar"/>
<classpathentry kind="lib" path="org.eclipse.birt.core_2.1.2.v20070205-1728.jar"/>
<classpathentry kind="lib" path="org.eclipse.emf.common_2.2.1.v200609210005.jar"/>
<classpathentry kind="lib" path="org.eclipse.emf.ecore_2.2.1.v200609210005.jar"/>
<classpathentry kind="lib" path="org.eclipse.emf.ecore.xmi_2.2.1.v200609210005.jar"/>
<classpathentry kind="lib" path="js.jar"/>
<classpathentry kind="lib" path="com.ibm.icu_3.4.5.jar"/>
<classpathentry kind="lib" path="org.eclipse.birt.chart.ui_2.1.1.v20070205-1728.jar"/>
<classpathentry kind="lib" path="org.eclipse.birt.chart.ui.extension_2.1.2.v20070205-1728.jar"/>
<classpathentry kind="lib" path="lib/hsqldb.jar"/>
<classpathentry kind="output" path="bin"/>
</classpath>
Si su aplicación de escritorio está escrita usando Eclipse Rich Client Platform (RCP), es trivial agregar informes. Todo lo que necesita hacer es agregar el complemento org.eclipse.birt.viewer y luego usarlo.
Aquí hay un artículo que lo explica: http://digiassn.blogspot.com/2008/08/birt-launch-birt-rcp-application.html
package com.passport;
import java.io.FileOutputStream;
import java.util.Collection;
import java.util.Iterator;
import org.eclipse.birt.core.framework.Platform;
import org.eclipse.birt.report.engine.api.EngineConfig;
import org.eclipse.birt.report.engine.api.IGetParameterDefinitionTask;
import org.eclipse.birt.report.engine.api.IParameterDefnBase;
import org.eclipse.birt.report.engine.api.IRenderOption;
import org.eclipse.birt.report.engine.api.IReportEngine;
import org.eclipse.birt.report.engine.api.IReportEngineFactory;
import org.eclipse.birt.report.engine.api.IReportRunnable;
import org.eclipse.birt.report.engine.api.IRunAndRenderTask;
import org.eclipse.birt.report.engine.api.RenderOption;
public class EngineReport {
private static final long serialVersionUID = 1L;
private IReportEngine engine=null;
private EngineConfig engineconfig = null;
private IReportEngineFactory factory = null;
private String sourceReport;
private String locationReport;
private String reportRealPath = "";
public static void main(String[] args){
EngineReport engineReport = new EngineReport();
engineReport.save("src/com/passport/report.rptdesign","c:/tmp/rep.doc");
}
private void save(String sourceReport, String locationReport) {
this.sourceReport = sourceReport;
this.locationReport = locationReport;
IReportRunnable design = null;
IRenderOption options = null;
try {
String reportFormat = locationReport.substring(locationReport.lastIndexOf(''.'')+1);
sourceReport = "src/com/passport/report.rptdesign";
if ((sourceReport != null && (sourceReport.length() > 0)) ) {
engineconfig = new EngineConfig();
reportRealPath = "";
Platform.startup(engineconfig);
factory = (IReportEngineFactory) Platform.createFactoryObject(IReportEngineFactory.EXTENSION_REPORT_ENGINE_FACTORY);
engine = factory.createReportEngine(engineconfig);
design = engine.openReportDesign(reportRealPath+sourceReport);
IRunAndRenderTask task = engine.createRunAndRenderTask(design);
IGetParameterDefinitionTask taskParam = engine.createGetParameterDefinitionTask( design );
Collection<?> params = taskParam.getParameterDefns( false );
String paramName = null;
Iterator<?> iterOuter = params.iterator( );
while ( iterOuter.hasNext( ) ) {
IParameterDefnBase param = (IParameterDefnBase) iterOuter.next( );
paramName = param.getName( );
if (paramName.equalsIgnoreCase("PR_SOME_PARAM")) {
task.setParameterValue(paramName,"someparam");
}
else if (paramName.equalsIgnoreCase("PR_SOME_PARAM_2")) {
task.setParameterValue(paramName,"someparam2");
}
}
options = new RenderOption();
options.setOutputFormat(reportFormat);
FileOutputStream fos = new FileOutputStream(locationReport);
options.setOutputStream(fos);
task.setRenderOption(options);
task.run();
task.close();
engine.destroy();
fos.close();
}
} catch(Exception e) {
System.out.println(e.toString());
}
}
}
Hay un tiempo de ejecución BIRT que le permite generar informes desde la línea de comandos. Lee este articulo Eso le permitirá usar BIRT sin un servidor. Originalmente se menciona aquí como una respuesta a mi propia pregunta .