我希望实现的效果类似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这部分代码非常不稳定,经常报错。另外这部分代码好像只能放到程序中,而不能放置报表内部。我想能在报表中填写代码实现这个功能。望高手指导!!

解决方案 »

  1.   

    procedure PrintSerial(Frx:TFrxReport;SequencePage:Byte=0); 
    这个函数第二个参数如果是0
    跟踪:R1:=P.TopMargin+P.BottomMargin;词句时P.TopMargin值为:3.6854775808e-528另一个值也类似这样的数字。即便偶尔这句可以通过后面的P.PaperHeight:=R; 也会报错。跟踪显示P.PaperHeight这个值也类似前面的值。
    如果函数第二个参数为1时
    R:=Pelstomm(Frx.Engine.TotalPages*Frx.Engine.PageHeight- 
    Frx.Engine.FreeSpace)+R1;这里的FreeSpace跟踪不到数据,最终得到R值夜类似前面显示的内容,最终计算高度经常为负数。并且很多地方都会偶尔报错
      

  2.   

    页面设置中有EndlessHeight属性,设置为TRUE后就用链式纸,也就是支持即打即停。 !!!
      

  3.   

    FASTREPORT 连续打印的话经验意外报错,就是同一个打印按钮反复按,无预览的那种或者有预览的那中开关开关如此反复...搞几十次肯定报错,一报错循环打印的话就会重新开始计算循环,有时候是那哥小提示框 正在生成、打印第几页的那个 提示框不消失点上面的取消也没用一定要退出程序才行。
    不知道大家有没碰到过。
    如下用TRY捕捉到的错误:
    System.NullReferenceException: 未将对象引用设置到对象的实例。
       在 FastReport.ReportSettings.4NZl7krdB(Report )
       在 FastReport.Engine.ReportEngine.bYEbNkE43(Boolean , Boolean , ReportPage )
       在 FastReport.Engine.ReportEngine.kZyL8aggu(Boolean , Boolean )
       在 FastReport.Report.Prepare(Boolean append)
       在 FastReport.Report.Prepare()
       在 FastReport.Report.Print()
      

  4.   

    我在我电脑上测试过各版本的都有这问题,我就把他的DEO改城循环无预览打印循环下多点几次打印就报错了