今天我先说在CS程序中如何定时生成报表,
代码如下:
package com;
import java.util.Timer;
import java.util.TimerTask;
import java.util.logging.Level;
import org.eclipse.birt.core.framework.Platform;
import org.eclipse.birt.report.engine.api.EngineConfig;
import org.eclipse.birt.report.engine.api.HTMLRenderOption;
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.PDFRenderOption;
public class TimerTest {
private int i; //设定这个i是方便我测试的,后面会说到。
private void timeTest(){
Timer t = new Timer(); //构造定时器
t.schedule(new MyTask(), 0,1000); //执行任务。表示立即执行,并隔1秒后再次执行
}
public static void main(String args[]){
new TimerTest().timeTest();
}
private class MyTask extends TimerTask{
@Override
public void run() {
i++;
runReport(i); //运行报表
}
}
private void runReport(int i) {
IReportEngine engine=null;
EngineConfig config = null;
try{
config = new EngineConfig( );
config.setBIRTHome("F:/language/report/birt/soft/birt-runtime-2_3_0/birt-runtime-2_3_0/ReportEngine"); //这是CS程序,直接设置birthome
Platform.startup( config );
IReportEngineFactory factory = (IReportEngineFactory) Platform
.createFactoryObject( IReportEngineFactory.EXTENSION_REPORT_ENGINE_FACTORY );
engine = factory.createReportEngine( config );
IReportRunnable design = null;
//Open the report design
design = engine.openReportDesign("reports/test2.rptdesign"); //打开这个已经写好的报表文件
IRunAndRenderTask task = engine.createRunAndRenderTask(design);
task.setParameterValue("id", i); //设置报表参数为i(这个i第次会加1,上面写i++了。)
HTMLRenderOption options = new HTMLRenderOption();
options.setOutputFileName("output/test"+i+".pdf"); //设置生成的pdf名称,动态的。
options.setOutputFormat("pdf"); //设置显示格式为pdf,可以改成html
options.setHtmlRtLFlag(false);
options.setEmbeddable(false);
task.setRenderOption(options);
task.run();
System.out.println("succuess");
task.close();
engine.destroy();
}catch( Exception ex){
ex.printStackTrace();
}
finally
{
Platform.shutdown( );
}
}
}
就这么简单报表会每隔一秒终运行一次,并把参数设置成不同,在保存的pdf里可能查看到参数的变化。
说明:.test2.rptdesign这是个随便建立的报表,我这里传了个参数,没多大用,
但我演示了很重要的东西,就是设置参数,我们的报表运行可能是要传动态参数的,在这里就可以设置了。
不早了,我先写这篇吧,有时候写下篇,在web工程里定时生成报表。
代码如下:
package com;
import java.util.Timer;
import java.util.TimerTask;
import java.util.logging.Level;
import org.eclipse.birt.core.framework.Platform;
import org.eclipse.birt.report.engine.api.EngineConfig;
import org.eclipse.birt.report.engine.api.HTMLRenderOption;
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.PDFRenderOption;
public class TimerTest {
private int i; //设定这个i是方便我测试的,后面会说到。
private void timeTest(){
Timer t = new Timer(); //构造定时器
t.schedule(new MyTask(), 0,1000); //执行任务。表示立即执行,并隔1秒后再次执行
}
public static void main(String args[]){
new TimerTest().timeTest();
}
private class MyTask extends TimerTask{
@Override
public void run() {
i++;
runReport(i); //运行报表
}
}
private void runReport(int i) {
IReportEngine engine=null;
EngineConfig config = null;
try{
config = new EngineConfig( );
config.setBIRTHome("F:/language/report/birt/soft/birt-runtime-2_3_0/birt-runtime-2_3_0/ReportEngine"); //这是CS程序,直接设置birthome
Platform.startup( config );
IReportEngineFactory factory = (IReportEngineFactory) Platform
.createFactoryObject( IReportEngineFactory.EXTENSION_REPORT_ENGINE_FACTORY );
engine = factory.createReportEngine( config );
IReportRunnable design = null;
//Open the report design
design = engine.openReportDesign("reports/test2.rptdesign"); //打开这个已经写好的报表文件
IRunAndRenderTask task = engine.createRunAndRenderTask(design);
task.setParameterValue("id", i); //设置报表参数为i(这个i第次会加1,上面写i++了。)
HTMLRenderOption options = new HTMLRenderOption();
options.setOutputFileName("output/test"+i+".pdf"); //设置生成的pdf名称,动态的。
options.setOutputFormat("pdf"); //设置显示格式为pdf,可以改成html
options.setHtmlRtLFlag(false);
options.setEmbeddable(false);
task.setRenderOption(options);
task.run();
System.out.println("succuess");
task.close();
engine.destroy();
}catch( Exception ex){
ex.printStackTrace();
}
finally
{
Platform.shutdown( );
}
}
}
就这么简单报表会每隔一秒终运行一次,并把参数设置成不同,在保存的pdf里可能查看到参数的变化。
说明:.test2.rptdesign这是个随便建立的报表,我这里传了个参数,没多大用,
但我演示了很重要的东西,就是设置参数,我们的报表运行可能是要传动态参数的,在这里就可以设置了。
不早了,我先写这篇吧,有时候写下篇,在web工程里定时生成报表。