没有合适的资源?快使用搜索试试~ 我知道了~
使用jasperReport实现动态表头.docx
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 91 浏览量
2022-10-22
17:04:56
上传
评论
收藏 35KB DOCX 举报
温馨提示
试读
12页
。。。
资源推荐
资源详情
资源评论
使用 jasperReport实现动态表头
2007-07-05 17:17
最近在我公司 drp(运营分销系统)开发中,需要大量报表,由于本人有
过 jasperReport的开发经验,所以选用了它,jr确实不错,开源,可扩展性很好,
缺点就是免费的文档很少,更可气的是,代码中的 doc少的可怜,基本上没有参
考价值.
由于我们的产品是用于服装行业的,在服装行业有一个尺码组,非常的
麻烦,在制作含有尺码组的报表时,表头的各种尺码不能写死,要从数据库查询
出来.但是,一般的报表工具都是不支持表头动态化的(我理解,报表嘛,是呈现
给特定人物如老板看的特定内容,表头应该是设计好的,不会经常性的更
改),jasperReport也是一样,并不直接支持,细究它的实现过程,我们还是可以
扩展从而解决这个问题的.
先看 jasperReport的流程图.
从上图可看到,jrxml文件要通过 JRXmlLoader解析为一个
JasperDesign的对象,从源码中可以看出,此对象用 java类去描述了报表的整
个设计,比如,columnHeader,detail,columnFooter等等.然后由
JasperCompileManager编译为一个 JasperReport对象,其实,如果你用
ireport(jasperReport报表的可视化设计器)制作报表,你完全可以不必理会怎
样生成 jaserReport对象.ireport对此有很好的支持.
了解了以上过程,我们可以看出,如果要动态的加入设计元素,只能在
JasperDesign对象中下手.加入需要的动态元素,我的需求是在 columnHeader
中加入一个尺码组的表头,代码实现如下.
java 代码
1. package com.webstone.drp.report.common.dynamicHeader;
2.
3. import java.io.File;
4. import java.lang.reflect.InvocationTargetException;
5. import java.util.Iterator;
6. import org.apache.commons.beanutils.BeanUtils;
7. import net.sf.jasperreports.engine.JRException;
8. import net.sf.jasperreports.engine.JasperCompileManager;
9. import net.sf.jasperreports.engine.JasperReport;
10.import net.sf.jasperreports.engine.design.JRDesignBand;
11.import
net.sf.jasperreports.engine.design.JRDesignStaticText;
12.import net.sf.jasperreports.engine.design.JasperDesign;
13.import net.sf.jasperreports.engine.xml.JRXmlLoader;
14.
15./**
16.* @author yaer
17.*/
18.@SuppressWarnings("unchecked")
19.public class ReportDesignProcess {
20.
private static final String flagTextKey =
"customFlagText";
21.
22.
public static JasperReport getJasperReport(String
xmlFilePath,
23.
24.
25.
String[][] sizeGroup) throws JRException {
JasperDesign design = getJasperDesign(xmlFilePath);
JRDesignBand columnHeader = (JRDesignBand)
design.getColumnHeader();
26.
27.
28.
29.
30.
31.
32.
reSetColumnHeaderHeight(columnHeader, sizeGroup);
reSetshapeAndPosition(columnHeader, sizeGroup);
addElementToColumnHeader(columnHeader, sizeGroup);
return JasperCompileManager.compileReport(design);
}
private static JasperDesign getJasperDesign(String
filePath)
throws JRException {
33.
34.
35.
36.
return JRXmlLoader.load(new File(filePath));
}
private static void reSetColumnHeaderHeight(JRDesignBand
columnHeader,
String[][] sizeGroup) {
37.
38.
columnHeader.setHeight(columnHeader.getHeight() *
sizeGroup.length);
39.
40.
41.
42.
}
private static JRDesignStaticText getFlagTextInDesign(
JRDesignBand columnHeader) {
return (JRDesignStaticText)
columnHeader.getElementByKey(flagTextKey);
}
43.
44.
private static void reSetshapeAndPosition(JRDesignBand
columnHeader,
45.
46.
String[][] sizeGroup) {
JRDesignStaticText flagText =
getFlagTextInDesign(columnHeader);
Iterator children = columnHeader.getChildren()
.iterator();
47.
48.
49.
50.
51.
52.
53.
JRDesignStaticText element;
while (children.hasNext()) {
element = children.next();
if (element.getX() > flagText.getX()) {
element.setX(flagText.getX() +
flagText.getWidth()
54.
55.
56.
57.
* sizeGroup[0].length);
}
if (!flagTextKey.equals(element.getKey())) {
element.setHeight(element.getHeight() *
sizeGroup.length);
58.
59.
60.
61.
}
}
}
private static void addElementToColumnHeader(JRDesignBand
columnHeader,
62.
63.
String[][] sizeGroup) {
JRDesignStaticText flagText =
getFlagTextInDesign(columnHeader);
columnHeader.removeElement(flagText);
for (int i = 0; i < sizeGroup.length; i++) {
for (int j = 0; j < sizeGroup[i].length; j++) {
try {
64.
65.
66.
67.
68.
JRDesignStaticText newElement =
(JRDesignStaticText) BeanUtils
.cloneBean(flagText);
69.
70.
71.
newElement.setText(sizeGroup[i][j]);
newElement.setX(flagText.getX() +
flagText.getWidth() * j);
newElement.setY(flagText.getY() +
flagText.getHeight() * i);
columnHeader.addElement(newElement);
} catch (IllegalAccessException e) {
e.printStackTrace();
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
} catch (InstantiationException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
}
}
}
剩余11页未读,继续阅读
资源评论
G11176593
- 粉丝: 6643
- 资源: 3万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功