在设置单据的打印模板的时候,我们有时候会遇到这样的情况:单据的内容很少,打印出来的效果不理想的情况,例如 1、单据体与单尾之间有大量的空白;
2、单据体跟单尾连在一起,单尾后面的空白篇幅太大; 以上这两种打印效果并不理想,我们期待的是,系统能自动填充空白行至满页。 实现步骤:
1、在打印模板上添加“子”对象child,并把单体的内容复制到该部分,并清空各个对象的值,出现一个空白行。
2、打开打印模板的代码编辑窗口,添加以下两个事件(可以直接把以下的代码拷贝到代码编辑器中,保存即可):
var PageLine: integer; //在现在页列印到第几行 PageMaxRow: integer=20; //设定每页列数
procedure Footer1OnBeforePrint(Sender: TfrxComponent); var i: integer; begin i
:= iif(PageLine=0, PageMaxRow, PageLine); while i < PageMaxRow do begin i := i + 1;
Engine.ShowBand(Child1); //印空白表格 end; end; procedure MasterData1OnBeforePrint(Sender:
TfrxComponent); begin PageLine := <line> mod PageMaxRow; if (PageLine = 1) and
(<line> > 1) then Engine.newpage; end; begin end.
3、选择打印模板的单体部分,切换到“事件”页,并在OnAfterPrint 事件中选择MasterData1OnBeforePrint
4、选择打印模板的单尾部分,切换到“事件”页,并在OnBeforePrint事件中选择Footer1OnBeforePrint 5、保存 现在我们就可以得到以下的打印效果了!
==========================================================================
最新更正代码如下,已调试通过: var PageLine: integer=1; //在现在页列印到第几行 PageMaxRow:
integer=5; //设定每页列数 procedure Footer1OnBeforePrint(Sender: TfrxComponent); var
i: integer; begin i :=iif(PageLine=0, PageMaxRow, PageLine);
while i <=PageMaxRow do begin i := i + 1;
Engine.ShowBand(Child1); //印空白表格 end; end; procedure
MasterData1OnAfterPrint(Sender: TfrxComponent); begin PageLine :=PageLine+1;
if pageline>pagemaxrow then
begin
Engine.newpage;
PageLine:=1;
end;
end;
begin end. ===========================================
最简便的方法是只加如下代码,程序自动根据记录数补起空行: procedure Footer1OnBeforePrint(Sender: TfrxComponent); begin
while Engine.FreeSpace>(child1.height+footer1.height+5) do
Engine.showband(child1); end; 通过调整页高来确定每页打印记录数
|