birt使用quartz框架实现自动生成报表

原创 2011年01月13日 18:25:00

    经过两天的学习,终于通过quartz框架将birt的自动生成报表功能实现了,下面将代码粘贴上来,仅供参考。

   1、GenReportAutoDs类,用来生成报表。其中资源库文件位于工程根目录下的library下,因此需要单独设置,另外报表需要两个参数,也一并赋值。

package cn.xxt.test;

import java.util.Date;

import javax.servlet.ServletContext;

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;
import org.springframework.web.context.ContextLoader;

import cn.xxt.util.DateUtil;

public class GenReportAutoDs {
 @SuppressWarnings("unchecked")
 public void runReport() {
  System.out.println(DateUtil.format(new Date(), "HH:mm:ss", false)+":开始生成包含library报表……");
  IReportEngine birtEngine = null;
  EngineConfig config = new EngineConfig();
  ServletContext servletContext = ContextLoader.getCurrentWebApplicationContext().getServletContext();
  IPlatformContext context = new PlatformServletContext(servletContext);
  String path = servletContext.getRealPath("/report");
  config.setPlatformContext(context);
  config.setResourcePath(servletContext.getRealPath("/library"));
  try {
   Platform.startup(config);
   IReportEngineFactory factory = (IReportEngineFactory) Platform
     .createFactoryObject(IReportEngineFactory.EXTENSION_REPORT_ENGINE_FACTORY);
   birtEngine = factory.createReportEngine(config);
   IReportRunnable design = null;
   design = birtEngine.openReportDesign(path
     + "/test/cascading.rptdesign");
   IRunAndRenderTask task = birtEngine.createRunAndRenderTask(design);
   task.getAppContext().put(
     EngineConstants.APPCONTEXT_CLASSLOADER_KEY,
     GenReportAutoDs.class.getClassLoader());
   task.setParameterValue("province", 1);
   task.setParameterValue("city", 372);
   HTMLRenderOption options = new HTMLRenderOption();
   options.setOutputFileName(path + "/test/output/cascading"
     + DateUtil.format(new Date(), "HH-mm", false) + ".pdf"); // 生成pdf文件保存在output文件夹里。
   options.setOutputFormat("pdf");
   options.setHtmlRtLFlag(false);
   options.setEmbeddable(false);
   task.setRenderOption(options);
   task.run();
   task.close();
   birtEngine.destroy();
   //System.out.println("关闭引擎……");
   //不可调用,否则报异常
   //Platform.shutdown();
   //System.out.println("关闭平台……");
   System.out.println(DateUtil.format(new Date(), "HH:mm:ss", false)+":包含library报表生成完成!");
  } catch (Exception e) {
   System.out.println("使用库导出报表失败!");
   System.err.println("错误原因:"+e.getMessage());
  }
 }
}
    2、新建quartz配置文件,内容如下:

    <?xml version="1.0" encoding="gbk"?>
<beans xmlns="
http://www.springframework.org/schema/beans"
       xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="
http://www.springframework.org/schema/context"      
       xsi:schemaLocation="
http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
           http://www.springframework.org/schema/context
          
http://www.springframework.org/schema/context/spring-context-2.5.xsd" default-lazy-init="true">

 <bean name="timingSet" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
  <property name="targetObject" ref="genReportAutoDs"></property>
  <property name="targetMethod" value="runReport"></property>
 </bean>
 
 <bean name="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
  <property name="jobDetail" ref="timingSet"></property>
  <property name="cronExpression" value="0 0/1 * * * ?"></property>
 </bean>
 
 <bean name="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean" lazy-init="false">
  <property name="triggers"> 
   <list> 
    <ref bean="cronTrigger"/>
   </list> 
  </property>
  <property name="autoStartup" value="true"/>
 </bean>

</beans>

蓝色标注部分为GenReportAutoDs类对应的bean对象。

     3、启动tomcat服务,可以舒服的看到报表文件按照设定的周期生成啦,心里那个爽歪歪^_^

 

说明:碰到的问题和解决办法:

         1、报表文件无法加载library文件的问题。由于后台调用的java代码无法读取web.xml里的内容,所以需要单独设置资源文件的路径,设置方法为config.setResourcePath(servletContext.getRealPath("/library"));
         2、Platform.shutdown()方法在生成报表后不可调用,否则会产生第一次生成成功,第二次报异常的问题,查了很多资料才找到原因,很崩溃。

eclipse birt报表开发入门

在开发中,报表或多或少会涉及到,有些报表可能比较简单,而有些报表可能很复杂。无论如何,这些报表功能的开发都是可以通过一些公共的组件来实现的,比如我现在所在的这家公司,如果想要制作报表,只需要配置下报表...
  • baicp3
  • baicp3
  • 2016年01月30日 14:32
  • 3745

任务调度开源框架Quartz动态添加、修改和删除定时任务

Quartz 是个开源的作业调度框架,为在 Java 应用程序中进行作业调度提供了简单却强大的机制。Quartz框架包含了调度器监听、作业和触发器监听。你可以配置作业和触发器监听为全局监听或者是特定于...
  • pengpegV5yaya
  • pengpegV5yaya
  • 2014年07月09日 12:24
  • 77919

java中如何用Quartz框架来实现定时任务(一)

Quartz介绍: Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单...
  • u013310119
  • u013310119
  • 2017年04月01日 10:01
  • 5543

birt使用quartz框架实现自动生成报表

1、GenReportAutoDs类,用来生成报表。其中资源库文件位于工程根目录下的library下,因此需要单独设置,另外报表需要两个参数,也一并赋值。 package cn.xxt.test...
  • milife2012
  • milife2012
  • 2014年10月21日 00:13
  • 575

使用quartz框架自动发送报表。

自动报表,每天准时向oa系统发送数据: 使用到的技术:quartz+spring+mybatis+mysql 1)quartz在spring中的使用:   a)创建application...
  • fjr_huoniao
  • fjr_huoniao
  • 2014年01月21日 14:22
  • 669

Azure云数据库报表自动生成Excel 并自动发送邮件实现

由于正式环境假设在微软云上,使用的数据库也是DB云服务,所以目前的SQL SERVER数据库仅支持表、视图的查询和修改,类似于作业、存储过程、管理等权限,全部不能使用(按照微软的说法是,这样DB库就是...
  • zzy5066
  • zzy5066
  • 2017年05月31日 11:26
  • 495

Quartz 表达式自动生成插件

  • 2017年11月08日 11:20
  • 461KB
  • 下载

使用Myeclipse10.0自动生成搭建SSH框架(数据库表自动反向转换成Hibernate实体)实现用户登陆

使用Myeclipse生成的SSH例子,很方便也很简单
  • Jerome_s
  • Jerome_s
  • 2014年05月26日 08:50
  • 1980

mysql数据自动生成报表软件下载

  • 2013年12月24日 15:27
  • 11.34MB
  • 下载

手工账必备(融合会计业务检查、三大财务报表自动生成

  • 2014年05月29日 02:35
  • 726KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:birt使用quartz框架实现自动生成报表
举报原因:
原因补充:

(最多只允许输入30个字)