Heis的Blog

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

JasperReport那些事儿(六)——制作分页式报表

    之前介绍的一些报表都是单页式的报表,就是格式都一样。如果要生成一份有不同样式的报表,这要怎么做呢?就像一份保险公司保单,可能有产品介绍、收益表、建议书、最后还有合同,这都要求不同的报表分页显示。这一篇将给你介绍怎么让报表分页。
    先来看一下效果。

    这份报表沿用了上一篇的报表,只是在这个基础上加了分页功能。
    实际上我只改动了DepartmentList_department.jrxml这张报表。就在detail区域top=0处加入一个分页符(page break),因为分页符需要占用1像素的高度,所以要将原来detail内的内容往下移一个像素,就是top=1.
   

    在Jasperreport里,强制分页有两种方法。第一种是加入分页符(page break),就是上文提到的方式;第二种只适用group的区域(band),可以设定当区域延伸到一定的高度就分页。
   
   
    报表模板和数据源下载:请点这里
   
   



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

posted on 2009-03-28 13:57 Heis 阅读(15396) 评论(13)  编辑  收藏 所属分类: JasperReport那些事儿

评论

# re: JasperReport那些事儿(六)——制作分页式报表[未登录]  回复  更多评论   

不知道这个东西能不能录改了?
2009-03-28 16:01 | sun

# re: JasperReport那些事儿(六)——制作分页式报表  回复  更多评论   

@sun
报表的数据是依赖数据源的,修改数据源自然能修改报表内容。
2009-03-28 17:41 | Heis

# re: JasperReport那些事儿(六)——制作分页式报表  回复  更多评论   

1、想问一下部门这个字段能不能上下居中?像“技术部门”和“财政部门”这两个行。
2、还有另外一个问题就是我的主报表嵌套一个子报表,子报表又嵌套一个子报表,其中主报表是直接使用sql语句;而子报告是使用javabean作为数据源的。javabean怎么从主报表传递给子报表。以什么型式传递?
3、如果是只传递一层的话,直接通过变量型式可以传递,但是现在是嵌套多层子报表,所以到了第二层子报表就得不到值了。
不知道我说的清楚没有。
:(
2009-03-29 21:21 | nesta

# re: JasperReport那些事儿(六)——制作分页式报表  回复  更多评论   

@nesta
1.可以,在属性-字体 里面有一个垂直居中的选项。
2.你可以尝试在subreport属性当中配置一个合适的数据源,像net.sf.jasperreports.engine.data.JRBeanArrayDataSource(Object[])或者net.sf.jasperreports.engine.data.JRBeanCollectionDataSource(Collection)。你可以去查一下API,但是这个解决方法的思路有问题,你为什么不统一数据源,这样可以更好地处理问题。还有你的bean是通过参数传入,还是设想在报表里构造?
3.Jasperreport的参数传递是通过在subreport里设置传递的参数名,例如为ParamA,然后你再在子模板里新建一个相同名称的参数ParamA,就可以获取到这个参数的值了。
2009-03-29 22:02 | Heis

# re: JasperReport那些事儿(六)——制作分页式报表  回复  更多评论   

谢谢你的回答!
1、我也想使用统一的数据源,但是就是因为统一的数据源不能满足要求,子报表中嵌套的子报表的数据要进行处理过之后才能符合要求;
2、我就是通过参数传递进来的,如果是一层子报表的话,我在主报表中定义的参数类型为Object,这样可以获取到数据,就是多层嵌套的话就不行。
3、我试试看你说的参数类型为net.sf.jasperreports.engine.data.JRBeanArrayDataSource(Object[])或者 net.sf.jasperreports.engine.data.JRBeanCollectionDataSource(Collection)
这两个行不行;
4、定义参数类型是因为下拉框中没有这几个类型,所以我不知道可以手写的。我以为只能选择下拉框中的类型。
2009-03-30 09:08 | nesta

# re: JasperReport那些事儿(六)——制作分页式报表[未登录]  回复  更多评论   

要求在打印之前可以修改报表中的数据(只要双击就可以修改数据),好像听人说在源代码的JRViewer.java中修改.
可是我对这个东西不太熟悉,
JRViewer.java中有个这方法
public void mousePressed(MouseEvent e)
{
if(e.getClickCount()==2)
{
//这中间就不会了.
}
}
博主遇到过这种要求吗?
2009-04-09 14:21 | sun

# re: JasperReport那些事儿(六)——制作分页式报表  回复  更多评论   

@sun
打印之前肯定是可以修改的,我猜你的意思是打印预览的阶段对报表进行修改吧?
从Jasperreport的生成报表原理上来看,有这样一个过程。
1.模板设计阶段。这是一个XML文件,以jrxml后缀名结尾。
2.编译阶段。通过编译jrxml文件得到一个jasper文件。
3.数据填充阶段。通过将数据源填充到jasper文件上,然后生成一个jrprint文件。jrprint可以转换为PDF,Excel等格式的报表。jrprint文件已经是填充了数据的报表,不能编辑内容了。

所以要做到修改,有两个方法:
一是修改数据源,你需要将数据源转为可编辑的形式,例如XML数据源,像javaBean或数据库类型的数据源就无能为力了。
二是,打印预览阶段将导出可编辑的文件,例如像HTML,然后提供HTML的编辑器,修改后可以打印。

我个人推荐第一种方法。因为可以将报表导为各种形式的文件,虽然需要工作量比较多。第二种方法就只能绑定在一种报表格式上了。
2009-04-10 13:21 | Heis

# re: JasperReport那些事儿(六)——制作分页式报表  回复  更多评论   

我请教一个问题:
如何insert a RTF file to another RTF file?
非常感谢.
2009-05-05 03:07 | zhenlu

# re: JasperReport那些事儿(六)——制作分页式报表  回复  更多评论   

@zhenlu
这与博文的主题没关,这可能要找一些支持RTF文件操作的代码看看咯。
2009-05-06 22:29 | Heis

# re: JasperReport那些事儿(六)——制作分页式报表  回复  更多评论   

博主你好,我在数据很多的情况下出现没有对齐的情况,就你的例子来说吧,你把技术部的人员数加到100或更多时,出现部分名称的拉伸高度比右边子报表的具体的数据的高度要出一截来,这样显示得比较难看,请博主帮忙解决一下这个没有对齐的问题,谢谢。
2010-03-29 17:03 | DDR

# re: JasperReport那些事儿(六)——制作分页式报表  回复  更多评论   

@DDR
一般来说是子报表的高度超了而导致的问题,不过你描述的不是很清楚,要不你把截图发我邮箱,让我看看吧
2010-03-29 22:17 | Heis

# re: JasperReport那些事儿(六)——制作分页式报表  回复  更多评论   

ireport子报表分页的问题,想向你请教一下!我的需求是这样的:制作一张要打印的单据(以出库单为例),这张单据需要有好几联(存根联、财务联、仓库联),我的做法是做三张一样的单据(只是联次名字不同),然后我把这三张单据都放到主报表里面,打印的时候,就打印主报表。现在的问题是:这张单据内容可能占据一张半,比如存根联是占一张半,我想第二张剩下的部分就不要打印内容了,从第三张打印财务联,同理,从第5张打印仓库联。。。。。。我现在在主报表每个子报表下面增加了一个page break,但是只是适用于单据内容少于等于一页的情况(这种情况可以实现按联次分页),但是内容多于一页的时候还是不行,第二联还是会接着第一联打印,不会另起一张打印,请问你有什么好的办法能帮我解决吗?多谢!
2012-05-31 11:26 | 常兴

# re: JasperReport那些事儿(六)——制作分页式报表[未登录]  回复  更多评论   

@常兴
可以尝试一下把pagebreak放到主报表去,放在子报表之间。
2012-06-02 21:57 | heis

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


网站导航: