b/s下的birt定时生成报表功能。
先写一个TimerServlet,web.xml配置如下:
TimerServlet
TimerServlet
com.test.TimerServlet
runTime //我定义的一个参数,用来在什么时候执行生成报表。
2009-05-03 21:44
1
TimerServlet代码如下:
package com.test;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Timer;
import java.util.TimerTask;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.eclipse.birt.core.exception.BirtException;
import org.eclipse.birt.core.framework.IPlatformContext;
import org.eclipse.birt.core.framework.Platform;
import org.eclipse.birt.core.framework.PlatformServletContext;
import org.eclipse.birt.report.engine.api.EngineConfig;
import org.eclipse.birt.report.engine.api.EngineConstants;
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;
public class TimerServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private String runTime;
private String pattern;
private ServletContext sc ;
public TimerServlet() {
super();
}
public void init(ServletConfig config) throws ServletException {
sc = config.getServletContext();
System.out.println("sc "+sc);
runTime = config.getInitParameter("runTime");
// runTime="2009-05-03 21:42";
pattern ="yyyy-MM-dd hh:mm";
SimpleDateFormat format = new SimpleDateFormat(pattern);
Calendar cal = Calendar.getInstance();
try {
cal.setTime(format.parse(runTime));
Timer t = new Timer();
t.schedule(new TimerTask(){ //这里我new了一个匿名类,做为schedule的第一个参数
@Override
public void run() {
runReport(); //当前时间是我们指定的时间时执行运行报表这个方法
}
}, cal.getTime()); //cal.getTime()这是schedule的第二个参数
} catch (ParseException e) {
e.printStackTrace();
}
}
private void runReport() {
IReportEngine birtEngine = null;
EngineConfig config = null;
config = new EngineConfig();
config.setEngineHome("");
IPlatformContext context = new PlatformServletContext(sc);
config.setPlatformContext(context);
try {
Platform.startup(config);
} catch (BirtException e) {
e.printStackTrace();
}
IReportEngineFactory factory = (IReportEngineFactory) Platform
.createFactoryObject(IReportEngineFactory.EXTENSION_REPORT_ENGINE_FACTORY);
birtEngine = factory.createReportEngine(config);
IReportRunnable design;
try
{
design = birtEngine.openReportDesign( sc.getRealPath("/Reports")+"/test2.rptdesign" );
IRunAndRenderTask task = birtEngine.createRunAndRenderTask( design );
task.getAppContext().put(EngineConstants.APPCONTEXT_CLASSLOADER_KEY, TimerServlet.class.getClassLoader());
HTMLRenderOption options = new HTMLRenderOption();
options.setOutputFileName(sc.getRealPath("/output")+"/test2.pdf" ); //生成pdf文件保存在output文件夹里。
options.setOutputFormat("pdf");
options.setHtmlRtLFlag(false);
options.setEmbeddable(false);
task.setRenderOption(options);
task.run();
task.close();
System.out.println("success!");
}catch (Exception e){
e.printStackTrace();
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
super.doGet(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
super.doGet(request, response);
}
}