报表按纸分页的补空行
关于报表按行分页的补空行,已经有很多文章的介绍,下面介绍的是按纸分页的补空行的方法,实际上,由于单元格里自动换行等原因使得每一行的行高不同,导致按行分页的补空行的方式失效,最好的方法就是通过api的方式修改报表定义,增加空行或者动态改变行高来实现。
本例就是用动态改变行高的方式来补空行的。实现的思路是读取报表定义后,把报表用pagebuilder分好页 ,然后读取最后一页,计算出最后一页的行高,然后改变一个空白行的行高,使这行撑高 ,最终实现补空行的效果。
实现步骤:
1 为计算报表做准备:
String lisenseFile = “F:\\c盘\\授权\\润乾4.0\\runqianWindowServer.lic”;
ExtCellSet.setLicenseFileName(lisenseFile);
String reportFile = “D:/Program Files/reportHome/webapps/demo/reportFiles/ajdczjbg11.raq”;
InputStream is =new FileInputStream(reportFile);
ReportDefine rd = (ReportDefine)ReportUtils.read( is);
Context cxt = new Context();
Engine engine = new Engine(rd, cxt); //构造报表引擎
IReport iReport = engine.calc(); //运算报表
2 取到分页后报表的最后一页
PageBuilder pb =new PageBuilder(iReport);
IReport[] ireports = pb.getAllPages();//
3 计算一下最后一页目前的行高
int rc=ireports[ireports.length-1].getRowCount();
int curRowHeight=0;
for(int i=1;i<=rc;i++){
curRowHeight+=ireports[ireports.length-1].getRowCell(i).getRowHeight();
}
4 给报表定义的固定行设置行高
rd.getRowCell(30).setRowHeight(254-curRowHeight);
其中 30是在报表中定义好的一个行高为0的空白行。
254是A4纸去掉上边距,下边距的一个值,具体的数字需要根据实际情况算。
5 展示报表,本例子是保存到本地即可看到效果:
OutputStream out1 = new FileOutputStream( “C:\\test.raq” );
ReportUtils.write(out1,rd);
out1.close();
以上是撑高的例子,同样也可以做成多行的样子,因为rd.getRowCell(30).setRowHeight(254-curRowHeight);
这句中 254-curRowHeight这个计算值就是空白的高度,可以根据这个高度和实际情况,来控制扩展出来多少行。