fastreport 连续打印有关问题

fastreport 连续打印问题
我希望实现的效果类似Pos机那样,打到哪里就停到哪里。连续打印中间也没有间隔。打印机使用的是连续针式打印机。

我使用的是fastreport4.0 尝试在报表内写代码(Report.Page1.PaperHeight:=100)但没有起作用。想使用ChangePaper函数提示没有定义。

网上找到部分相关代码:

很多人认为Fr不能实现连续打印,以为只能通过自己写函数调用打印函数来实现连续打印,实际

上,Fr可以轻易的实现连续打印,同时,实现时又是非常简单,你甚至可以在你的程序的打印设

置中简单的让客户选择是否连续打印,其它都可以保持不变。

function PelsTomm(Pels:Extended):Extended;
begin
Result:=Pels/Screen.PixelsPerInch*25.4;
end;

procedure PrintSerial(Frx:TFrxReport;SequencePage:Byte=0);
var
P:TfrxReportPage;
R,R1:Extended;
begin
{必须是二遍报表,否则无法计算总页数。
下面的方法只适用于没有页脚的情况,因为如果有页脚的话
FreeSpace就始终为0了。可以用报表脚来代替。
因为是连续打印,也可以看作只有一页,报表脚也就相当于页脚了}
if not Frx.Engine.DoublePass then Exit;
//SequencePage指要连续打印的页面,普通报表就是0
P:=TfrxReportPage(Frx.Pages[SequencePage]);
R1:=P.TopMargin+P.BottomMargin;
while Frx.PrepareReport do
begin
if (Frx.Engine.TotalPages<=1) then Break;
R:=Pelstomm(Frx.Engine.TotalPages*Frx.Engine.PageHeight-
Frx.Engine.FreeSpace)+R1;
P:=TfrxReportPage(Frx.Pages[SequencePage]);
P.PaperHeight:=R;
end;
{必须用上面的循环代码来得到准确的空白区域
不能用通过计算总页数减去各页的页边距的方法来获得空白区域
因为如果碰到一条记录过宽的情况导致换页,就不准确了。}
R:=Pelstomm(Frx.Engine.TotalPages*Frx.Engine.PageHeight-
Frx.Engine.FreeSpace)+R1;
P:=TfrxReportPage(Frx.Pages[SequencePage]);
P.PaperHeight:=R;
end;

在预览或打印前先调用PrintSerial即可。


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/SmallHand/archive/2009/01/07/3727669.aspx

这部分代码非常不稳定,经常报错。另外这部分代码好像只能放到程序中,而不能放置报表内部。我想能在报表中填写代码实现这个功能。

望高手指导!!

------解决方案--------------------
抱歉,这段代码是我摘录的,准备以后用,没有经过测试。
你说,报错,都报什么错误?
------解决方案--------------------
页面设置中有EndlessHeight属性,设置为TRUE后就用链式纸,也就是支持即打即停。 !!!