经过两天的学习,终于通过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()方法在生成报表后不可调用,否则会产生第一次生成成功,第二次报异常的问题,查了很多资料才找到原因,很崩溃。

birt使用quartz框架实现自动生成报表相关推荐

  1. 工业企业能耗监测系统 自动生成报表

    能源现状 目前,很多企业单位具有工业监控系统,可以监视运行状态.但是没有能源管控系统,不能对能源消耗进行监视与分析.这就造成在生产安排方面缺乏数据支撑,无法对整个厂区的生产进行有效的安排.调度,不能提 ...

  2. 市面上有哪些自动生成报表的工具?

    每到月末.季度.年底,就是企业里各营销.财务.运营.企管等各部门"摆数据.晒业绩"的时候,除了财务因为有规范的制度约束,在规则和工具上更有保障(最常见的就是在财务软件/ERP 里面 ...

  3. excel自动生成舒尔特表_财务总监:超完美Excel全套账财务系统,自动生成报表,收好喽...

    对于很多初学会计的小伙伴来说,很多账务不知该如何处理,三大会计报表也不知道该怎么做.或者是新手会计处理账务经常熬夜加班. 今天,小编给大家分享一套超级实用的Excel全套账财务系统,可以自动生成三大财 ...

  4. 制作新网络框架快速自动生成消息结构体的编辑器

    这两天制作了一个自动生成代码脚本的窗体编辑器 目前还没有做过第一行可以选择生成的脚本类型,分请求消息和回应消息两种结构体脚本 第二行可以手动输入命名空间,第三行手动输入文件的名称,类名与文件名称相同 ...

  5. MyBatis框架generatorSqlmapCustom自动生成及下载方法

    参考这个博客地址:常用数据库的驱动程序加载和Url下载地址 https://blog.csdn.net/qq_30225725/article/details/88574463 1.把下载好的驱动放到 ...

  6. Delphi控制Excel自动生成报表

    摘要:Excel是当前最流行的数据报表制作工具.本文介绍如何使用Delphi来控制Excel完成数据库与报表之间的数据交换,讨论了报表制作工程中的一些细节性问题. 关键字:Delphi,Excel,报 ...

  7. 智能算法!数据平台自动生成报表,智慧景区的可视化有什么不同

    十一各位都出去玩吗?有没有想过用大数据和数据可视化和景区也能联系起来呢? 项目背景 1.信息化发展历程 2015年以前,景区基本没有信息化概念,比如门票是印刷版,检票人工打孔,手工数据报表等,随着信息 ...

  8. 使用Python自动生成报表以邮件发送

    编程狗在线 自由的编程学习平台 数据分析师肯定每天都被各种各样的数据数据报表搞得焦头烂额,老板的,运营的.产品的等等.而且大部分报表都是重复性的工作,这篇文章就是帮助大家如何用Python来实现报表的 ...

  9. sqlserver 通过触发器 自动生成报表 数据表 每小时自动生成报表

    这段时间做一个项目,想着不改程序的情况下,实现库里一些报表的自动创建功能. 就有了以下思路 Create TRIGGER TRIGGER_AUTOCREATEREPORTon [sensor]afte ...

最新文章

  1. ubuntu 如何关闭离线模式_如何在macOS中打开或关闭Mac暗黑模式
  2. vue 后台返回的文件流进行预览_vue项目-pdf预览和下载,后台返回文件流形式
  3. 如何使用ODBC搭配dsn链接数据库
  4. opencv 获取一个目录下子目录_OpenCV系列 --- OpenCV4.01配置VS2015
  5. java校验文件格式_Java 判断文件是否为文本格式,并获取文件编码格式,读取内容!...
  6. php 强制变为整数,强制PHP整数溢出
  7. UML类图之六种基本关系详解
  8. IOT(31)---物联网平台架构设计
  9. 计算机指令就是一串开关吗,什么是非法关机?常按计算机开关,还是直接拔掉电源插头才算啊?...
  10. sql server 数组_如何在SQL Server中实现类似数组的功能
  11. Yahoo Web UIs——Java开发者丰富的Web UI
  12. TensorFlow实践:经典CNN-AlexNet
  13. java汉字转拼音区别多音字_Java中汉字转拼音pinyin4j用法实例分析
  14. 石油化工设备维护检修规程_【干货】罗茨鼓风机维护检修规程
  15. 初识:心血管磁共振(CMR)成像
  16. FreeSwitch uuid_bridge代码分析
  17. 软件测试面试中90%会遇到的问题;你会搭建测试环境吗?
  18. UNCODE 与 ANSI 编码互相转换
  19. 陕西省计算机大赛,陕西省青少年信息学(计算机)奥林匹克竞赛委员会文件.doc
  20. 计算机技术协会主持词,协会表彰大会主持词

热门文章

  1. AAAI 2020 Location-aware Graph Convolutional Networks for Video Question Answering
  2. 小白记录之网易云音乐API使用 NeteaseCloudMusicApi
  3. python猪肉价格预测_如果现在生猪期货上市,猪肉价格会下降吗?
  4. 能影响未来十年的十项新技术
  5. 程序人生 - 空调除湿与制冷的区别?
  6. 翼辉操作系统 linux,2K龙芯派翼辉SylixOS操作系统实验手册-翼辉信息.PDF
  7. 如何将新闻稿发布到门户网站?
  8. 方法:使用Visio中的页面内引用(超链接),实现形状之间的跳转
  9. python删除指定路径文件夹_Python 实现删除某路径下文件及文件夹
  10. 优化问题-半正定规划(Semi-Definite Program, SDP)