【工作笔记】笨办法搞定jasper动态列
来源:互联网 发布:剑灵灵族捏脸数据免费 编辑:程序博客网 时间:2024/06/03 11:56
需求
客户需要统计某个月内连续几天的数据,前面两三列跟后面的合计列是固定的,但是中间每个日期列是不固定的,这就要求日期列是要能动态生成,网上能查到的方法有两种:
第一种是把1~31天的列全部用ireport画出来,然后动态隐藏不需要的列
第二种是在代码中新建JasperDesign对象,用代码画出来。
经过仔细分析,第一种思路不错,但是动态列是有上限的,而且必须按照上限的标准画报表,很容易造成整个报表被撑得很大,但是只有一点数据;第二种方式代码量多,而且也不够直观,在ireport上拖拖拉拉已经很麻烦了,用代码实现更加麻烦orz。
解决方案
借用动态代理的思路,先用ireport生成一个模板,然后用字符串接收对应.jrxml源码,类似这样: String s = "<xml>......</xml>"
然后计算好纸张的长宽、title、header、col、footer等等的长宽。类似这样:
int headWith = 500; String head = "<header with="+headWith+" height="..."></header>"
计算好这些东西之后,使用Writer写成.jrxml文件,然后使用
JasperDesign jdesign = JRXmlLoader .load("/xxx/1.jrxml"); JasperReport jreport = JasperCompileManager.compileReport(jdesign);
生成编译后的文件
到此动态列报表就能够生成出来了。
与其对应的vo,如果有上限,可以使用反射动态赋值,如果没有上限,可以使用动态代理生成对应的vo。
缺点呢就是这动态报表改期了很麻烦,我不说大家也能想到。。
不过前面说到的两种方式缺点也很明显,一个无法满足自适应和无上限列,另一个嘛,报表不直观,用ireport更容易画好,而且效率也高,我个人认为用动态生成源码的方式要快不少(大部分代码都copy从ireport那画好的模板)
由于源码不在手上,只能记一下思路,望各位见谅。个人感觉这种方法的实现简单粗暴,故称作笨办法~lol
阅读全文
0 0
- 【工作笔记】笨办法搞定jasper动态列
- [Jasper使用总结]iReport报表设计-动态列实现
- [Jasper使用总结]iReport报表设计-动态列实现
- 使用延云YDB动态列与Ya100动态映射搞定12w列的大宽表【使用步骤】
- 工作搞定了
- jasper
- jasper
- “笨办法”学python笔记
- Jasper+ireport动态报表学习(一)
- 2003不让远程登陆终端的搞定办法
- 隐私文件加密办法 copy命令搞定
- 工作搞定,轻松多了!
- 终于搞定工作了^_^
- 10分钟搞定工作周报
- 简单搞定yarn工作机制
- Android 笔记之动态创建button 一行三列
- 《笨办法学 Python》 学习笔记01
- 《笨办法学 Python》 学习笔记02
- (4)JDBC的Statement对象使用
- Maven pom.xml配置常用的变量
- 文件索引结构
- 我的学习之路_第十七章_JavaUtils
- 树莓派智能监控小车(QT+树莓派)------整体思路
- 【工作笔记】笨办法搞定jasper动态列
- mybatis-03接口式编程
- codeforces 236A(Boy or Girl) Java
- 【Android】OkHttp和Retrofit拿到的json数据是Unicode,我要的是UTF-8呀
- RecyclerView在上面插入数据时原数据被顶下来
- redis数据结构底层(个人记忆使用)
- python 12345构成不重复的三位数
- 【OpenGL】无法启动此程序,因为计算机中丢失 glut32.dll。尝试重新安装该程序以解决此问题。
- 利用QOpenGLWidget glDrawArrays()实现纹理贴图