jasper使用table组件设计复杂的表头
1.1 设计报表模板
1.1.1 新建模板DemoReport5.jrxml,去掉不需要的Band,保留Title,Page Header,Detail 1 , PageFooter。将组件Table拖入到Detail1 中,跳出Dataset窗口。选择 Create .. ,然后Next
1.1.2 给Dataset命名。选择 Createnew dateset ... ,然后Next
1.1.3 只保留Column Header,然后 Finish
1.1.4 点击Detail中的Table组件进入到Table界面中。
1.1.5 在Column Header中右键Column1 选择Create Column After,生成4个Column
1.1.6 一般表头都是 合并列的复杂表头。选择Column1 右键 -》 Group Columns
在Columns[1]中的Column1右键Create Column after ,显示如下:
将其他三个也如此操作
1.1.7 将组件Text Field 拖入表格中,并设置表头名
1.1.8 在dateset1中新建Field属性,并拖入到Table的Detail中,设置字体样式(这里自定义命名Filed,且注意类型)
1.1.9 返回到Main Report ,新建Fields 命名为table Data,设置Class为JRBeanCollectionDataSource,注意写全路径,新建一个Field为Date,Class为String
1.1.10 点击Main Report 的Detail中的Table,显示Properties后,点击DataSet,选中Use a JRDatasource expression,将新建tableData写入。
保存模板,并复制到JasperWeb项目中。
1.2 编写Servlet注入数据源
1.2.1 新建Fields类和ModelTableSource类如下:
package com.jasper.bean;
public class Fields {
private String field1;
private String field2;
private String field3;
private String field4;
private String field5;
private String field6;
private String field7;
private String field8;
//get 和 set方法省略
}
package com.jasper.bean;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
public class ModelTableSource {
/**
* 注入table组件的数据源
*/
private JRBeanCollectionDataSource tableData;
/**
* 当前时间(查询时间)
*/
private String date;
// get和set方法省略
}
1.2.2 新建JasperServlet5 ,doGet内容如下:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Map<String,Object> parameters = new HashMap<String,Object>(16);
String jrxmlPath = request.getServletContext().getRealPath("/")+"/jrxml/DemoReport5.jrxml";
//由jrxml文件编译后生产jasper文件的路径
String jasperPath = request.getServletContext().getRealPath("/")+"/jasper/DemoReport5.jasper";
FileInputStream isRef = null;
ServletOutputStream sosRef = null;
try {
//编译jrxml生产jasper文件
JasperCompileManager.compileReportToFile(jrxmlPath, jasperPath);
isRef = new FileInputStream(new File(jasperPath));
sosRef = response.getOutputStream();
//组装list数据源
List<Fields> list = new ArrayList<Fields>();
for(int i = 1 ; i <= 20; i++) {
Fields fields = new Fields("field"+i,"field"+(i+1),"field"+(i+2),"field"+(i+3),"field"+(i+4),"field"+(i+5),"field"+(i+6),"field"+(i+7));
list.add(fields);
}
ModelTableSource mts = new ModelTableSource();
mts.setDate(new SimpleDateFormat("yyyy-MM-dd").format(new Date()));
mts.setTableData(new JRBeanCollectionDataSource(list));
List<ModelTableSource> mlist = new ArrayList<ModelTableSource>();
mlist.add(mts);
//new JRBeanCollectionDataSource(list) 以javaBean为数据源注入报表数据
JasperRunManager.runReportToPdfStream(isRef, sosRef, parameters, new JRBeanCollectionDataSource(mlist));
response.setContentType("application/pdf");
} catch (JRException e) {
e.printStackTrace();
}finally {
sosRef.flush();
sosRef.close();
}
}
1.2.3 启动tomcat并访问
jasper使用table组件设计复杂的表头的更多相关文章
- 解决react使用antd table组件固定表头后,表头和表体列不对齐以及配置fixed固定左右侧后行高度不对齐
一.固定表头后表体列和表头不对齐 此问题可能在antd3.24.0版本之前都存在,反正3.16.2版本是存在这个问题的,如果是3.24.0之前的版本估计只能通过修改css样式解决. 按照官网说的: 1 ...
- Table 组件构建过程中遇到的问题与解决思路
在 GearCase 开源项目构建 Table 组件的过程中.遇到了各式各样的问题,最后尝试了各种方法去解决这些问题. 遇到的部分问题 checkbox 的全选和半选问题 table 组件的排序请求方 ...
- React中使用Ant Table组件
一.Ant Design of React http://ant.design/docs/react/introduce 二.建立webpack工程 webpack+react demo下载 项目的启 ...
- 【Ireport】利用Ireport5.2的table组件迅速制作表格导出pdf
转载请注明网址.Ireport table dataset Ireport在半年前还是4.7,今天无意发现,居然出到了5.2就搞一把. 首先,去下载Ireport,并进行安装.这个我就不演示了.下载完 ...
- Ant Table组件
http://www.cnblogs.com/hujunzheng/p/5689650.html React中使用Ant Table组件 v一.Ant Design of React http:/ ...
- React组件设计
React组件设计 组件分类 展示组件和容器组件 展示组件 容器组件 关注事物的展示 关注事物如何工作 可能包含展示和容器组件,并且一般会有DOM标签和css样式 可能包含展示和容器组件,并且不会有D ...
- 在 Element-UI 的 Table 组件上添加列拖拽效果
Element-UI 的 Table组件很强大,但是我们的需求更强大... 简单粗暴的来一发效果图: 一.数据驱动 传统的拖动效果,都是基于通过 mousedown.mousemove.mouseup ...
- React组件设计(转)
React组件设计 组件分类 展示组件和容器组件 展示组件 容器组件 关注事物的展示 关注事物如何工作 可能包含展示和容器组件,并且一般会有DOM标签和css样式 可能包含展示和容器组件,并且不会有D ...
- elment-ui table组件 -- 远程筛选排序
elment-ui table组件 -- 远程筛选排序 基于 elment-ui table组件 开发,主要请求后台实现筛选 排序的功能. 需求 排序 筛选 是对后台整个数据进行操作,而不是对当前页面 ...
随机推荐
- 本地缓存性能之王Caffeine
前言 随着互联网的高速发展,市面上也出现了越来越多的网站和app.我们判断一个软件是否好用,用户体验就是一个重要的衡量标准.比如说我们经常用的微信,打开一个页面要十几秒,发个语音要几分钟对方才能收到. ...
- java Stream学习笔记
1.Stream与io无关. 2.Stream和用普通的循环没有太大区别,甚至时间复杂度更高,代码可读性差(通常代码行数更少). 3.流操作就是把循环要做的任务单独抽取出来,最终通过编译在一起. 来看 ...
- 我是这样理解EventLoop的
我是这样理解EventLoop的 一.前言 众所周知,在使用javascript时,经常需要考虑程序中存在异步的情况,如果对异步考虑不周,很容易在开发中出现技术错误和业务错误.作为一名合格的jav ...
- 出现org.apache.ibatis.binding.BindingException异常
出现绑定式异常 查看target文件夹里面再mapper中,发现运行时缺少xml文件 解决办法 1.将xml文件复制到target中Mapper文件夹下面. 2.将xml放到resource目录下 3 ...
- HotSpot学习(二):虚拟机的启动过程源码解析
1. 前言 上文介绍了HotSpot编译和调试的方法,而这篇文章将迈出正式调试的第一步--调试HotSpot的启动过程. 学习启动过程可以帮助我们了解程序的入口,并对虚拟机的运行有个整体的把握,方便日 ...
- Face_to_object_design
二.实例 掷骰子游戏:三粒骰子,掷两次,比较两次的结果. 1.提炼 提炼对象:三粒骰子.游戏 提炼对象的属性和功能:掷骰子.比较点数 骰子: 属性:点数 功能:随机获取一个1~6之间的整数值. 游戏: ...
- 当音乐学博士搞起编程,用一本书改变了Java世界!
前言 说到Spring,也许现在的开发者们最先想到的是 Josh Long 超快的语速与现场代码能力,让很多Java开发者折服. 然后Spring的历史上,最传奇的还是要数其创始人:Rod Johns ...
- nginx 重写去掉index.php
if (!-e $request_filename) { rewrite ^/(.*)$ /index.php?s=$1 last; }
- Vue css过渡 和 js 钩子过渡
css过渡 <transition name="slide"> <div v-show="!showChatInput" class=&quo ...
- Memcached、Redis、Mongodb比较
Memcached(内存Cache) Memcached 是一个高性能的分布式内存对象缓存系统.通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像.视频.文件以及数据库 ...