Heis的Blog

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

我的评论

@常兴
可以尝试一下把pagebreak放到主报表去,放在子报表之间。
@DDR
一般来说是子报表的高度超了而导致的问题,不过你描述的不是很清楚,要不你把截图发我邮箱,让我看看吧
@会跑的蜗牛
今日还上youtube了:-)真不好意思。
@隔叶黄莺
哈哈,是比不上你啦。我是比较晚,你比较早泄露了天机。
@大卫
虽然jdk5以后反射性能有了很大的提升,但是反射性能肯定会差一点。通常情况下,如果可以通过getter和setter访问,尽量使用getter和setter,这样重构起来也简单。
@liguangjun
边框是自己设置的;
字段是静态添加的,不是动态,所以要自己设计;
@梁章坪
不好意思,我借来的纸质书。不过你可以关注我的博客,我觉得直接看笔记会比看书有效率很多。
@cici
不用子报表是会有问题的,估计是你的数据源配置错误。
@zhenlu
这与博文的主题没关,这可能要找一些支持RTF文件操作的代码看看咯。
@5452
在技术领域有统一的术语是非常重要的,当然术语背后的原理更为重要。
@zl
每一行对应一个按钮来打单?这个我不是很明白,我们邮件联系吧。毕竟评论不是留言版。我邮箱:heisun@yeah.net
@zl
1.检查你的子报表,field是否放在detail区域内。
2.检查父报表的subreport元素内的XPATH是否是/NameList/Person
3.你的XML数据源不会只有一条数据吧?

如果还发现错误,下载我的模板源代码对比一下。
@sky ao
精辟!
我个人认为很多技术问题不是只了解结论就行了。
@zl
首先确认你的xml文件没有错,文件编码注意要是UTF8;
如果没错,这可能是ireport的xml解析器bug,我也经常遇到这样的问题。你可以试一下先把原来的ireport的xml数据源删掉,然后重启ireport,再试着新建一个xml数据源。这个bug也困扰我很久,有时候会莫名奇妙地不能解析。
@银河使者
1.这道题目没有说字符就一定是ASCII字符;
2.用256的数组来保存次数难免会造成空间的浪费。
@sun
打印之前肯定是可以修改的,我猜你的意思是打印预览的阶段对报表进行修改吧?
从Jasperreport的生成报表原理上来看,有这样一个过程。
1.模板设计阶段。这是一个XML文件,以jrxml后缀名结尾。
2.编译阶段。通过编译jrxml文件得到一个jasper文件。
3.数据填充阶段。通过将数据源填充到jasper文件上,然后生成一个jrprint文件。jrprint可以转换为PDF,Excel等格式的报表。jrprint文件已经是填充了数据的报表,不能编辑内容了。

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

我个人推荐第一种方法。因为可以将报表导为各种形式的文件,虽然需要工作量比较多。第二种方法就只能绑定在一种报表格式上了。
@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,就可以获取到这个参数的值了。
@sun
报表的数据是依赖数据源的,修改数据源自然能修改报表内容。
@凌晨风
“分成两列横着打印”是不是指像我现在的报表逆时针转90度。如果是,那在Jasperreport里是做不到的。文章中也有提及,Jasperreport是只能一个区域(band)一个区域地去渲染,因为区域的排列是由上到下,所以渲染的顺序也是从上到下的,没办法从左到右渲染。
@john
那你的意思是适合中国的报表才有意义?那什么是中国式的报表呢?
@凌晨风
首先,针对你说的“报表做起来很麻烦”。我前面的文章有说过,以XML作为数据源是针对不同的需求的,请考虑下面的几种情况:如果你的报表数据要经过一系列的精确计算,然后在报表上展示计算结果;如果你的报表数据并不是全部都来自于数据库,而是某些来自程序或其他配置文件;SQL能不能解决问题?

其次,我不能认同“多个子报表效率无疑会很底”这句话。标签式报表主体报表的subreport元素都是指向相同的子报表模板。这相当于java中一个类调用同一个类的多个实例,这样并不会有效率问题。使用“无疑”这个词并不是程序员应有的素质,至少你应该先去运行一下这个报表。

我猜想你说的“多结果集”是指subdatasets,这个是只适用于连接(Connection)类型的数据集(像数据库,Hibernate之类),并不适用于数据源(Data Source)类型的数据集(像XML,CSV之类)。

对于你的“分栏”操作,我并不是很理解,请赐教。
@tide
我理解你的意思是像下面这样的表格吗?
_______________
| |____|____|
| |____|____|
| |____|____|
| |____|____|
如果是,我会在下一篇文章中介绍。
@游上岸的鱼
使用XML作为数据源比直接读取数据库更有优势的地方在于:
1.数据可以在程序里处理;
2.数据独立性和可读性好

但是劣势也是很明显的,因为要从数据库读取数据到对象,对象再转换为XML,这个过程消耗的资源要更多,效率也会受到影响。具体的效率我也没测试过,但是我在项目里生成的XML在一万行左右时,效率是可以接受的。
但是对于效率要求比较高的报表,但是数据不需要做中间处理的报表,我并不推荐XML作为数据源这种方式。