birt使用quartz框架实现自动生成报表
经过两天的学习,终于通过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框架实现自动生成报表相关推荐
- 工业企业能耗监测系统 自动生成报表
能源现状 目前,很多企业单位具有工业监控系统,可以监视运行状态.但是没有能源管控系统,不能对能源消耗进行监视与分析.这就造成在生产安排方面缺乏数据支撑,无法对整个厂区的生产进行有效的安排.调度,不能提 ...
- 市面上有哪些自动生成报表的工具?
每到月末.季度.年底,就是企业里各营销.财务.运营.企管等各部门"摆数据.晒业绩"的时候,除了财务因为有规范的制度约束,在规则和工具上更有保障(最常见的就是在财务软件/ERP 里面 ...
- excel自动生成舒尔特表_财务总监:超完美Excel全套账财务系统,自动生成报表,收好喽...
对于很多初学会计的小伙伴来说,很多账务不知该如何处理,三大会计报表也不知道该怎么做.或者是新手会计处理账务经常熬夜加班. 今天,小编给大家分享一套超级实用的Excel全套账财务系统,可以自动生成三大财 ...
- 制作新网络框架快速自动生成消息结构体的编辑器
这两天制作了一个自动生成代码脚本的窗体编辑器 目前还没有做过第一行可以选择生成的脚本类型,分请求消息和回应消息两种结构体脚本 第二行可以手动输入命名空间,第三行手动输入文件的名称,类名与文件名称相同 ...
- MyBatis框架generatorSqlmapCustom自动生成及下载方法
参考这个博客地址:常用数据库的驱动程序加载和Url下载地址 https://blog.csdn.net/qq_30225725/article/details/88574463 1.把下载好的驱动放到 ...
- Delphi控制Excel自动生成报表
摘要:Excel是当前最流行的数据报表制作工具.本文介绍如何使用Delphi来控制Excel完成数据库与报表之间的数据交换,讨论了报表制作工程中的一些细节性问题. 关键字:Delphi,Excel,报 ...
- 智能算法!数据平台自动生成报表,智慧景区的可视化有什么不同
十一各位都出去玩吗?有没有想过用大数据和数据可视化和景区也能联系起来呢? 项目背景 1.信息化发展历程 2015年以前,景区基本没有信息化概念,比如门票是印刷版,检票人工打孔,手工数据报表等,随着信息 ...
- 使用Python自动生成报表以邮件发送
编程狗在线 自由的编程学习平台 数据分析师肯定每天都被各种各样的数据数据报表搞得焦头烂额,老板的,运营的.产品的等等.而且大部分报表都是重复性的工作,这篇文章就是帮助大家如何用Python来实现报表的 ...
- sqlserver 通过触发器 自动生成报表 数据表 每小时自动生成报表
这段时间做一个项目,想着不改程序的情况下,实现库里一些报表的自动创建功能. 就有了以下思路 Create TRIGGER TRIGGER_AUTOCREATEREPORTon [sensor]afte ...
最新文章
- ubuntu 如何关闭离线模式_如何在macOS中打开或关闭Mac暗黑模式
- vue 后台返回的文件流进行预览_vue项目-pdf预览和下载,后台返回文件流形式
- 如何使用ODBC搭配dsn链接数据库
- opencv 获取一个目录下子目录_OpenCV系列 --- OpenCV4.01配置VS2015
- java校验文件格式_Java 判断文件是否为文本格式,并获取文件编码格式,读取内容!...
- php 强制变为整数,强制PHP整数溢出
- UML类图之六种基本关系详解
- IOT(31)---物联网平台架构设计
- 计算机指令就是一串开关吗,什么是非法关机?常按计算机开关,还是直接拔掉电源插头才算啊?...
- sql server 数组_如何在SQL Server中实现类似数组的功能
- Yahoo Web UIs——Java开发者丰富的Web UI
- TensorFlow实践:经典CNN-AlexNet
- java汉字转拼音区别多音字_Java中汉字转拼音pinyin4j用法实例分析
- 石油化工设备维护检修规程_【干货】罗茨鼓风机维护检修规程
- 初识:心血管磁共振(CMR)成像
- FreeSwitch uuid_bridge代码分析
- 软件测试面试中90%会遇到的问题;你会搭建测试环境吗?
- UNCODE 与 ANSI 编码互相转换
- 陕西省计算机大赛,陕西省青少年信息学(计算机)奥林匹克竞赛委员会文件.doc
- 计算机技术协会主持词,协会表彰大会主持词
热门文章
- AAAI 2020 Location-aware Graph Convolutional Networks for Video Question Answering
- 小白记录之网易云音乐API使用 NeteaseCloudMusicApi
- python猪肉价格预测_如果现在生猪期货上市,猪肉价格会下降吗?
- 能影响未来十年的十项新技术
- 程序人生 - 空调除湿与制冷的区别?
- 翼辉操作系统 linux,2K龙芯派翼辉SylixOS操作系统实验手册-翼辉信息.PDF
- 如何将新闻稿发布到门户网站?
- 方法:使用Visio中的页面内引用(超链接),实现形状之间的跳转
- python删除指定路径文件夹_Python 实现删除某路径下文件及文件夹
- 优化问题-半正定规划(Semi-Definite Program, SDP)