- 浏览: 52930 次
- 性别:
- 来自: 北京
最新评论
-
alvin198761:
楼主如何调价图标呢
自定义带关闭按钮的TabbedPane -
carlkkx:
Disney2002 写道carlkkx 写道生成PDF,然后 ...
关于JTable的打印讨论 -
Disney2002:
carlkkx 写道生成PDF,然后打开PDF阅读器,然后用户 ...
关于JTable的打印讨论 -
carlkkx:
生成PDF,然后打开PDF阅读器,然后用户爱怎么打印怎么打印。 ...
关于JTable的打印讨论 -
Disney2002:
<div class="quote_title ...
JasperReport 个人使用的一些经验
本文主要介绍下我在工作中使用JasperReport的一些经验,顺便给自己也做个笔记。
关于JasperReport的介绍就不谈了,网上多了去了,不了解的朋友可以去Google下先,这里主要分享经验和技巧,避免一些网友走弯路。
1、关于iReport的使用
JasperReport的使用简单归结就是报表模板+数据填充。
模板是通过一个后缀名为jrxml的XML文件,编译后生成的以.jasper为后缀的JasperReport模板。模板设计目前基本上都是使用其官方的可视化工具iReport来做的,iReport是基于Netbeans的一个插件,通过它可以可视化的编辑JasperReport模板。
数据填充一般分二种方式,一种方式是通过JDBC连接提供数据源,一种就是通过javaBean的集合提供数据源,可以根据自己的情况来选择。
iReport插件安装后,需要设置你在iReport里面使用的类的类路径,这个好多朋友在开始的时候找不到,截个图可以看看:
一般都是Add Folder,如果是已经打成Jar的可以直接选择Add Jar。
2、报表结尾的署名位置
一般报表最后都会有一行关于XXX填写啊,日期啊之类的用于确认或者一些辅助数据。
大家可能会直接放在Page Footer里面,这样打印出来的结果是这一行肯定会在页面底部,不能随着内容的长短来调整位置,哪怕你报表只有一行。这里分享个经验,你可以放到Summary里面,这样就可以根据Detail的长短来显示了。
3、子报表
关于子报表估计是好多网友关心的问题,因为大部分时间需要用到,可是关于这类的教程又太少了,这里我就介绍下如何使用子报表,内容参考了网上的一些资料.
准备工作:
1.主对象,就是报表要打印的对象,里面含一个List,这个需要用子报表来打印.
2.子报表对象
3.子报表数据集,测试数据
4.主报表数据集,测试数据
5.准备好上述数据后,开始在iReport上操作了,绑定测试数据源到iReport.
MainVO的测试数据源:
SubVO的测试数据源:
6.准备好数据源后开始设计JasperReport模板
模板和对象绑定,在MainVOReport(上图)的空白处点一下,然后点击数据库那个小图标:
会打开下面界面,选择DataSource Provider:
点击Get Field from datasource, 会获取到MainVo的属性,如上图下半部分所示.
7.子报表关联
我们需要将MainVo中的List属性值显示在子报表里面,就需要设置一个变量来传值了.
1)在MainVOReport界面,添加一个Variables, 命名为other,设置如下图所示:
2)然后点击MainVOReport界面上的子报表,在右边的属性设置如下图:
3)创建Scriptlet,用来连接设置变量值
上面三步就是创建子报表的重要三步,我刚开始也是这里没摸索到.
8.子报表设计
子报表的设计和主报表是一样的,因为它在这里是一个单独的报表,可以用自己的数据源来测试,也就是我们上面创建的SubFactory
子报表对象绑定,由于主报表和子报表使用的数据源不同,对象属性绑定方式稍有不同,如下图所示:
9.编译报表
不同的报表选择不同的数据源来编译.
选择相对应的数据源后,点击报表工具栏上的preview来预览,预览时会先编译,然后填充数据,有问题的话这个时候会暴露出来,根据错误提示自己再查找查找原因吧.
子报表变动要先编译子报表,然后编译主报表.
好了,目前就先分享到这里, 上面自己的分享如果有不对之处,欢迎大家提出,并分享.
顺便分享几个链接,对于学习JasperReport比较有帮助,这边文章的部分内容也参考了下面的链接:
1、ireport + jasperreport(上中下)
http://wangyaodi.iteye.com/blog/214496
http://wangyaodi.iteye.com/blog/214500
http://wangyaodi.iteye.com/blog/214504
2、利用复合的javabean构造基于jasperreports的子报表 (子报表内容基本上参考自这里)
http://blog.csdn.net/lemonfamily/archive/2007/04/05/1553291.aspx
貌似对于这类情况,只能手动通过编程来实现, JasperDesign这个类就是做这个事情的.
看看这个例子:
http://sunsy.iteye.com/blog/98140
正在研究ing
关于JasperReport的介绍就不谈了,网上多了去了,不了解的朋友可以去Google下先,这里主要分享经验和技巧,避免一些网友走弯路。
1、关于iReport的使用
JasperReport的使用简单归结就是报表模板+数据填充。
模板是通过一个后缀名为jrxml的XML文件,编译后生成的以.jasper为后缀的JasperReport模板。模板设计目前基本上都是使用其官方的可视化工具iReport来做的,iReport是基于Netbeans的一个插件,通过它可以可视化的编辑JasperReport模板。
数据填充一般分二种方式,一种方式是通过JDBC连接提供数据源,一种就是通过javaBean的集合提供数据源,可以根据自己的情况来选择。
iReport插件安装后,需要设置你在iReport里面使用的类的类路径,这个好多朋友在开始的时候找不到,截个图可以看看:
一般都是Add Folder,如果是已经打成Jar的可以直接选择Add Jar。
2、报表结尾的署名位置
一般报表最后都会有一行关于XXX填写啊,日期啊之类的用于确认或者一些辅助数据。
大家可能会直接放在Page Footer里面,这样打印出来的结果是这一行肯定会在页面底部,不能随着内容的长短来调整位置,哪怕你报表只有一行。这里分享个经验,你可以放到Summary里面,这样就可以根据Detail的长短来显示了。
3、子报表
关于子报表估计是好多网友关心的问题,因为大部分时间需要用到,可是关于这类的教程又太少了,这里我就介绍下如何使用子报表,内容参考了网上的一些资料.
准备工作:
1.主对象,就是报表要打印的对象,里面含一个List,这个需要用子报表来打印.
import java.util.List; public class MainVO { private String title; private List<SubVO> subList; public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public List<SubVO> getSubList() { return subList; } public void setSubList(List<SubVO> subList) { this.subList = subList; } }
2.子报表对象
public class SubVO { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } }
3.子报表数据集,测试数据
import java.util.ArrayList; import java.util.List; import net.sf.jasperreports.engine.JRDataSource; import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource; public class SubFactory { public static JRDataSource createDatasource() { List<SubVO> list2 = new ArrayList<SubVO>(); SubVO svo1 = new SubVO(); svo1.setName("单位1"); SubVO svo2 = new SubVO(); svo2.setName("单位2"); SubVO svo3 = new SubVO(); svo3.setName("单位3"); SubVO svo4 = new SubVO(); svo4.setName("单位4"); list2.add(svo1); list2.add(svo2); list2.add(svo3); return new JRBeanCollectionDataSource(list2); } }
4.主报表数据集,测试数据
import java.util.ArrayList; import java.util.List; import net.sf.jasperreports.engine.JRDataSource; import net.sf.jasperreports.engine.JRException; import net.sf.jasperreports.engine.JasperReport; import net.sf.jasperreports.engine.data.JRAbstractBeanDataSourceProvider; import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource; /** * * @author xiaoquan */ public class TestSubReport extends JRAbstractBeanDataSourceProvider { public TestSubReport() { super(MainVO.class); } public JRDataSource create(JasperReport arg0) throws JRException { List<MainVO> mainList = new ArrayList<MainVO>(); List<SubVO> list1 = new ArrayList<SubVO>(); List<SubVO> list2 = new ArrayList<SubVO>(); SubVO svo1 = new SubVO(); svo1.setName("单位1"); SubVO svo2 = new SubVO(); svo2.setName("单位2"); SubVO svo3 = new SubVO(); svo3.setName("单位3"); SubVO svo4 = new SubVO(); svo4.setName("单位4"); list1.add(svo4); list1.add(svo3); list2.add(svo1); list2.add(svo2); list2.add(svo3); MainVO vo1 = new MainVO(); vo1.setTitle("场1"); vo1.setSubList(list1); MainVO vo2 = new MainVO(); vo2.setTitle("场2"); vo2.setSubList(list2); mainList.add(vo2); mainList.add(vo1); return new JRBeanCollectionDataSource(mainList); } public void dispose(JRDataSource arg0) throws JRException { } }
5.准备好上述数据后,开始在iReport上操作了,绑定测试数据源到iReport.
MainVO的测试数据源:
SubVO的测试数据源:
6.准备好数据源后开始设计JasperReport模板
模板和对象绑定,在MainVOReport(上图)的空白处点一下,然后点击数据库那个小图标:
会打开下面界面,选择DataSource Provider:
点击Get Field from datasource, 会获取到MainVo的属性,如上图下半部分所示.
7.子报表关联
我们需要将MainVo中的List属性值显示在子报表里面,就需要设置一个变量来传值了.
1)在MainVOReport界面,添加一个Variables, 命名为other,设置如下图所示:
2)然后点击MainVOReport界面上的子报表,在右边的属性设置如下图:
3)创建Scriptlet,用来连接设置变量值
import java.util.List; import net.sf.jasperreports.engine.JRAbstractScriptlet; import net.sf.jasperreports.engine.JRDataSource; import net.sf.jasperreports.engine.JRScriptletException; import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource; public class MainReportScriptlet extends JRAbstractScriptlet { @Override public void afterDetailEval() throws JRScriptletException { System.out.println("afterDetailEval..."); List subList = (List)getFieldValue("subList"); JRDataSource jr = new JRBeanCollectionDataSource(subList); /** *该值是在父报表中定义的一个变量Variables, *类型为net.sf.jasperreports.engine.JRDataSource *(就是上图的变量设置) **/ setVariableValue("other", jr); } @Override public void beforeReportInit() throws JRScriptletException { } @Override public void afterReportInit() throws JRScriptletException { } @Override public void beforePageInit() throws JRScriptletException { } @Override public void afterPageInit() throws JRScriptletException { } @Override public void beforeColumnInit() throws JRScriptletException { } @Override public void afterColumnInit() throws JRScriptletException { } @Override public void beforeGroupInit(String arg0) throws JRScriptletException { } @Override public void afterGroupInit(String arg0) throws JRScriptletException { } @Override public void beforeDetailEval() throws JRScriptletException { } }
上面三步就是创建子报表的重要三步,我刚开始也是这里没摸索到.
8.子报表设计
子报表的设计和主报表是一样的,因为它在这里是一个单独的报表,可以用自己的数据源来测试,也就是我们上面创建的SubFactory
子报表对象绑定,由于主报表和子报表使用的数据源不同,对象属性绑定方式稍有不同,如下图所示:
9.编译报表
不同的报表选择不同的数据源来编译.
选择相对应的数据源后,点击报表工具栏上的preview来预览,预览时会先编译,然后填充数据,有问题的话这个时候会暴露出来,根据错误提示自己再查找查找原因吧.
子报表变动要先编译子报表,然后编译主报表.
好了,目前就先分享到这里, 上面自己的分享如果有不对之处,欢迎大家提出,并分享.
顺便分享几个链接,对于学习JasperReport比较有帮助,这边文章的部分内容也参考了下面的链接:
1、ireport + jasperreport(上中下)
http://wangyaodi.iteye.com/blog/214496
http://wangyaodi.iteye.com/blog/214500
http://wangyaodi.iteye.com/blog/214504
2、利用复合的javabean构造基于jasperreports的子报表 (子报表内容基本上参考自这里)
http://blog.csdn.net/lemonfamily/archive/2007/04/05/1553291.aspx
评论
2 楼
Disney2002
2009-07-21
Disney2002 写道
现在遇到一个问题,如果报表模板列不定怎么来打印呢?
比如有个表格是动态生成的,列不定,这样的话报表模板如何来设计?
比如有个表格是动态生成的,列不定,这样的话报表模板如何来设计?
貌似对于这类情况,只能手动通过编程来实现, JasperDesign这个类就是做这个事情的.
看看这个例子:
http://sunsy.iteye.com/blog/98140
正在研究ing
1 楼
Disney2002
2009-07-20
现在遇到一个问题,如果报表模板列不定怎么来打印呢?
比如有个表格是动态生成的,列不定,这样的话报表模板如何来设计?
比如有个表格是动态生成的,列不定,这样的话报表模板如何来设计?
发表评论
-
关于JTable的打印讨论
2009-11-10 15:59 2061Java中用Table显示数据是再正常不过的了,有各种各样的T ... -
JFreechart使用技巧
2009-07-27 18:50 9431.自定义纵轴的数值显示位数 Number ... -
再遇 java.util.ConcurrentModificationException
2009-07-22 11:07 2844今天又一次遇到java.util.ConcurrentModi ... -
Java对象的浅拷贝和深拷贝
2009-07-21 22:45 2313首先介绍变量拷贝,变量拷贝时,原始变量和拷贝的新变量引用同一个 ... -
Swing Table上的常用技巧
2009-07-14 15:45 35791、自定义列宽 TableColumnModel col ... -
C3P0 导致 Tomcat无法关闭?
2008-11-14 14:58 3542----请版主手下留情啊,这个问题目前搜索不到,要是能搜索到也 ... -
远程访问Tomcat的JMX
2008-10-20 16:02 2322Tomcat的JMX支持默认应该是关闭的,首先我们得打开Tom ... -
用Java动态代理实现AOP
2008-08-23 22:42 1054AOP主要应用于日志记录 ... -
通过Java生成Excel文件
2008-08-14 16:58 7313package demo; import java. ... -
共享下JFreeChart的Developer.Guide v1.0.9
2008-06-29 22:15 1307JFreeChart 的Developer.Guide 不好找 ... -
No configuration found for the specified action
2008-06-20 18:53 2735用惯了Struts1.1的朋友,在用struts2时可能会出现 ... -
List 分页封装及结合Struts2使用
2008-06-18 22:06 25261. 核心类: import java.util.Arra ... -
关于JCS
2008-06-18 21:22 1145关于JCS «‹›» JCS是Jaka ... -
自定义带关闭按钮的TabbedPane
2008-06-13 14:32 3416package test; import javax ... -
转载:session介绍
2008-06-01 00:07 1316摘要: 虽然session机制在web应用程序中被采用已经很长 ...
相关推荐
ireport 也是开源组织sf.net 中的一款免费软件,其主要作用是用来以可视化的方式设计 生成jasperreport 所使用的报表格式文件,因为jasperreport 本身并未提供很好的可视化报 表设计工具,ireport 的出现...
asperReport的应用,发现大部分都是讲如何将jasper导入一个html或pdf进行打印的例子,并没有直接将jasperReport打印生成一个图像的示例。包括jaspe自带的demo里面,所以有高手就写了如何生成图片的方法
jasperReport5.6.1编码以及使用的文档,另外大家还可以看的博客,有与springMVC的整合
介绍jasperreport的使用及在spring中的设置、及导出html、excel、pdf等技术
jasperreport、applet 客户端打印 注意:使用程序请导入jasperReport3.0和iReport3.0的包。
由于项目需要出图形报表,所以个人做了jasperReport和iReport的技术调查.并且整理成了这个文档,记录了这两个开源工具的使用方法. 文档目录如下: 1.readme 2.iReport上手 3.iReport数据库连接设置 4.iReport连接数据库...
Jasperreport中文使用手册
JasperReport初级教程(2.0.3)调用Java代码_图文详解_绝对原创
使用JasperReport+iReport进行WEB开发,是这篇文章http://blog.csdn.net/tch918/article/details/12200607的源码
JasperReport与Ireport的配置与使用.pdf
JasperReport报表设计总结 JasperReport报表设计总结
jasperreport教程jasperreport教程
JasperReport实例导入可用
几经探索,终于寻找到在一个报表中使用多个数据源的方法,现在分享出来以便后来者少走弯路!网上很多资料说多数据源只能使用子报表方式,呵呵!
webwork下jasperreport的subreport使用套打 javabean作为数据源。
jasperReport 动态合并单元格示例
使用JasperReport制作PDF所需要的包(2)
test for jasperreport use to demo
jasperReport详细教程及例子