Heis的Blog

保持简单,保持愚蠢
随笔 - 29, 文章 - 1, 评论 - 122, 引用 - 0
数据加载中……

JasperReport那些事儿(一)——iReport制作表格

如果你还不知道jasperreport和ireport,那你可以参考我的上一篇文章,或者谷歌百度一下。好了,废话少说,Let’s start,Go!
      我的环境是iReport3.0+JDK6.0。
      先看看效果。
 
1)    准备数据源,这里使用XML文件(使用UTF8编码)作为数据源。
 1 <?xml version="1.0" encoding="utf-8" ?>
 2 <NameList>
 3     <Person>
 4         <Name>强尼</Name>
 5         <Gender></Gender>
 6         <Age>56</Age>
 7     </Person>
 8     <Person>
 9         <Name>阿美</Name>
10         <Gender></Gender>
11         <Age>23</Age>
12     </Person>
13     <Person>
14         <Name>李丽</Name>
15         <Gender></Gender>
16         <Age>58</Age>
17     </Person>
18     <Person>
19         <Name>杰森</Name>
20         <Gender></Gender>
21         <Age>32</Age>
22     </Person>
23     <Person>
24         <Name>刘三</Name>
25         <Gender></Gender>
26         <Age>21</Age>
27     </Person>
28 </NameList>

2)    打开iReport,新建一个空的模版文件。
3)    加入一个静态文本(StaticText),右击属性(Property),编辑字体属性和内容。关于Font Name 属性和PDF Font Name属性需要PMingLiu字体(下载)(将PMingLiu字体放在ireport安装目录的font文件夹下)或者你可以选择其他字体,例如宋体,PDF Font Name 选
STSong-Light
 



4)    接下来就要做表格部分,新建一个子报表(subreport),除了第二步选择No Connection or datasource,基本上只要点Next就行了。
 





5)    完成上一步后就会跳到子报表NameList_subreport0的视图,其实子报表也是一个独立的报表。但是你现在只能看到一个叫Detail的区域(band)。我们还需要更多的区域来结合完成表格的制作。调出区域管理器(菜单View->Bands),将column header 和column footer的高度(height)设为20.



 
6)    在column header加入三个静态文本(StaticText),字体属性和之前的一样,分别加入内容姓名,性别,年龄。在detail区域加入三个文本(textField),在column footer加入一个文本,字体属性和StaticText保持一样。然后设置所有静态文本和文本的边框,如图。现在的textField都是没有数据的,那么怎么填充数据呢?现在我们来看怎么配置数据源和填充数据。
 

 
7)    菜单data->connections/datasource,新建一个XML  datasouce,目录位置指向之前建立的XML文件。选择Use the report Xpath xpression when filling the report.
 



 

8)    打开NameList模版,菜单data->report query,配置XPATH如图。
 

9)    配置NameList模板的subreport, 編輯屬性Connection/Data  Source  Expression,輸入 ((net.sf.jasperreports.engine.data.JRXmlDataSource)$P{REPORT_DATA_SOURCE}).dataSource("/NameList /Person")。这一步主要是将数据源传给子报表。
 



 
10)    打开NameList_subreport0模板,先配置XPATH,然后右击节点Name,选Add node as field.同样将Gender和Age节点加入field。点OK。然后你可以看到左边的结构视窗多了三个Field。
 



 
11)    编辑Table里的文本(textfield),右击选Edit Expression,输入表达式(Field的表达式,$F{Field_Name})。$V{REPORT_COUNT}是jasperreport 内建的变量,用于计算detail区域的行数。
 

12)    保存模板,菜单build->Compile,编译两个模板。打开NameList模板,带数据源运行(build->Execute with active connection)。大功告成。

        写这篇东西花了大半天,有兴趣的同志可以下载源代码看看。点击下载





程序员的一生其实可短暂了,这电脑一开一关,一天过去了,嚎;电脑一开不关,那就成服务器了,嚎……

posted on 2009-02-16 21:21 Heis 阅读(30427) 评论(22)  编辑  收藏 所属分类: JasperReport那些事儿

评论

# re: JasperReport那些事儿(一)——iReport制作表格  回复  更多评论   

请教一下,怎么样可以自做单元格合并这样的中文式的报表?谢谢你的答复。
我的qq:605524436。
2009-03-09 13:22 | tide

# re: JasperReport那些事儿(一)——iReport制作表格  回复  更多评论   

@tide
我理解你的意思是像下面这样的表格吗?
_______________
| |____|____|
| |____|____|
| |____|____|
| |____|____|
如果是,我会在下一篇文章中介绍。
2009-03-09 15:02 | Heis

# re: JasperReport那些事儿(一)——iReport制作表格  回复  更多评论   

博主,我按照你的例子来操作一下,到第8步出错了,没有列出xml的列表,这个该怎么处理?谢谢!
2009-04-23 17:22 | zl

# re: JasperReport那些事儿(一)——iReport制作表格[未登录]  回复  更多评论   

希望博主能加我QQ:944500547
有问题请教,非常感谢!
2009-04-23 17:23 | water

# re: JasperReport那些事儿(一)——iReport制作表格  回复  更多评论   

@zl
首先确认你的xml文件没有错,文件编码注意要是UTF8;
如果没错,这可能是ireport的xml解析器bug,我也经常遇到这样的问题。你可以试一下先把原来的ireport的xml数据源删掉,然后重启ireport,再试着新建一个xml数据源。这个bug也困扰我很久,有时候会莫名奇妙地不能解析。
2009-04-23 22:37 | Heis

# re: JasperReport那些事儿(一)——iReport制作表格  回复  更多评论   

博主好!首先感谢回复。
还有问题请教:
我直接用的ireport里面连接的oracle。
导出的是HTML格式
比如在页面上有:
aaaaa
bbbbb
ccccc
.......
多行数据,每一行对应一个按钮来打单。但是有时候会出现点a行打单后,再点b行打单,再点c等等行打单的话出现的都是a行对应的数据。
这种情况在局域网的时候没出现过,后来项目上线后出现。


不知道我有没有说明白。
2009-04-24 09:35 | zl

# re: JasperReport那些事儿(一)——iReport制作表格  回复  更多评论   

经过反复终于调通,但是生成的pdf只有一条记录
就是第一条:强尼的信息。
请问这是怎么回事呢?
2009-04-24 12:44 | zl

# re: JasperReport那些事儿(一)——iReport制作表格  回复  更多评论   

@zl
1.检查你的子报表,field是否放在detail区域内。
2.检查父报表的subreport元素内的XPATH是否是/NameList/Person
3.你的XML数据源不会只有一条数据吧?

如果还发现错误,下载我的模板源代码对比一下。
2009-04-24 14:29 | Heis

# re: JasperReport那些事儿(一)——iReport制作表格  回复  更多评论   

是第二条的问题。谢谢!
另外一个问题不知道有没有说明白,希望博主能够指点。
2009-04-24 15:27 | zl

# re: JasperReport那些事儿(一)——iReport制作表格  回复  更多评论   

@zl
每一行对应一个按钮来打单?这个我不是很明白,我们邮件联系吧。毕竟评论不是留言版。我邮箱:heisun@yeah.net
2009-04-24 21:57 | Heis

# re: JasperReport那些事儿(一)——iReport制作表格  回复  更多评论   

@Heis
调通后 五条出现都是第一条的信息
2009-09-11 16:25 | cici

# re: JasperReport那些事儿(一)——iReport制作表格  回复  更多评论   

我没有建子报表,直接在details下面写的
2009-09-11 16:26 | cici

# re: JasperReport那些事儿(一)——iReport制作表格  回复  更多评论   

@cici
不用子报表是会有问题的,估计是你的数据源配置错误。
2009-09-12 10:53 | Heis

# re: JasperReport那些事儿(一)——iReport制作表格  回复  更多评论   

@Heis
恩,我选择xpath的时候根本就出不来左边的结构视窗多了三个Field,要不你把源码发给我看下吧,我的邮箱zengjin_mail@yahoo.com.cn.谢谢你了
2009-09-14 11:07 | cici

# re: JasperReport那些事儿(一)——iReport制作表格  回复  更多评论   

你这表格是自己添加的边框显示的吧?
2009-11-19 16:12 | liguangjun

# re: JasperReport那些事儿(一)——iReport制作表格  回复  更多评论   

请问一下如果字段多了,是不是就会变形了?..
2009-11-19 16:13 | liguangjun

# re: JasperReport那些事儿(一)——iReport制作表格  回复  更多评论   

有问题请教博主!希望能加我QQ:460433459 谢谢博主!
2009-11-20 15:15 | liguangjun

# re: JasperReport那些事儿(一)——iReport制作表格  回复  更多评论   

@liguangjun
边框是自己设置的;
字段是静态添加的,不是动态,所以要自己设计;
2009-11-20 19:10 | Heis

# re: JasperReport那些事儿(一)——iReport制作表格  回复  更多评论   

楼主加我QQ吧,573497195
有问题要请教你,谢谢啊
2010-01-06 10:23 | chenhuagh

# re: JasperReport那些事儿(一)——iReport制作表格  回复  更多评论   

顶。。。。。。
2012-09-27 11:40 | 32516

# re: JasperReport那些事儿(一)——iReport制作表格[未登录]  回复  更多评论   

请问,如果是有多个子报表,却只有一个detail,该怎么实现呢?
比如:
书单
书籍id 书名 作者
1 语文 a
2 数学 b

名单
姓名 性别 年龄
小张 男 18
小王 女 20
小刘 男 30
2013-02-22 17:36 | 啊啊

# 加快  回复  更多评论   

我只是玩玩
2015-08-25 15:46 | 地方

只有注册用户登录后才能发表评论。


网站导航: