FastReport如实现打印固定行数,不足补打空白行(转)

看了网上的一些资料,发现了方法,但是描述都不是很详细,也至于每次都无法实现,只能在数据集中做补空行处理。今天终于弄通了,贴出方法,以备后续之用。

1. <1>在报表上加一个Child(在控件设计器中名称叫“子(W)”).其Name取名叫BlankBand。

   <2>此Band就是我们要添加的空行(若你的报表明细中有表格线,明细Band(如  DetailData中也有表格线,请在添加的BlankBand中也照样添加好表格线)。

          Band的高度设置为明细Band的高度。

  <3>.经过<2>的设置后,此Band的名称在报表中显示为: Child:BlankBand

 

2.在报表上加一个Footer 的Band(不是PageFooter)。(若你的报表不需要此Footer,可以将此BAND的高度弄成0).

  添加此Band的理由:需要利用此Footer的OnBeforePrint事件计算补空行。

 

3.在Footer的Band的OnBeforePrint事件中写入动态添加空行的代码:

 

procedure Footer1OnBeforePrint(Sender: TfrxComponent);
begin
 while (engine.freespace-8.7 >=0.6) and (engine.freespace<29.70) do   //lybingyu我试验成功时没有添加 and (engine.freespace<29.70)  条件
   engine.showband(blankband);

end;

 

 //说明:

// 1.  8.7高度为为报表中的PageFooter的高度,因为报表在打印Footer时,PageFooter还没打印,所以,在计算时得让工作引擎去掉预留的PageFooter的Band的高度.

//2.  0.6为空行Band的高度,即BlankBand的高度。

//3.  29.7为一张竖向A4张的默认高度。

    若不加此限制,有可能你的明细记录在一张纸上打不下时跳到第二页打,引擎因为只计算了PageFooter的高度,忽略了报表前面的Band高度会造成不停地插入空行以致报表的页数会被不停地添加导致死循环。


---------------------
作者:chinmusam
来源:CSDN
原文:https://blog.csdn.net/chinmusam/article/details/6663524
版权声明:本文为博主原创文章,转载请附上博文链接!

posted @ 2019-04-20 21:18  lybingyu  阅读(2523)  评论(0编辑  收藏  举报