固定行数的纵向分栏

【问题】

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 表

1png

A2:将 A1 总记录数按 Row 行数做整除,对 A1 用空记录补齐

2png

A3:生成分栏表结构

3png

A4:使用 record 函数为分栏后的表填入数据

4png

JasperReport 可通过 JDBC 访问集算器,可以像数据库一样使用,参考JasperReport 调用 SPL 脚本