固定行数的纵向分栏
【问题】
what can ı configure the jasper report detail heapriider layout ? ı want to print datas side by side and every sides have 4 datas sub bottom
1 data1 5 data5
2 data2 6 data6
3 data3
4 data4
【回答】
整张报表纵向分栏可在 jasper 中设置分栏数,但想固定行数为 4,而且只用于报表的局部,要实现这样的需求,可以在数据准备时将原数据表转换成 4 行多列的表。存储过程和 jasper 脚本都很难写,可以考虑用集算器 SPL 实现,脚本如下:
A |
|
1 |
=myDB1.query("select a,b from sorder") |
2 |
=if(A1.len()/Row==0,A1,A1.insert(0:round(A1.len()/Row))) |
3 |
=create(${Col.((t=~,A1.fname().(~+string(t)))).conj().concat@c()}) |
4 |
=A3.record(A1.sort((#-1)%Row).conj([a,b])) |
Row 是行数,Col 是分栏数,都是报表参数,这段代码可以将任意数据表进行纵向分栏,可以将 Row 固定为 4。
A1:查询 sorder 表
A2:将 A1 总记录数按 Row 行数做整除,对 A1 用空记录补齐
A3:生成分栏表结构
A4:使用 record 函数为分栏后的表填入数据
JasperReport 可通过 JDBC 访问集算器,可以像数据库一样使用,参考JasperReport 调用 SPL 脚本 。