报表按纸分页的补空行

关于报表按行分页的补空行,已经有很多文章的介绍,下面介绍的是按纸分页的补空行的方法,实际上,由于单元格里自动换行等原因使得每一行的行高不同,导致按行分页的补空行的方式失效,最好的方法就是通过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的空白行。

254A4纸去掉上边距,下边距的一个值,具体的数字需要根据实际情况算。

5 展示报表,本例子是保存到本地即可看到效果:

OutputStream out1 = new FileOutputStream( “C:\\test.raq” );

ReportUtils.write(out1,rd);

out1.close();

以上是撑高的例子,同样也可以做成多行的样子,因为rd.getRowCell(30).setRowHeight(254-curRowHeight);

这句中 254-curRowHeight这个计算值就是空白的高度,可以根据这个高度和实际情况,来控制扩展出来多少行。

热门文章