没有合适的资源?快使用搜索试试~ 我知道了~
使用jasperReport实现动态表头.pdf
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 90 浏览量
2022-10-22
11:08:09
上传
评论
收藏 326KB PDF 举报
温馨提示
试读
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. String[][] sizeGroup) throws JRException {
24. JasperDesign design = getJasperDesign(xmlFilePath);
25. JRDesignBand columnHeader = (JRDesignBand)
design.getColumnHeader();
26.
27. reSetColumnHeaderHeight(columnHeader, sizeGroup);
28. reSetshapeAndPosition(columnHeader, sizeGroup);
29. addElementToColumnHeader(columnHeader, sizeGroup);
30. return JasperCompileManager.compileReport(design);
31. }
32. private static JasperDesign getJasperDesign(String
filePath)
33. throws JRException {
34. return JRXmlLoader.load(new File(filePath));
35. }
36. private static void reSetColumnHeaderHeight(JRDesignBand
columnHeader,
37. String[][] sizeGroup) {
38. columnHeader.setHeight(columnHeader.getHeight() *
sizeGroup.length);
39. }
40. private static JRDesignStaticText getFlagTextInDesign(
41. JRDesignBand columnHeader) {
42. return (JRDesignStaticText)
columnHeader.getElementByKey(flagTextKey);
43. }
44. private static void reSetshapeAndPosition(JRDesignBand
columnHeader,
45. String[][] sizeGroup) {
46. JRDesignStaticText flagText =
getFlagTextInDesign(columnHeader);
47. Iterator children = columnHeader.getChildren()
48. .iterator();
49. JRDesignStaticText element;
50. while (children.hasNext()) {
51. element = children.next();
52. if (element.getX() > flagText.getX()) {
53. element.setX(flagText.getX() +
flagText.getWidth()
54. * sizeGroup[0].length);
55. }
56. if (!flagTextKey.equals(element.getKey())) {
57. element.setHeight(element.getHeight() *
sizeGroup.length);
58. }
59. }
60. }
61. private static void addElementToColumnHeader(JRDesignBand
columnHeader,
62. String[][] sizeGroup) {
63. JRDesignStaticText flagText =
getFlagTextInDesign(columnHeader);
64. columnHeader.removeElement(flagText);
65. for (int i = 0; i < sizeGroup.length; i++) {
66. for (int j = 0; j < sizeGroup[i].length; j++) {
67. try {
68. JRDesignStaticText newElement =
(JRDesignStaticText) BeanUtils
69. .cloneBean(flagText);
70. newElement.setText(sizeGroup[i][j]);
71. newElement.setX(flagText.getX() +
flagText.getWidth() * j);
72. newElement.setY(flagText.getY() +
flagText.getHeight() * i);
73. columnHeader.addElement(newElement);
74. } catch (IllegalAccessException e) {
75. e.printStackTrace();
76. } catch (InstantiationException e) {
77. e.printStackTrace();
78. } catch (InvocationTargetException e) {
79. e.printStackTrace();
80. } catch (NoSuchMethodException e) {
81. e.printStackTrace();
82. }
83. }
84. }
85. }
剩余11页未读,继续阅读
资源评论
G11176593
- 粉丝: 6643
- 资源: 3万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功