**********关于使用fastreport打印超市小票的问题********

sailorsofth 2008-10-25 09:31:19
我用delphi6+fastreport做得打印,打印超市小票,使用的是中崎打印机,但是如果购买的物品太多的话,打印预览的时候就分页了,点击“打印”后,小票的第二页不打印,请问怎么解决呀!最好能连续打印起来(在一页打印完)
听说小票的打印机最大长度时30mm 不知道是否正确
...全文
366 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
ajiwuweibin 2008-11-18
  • 打赏
  • 举报
回复
一楼正解,楼主放心,fastreport绝对是delphi第一采择的报表,方便\功能强大\漂亮,我用了N种报表但都没有fastreport好用
tpcnyou 2008-11-17
  • 打赏
  • 举报
回复
指令才是正道。
ITlover 2008-10-31
  • 打赏
  • 举报
回复
3楼is right!

如果不是这种思路,还会造成纸张打印浪费,用户肯定不满意,麻烦还更大
fangsp 2008-10-31
  • 打赏
  • 举报
回复
3楼说得挺详细的
eqapple 2008-10-31
  • 打赏
  • 举报
回复
支持楼上的
polly_110 2008-10-30
  • 打赏
  • 举报
回复
用FR打印,估计效果是最差的,主要体现在:速度,字体清析度。
用文本吧,速度很快,这种小票,不会有很复杂的界面的,把内容一行行地打出来,做个汇总,就可以了。

最好还是用指令吧,其实和文本差不多的。
速度快,并且,可以设置字体大小(绝对清楚,比FR要强很多),可以设置走纸,切纸,等。。。

下面代码,是EPSON 小票打印里的,很简单。。。

try
AssignFile(F,'LPT1');
Rewrite(F);

//打印标题
Writeln(F,chr($1b) + chr($40)); //[初始化打印机
Writeln(F,Chr($1b) + Chr($72) + '1'); //设置红色打印
Writeln(F,chr($1b) + chr($61) + '1'); //居中打印
Writeln(F,chr($1c) + chr($21) + '4'); //倍宽打印


Writeln(F,'点单打印');


Writeln(F,chr($1b) + chr($61) + '0'); //取消居中打印
Writeln(F, '点单号:' + fGroupID); //显示帐单号,房号
Writeln(F, '房 号:' + RmName);

Writeln(F,chr($1c) + chr($21) + '0');
Writeln(F,'打印时间:' + datetimetostr(Now));
Writeln(F,'----------------------------------------');
Writeln(F,' 商品名称 数量 单价 单位 合计');
Writeln(F,'----------------------------------------');

//打印尾标
Writeln(F,'----------------------------------------');
writeln(F,' 合计:' + CurrToStr(fTotalSum) + '元');

//打印完毕,切纸
Writeln(F,chr($1d)+ 'V' + chr(66) + chr(0)); //切纸
finally
closefile(F);
end;
jobslew2603765 2008-10-29
  • 打赏
  • 举报
回复
为什么不用文本打印呢?
直接写入到txt文本,在打印,也好用 啊
亮剑_ 2008-10-25
  • 打赏
  • 举报
回复
把模板的页面设为自定义,高度设成和小票高度一样
FR的走纸是根据模板高度来的
StringGrid打印报表(FastReport) {*************StringGrid打印功能***********************************} (*uses unit: FR_Class, FR_View from (fast-Report) *) (*参数说明:printRow:每页打印的行数 *) (* styleType:边框类型 0:无边框,15:所有边框,18:底部画线 *) (* title:标题 *) (* FrmGrid:所在窗体 *) (*date:2005-04-24 *) (*author:kxy *) {******************************************************************} function GridPrint (Grid1:TstringGrid;printRow,StyleType:integer;Title:string;FrmGrid:TForm):boolean;//打印报 表 var fr: TfrReport; ReportTitle,Masterdata,ColumnHeader,PageHeader,pageFooter:Tfrbandview; //栏目 MemoVT,MemoVC:Array of TfrMemoview; //列 TitleV ,dateV,pageV:TfrMemoview ; lineV:TfrlineView; //线 page:Tfrpage; //页 GridRow,GridCol,CurrRow,I,J,col:integer;//总的行数,列数,当前行 PageCount,pageRow:integer; //总共页数; Left,Top,Width,Heigth:integer; TempLeft,TempWidth:integer; printDate :string; begin screen.Cursor := crHourGlass; GridRow := Grid1.RowCount; GridCol := Grid1.ColCount; CurrRow := 0; pageRow := printRow; try fr := TfrReport.Create(FrmGrid); fr.StoreInDFM := True; PageCount := GridRow div printRow ; //计算出页数 for I := 0 to PageCount - 1 do begin left :=0; top :=20; width :=757; heigth :=25; fr.Pages.Add; page := fr.Pages[i]; if I = 0 then //第一页增加标题; begin {标题栏} ReportTitle := Tfrbandview.Create; ReportTitle.BandType := btReportTitle; ReportTitle.SetBounds(left,top,width,40); page.Objects.Add(ReportTitle); TitleV := TfrMemoview.Create; Titlev.SetBounds(0,top,width,30); Titlev.Alignment := (Titlev.Alignment and $FC) + 2;//居中 Titlev.Font.Name := '宋体'; TitleV.Font.Size := 16; TitleV.Memo.Add(title); page.Objects.Add(TitleV); {打印日期} dateV := TfrMemoview.Create; dateV.SetBounds(0,top + 40,width,30); dateV.Alignment := (dateV.Alignment and $FC) + 1 ;//右对齐 dateV.Font.Name := '宋体'; dateV.Font.Size := 9; printDate :='打印日期:' + FormatDateTime('yyyy/mm/dd',Now) +' '; dateV.Memo.Add(printDate); page.Objects.Add(dateV); PageRow := PageRow - 4 ; //少打两行组成一个标题 Top := 60; end ELSE begin pageRow := PrintRow; Top := 20; end; for J:= 0 to PageRow + 1 do //每页的行数 begin {列头} IF J = 0 then //第一行打行列标题栏 begin ColumnHeader := Tfrbandview.Create; ColumnHeader.BandType := btColumnHeader; ColumnHeader.SetBounds(left,top,width,heigth); page.Objects.Add(ColumnHeader); SetLength(MemoVT,GridCol); TempLeft := 20; for col:= 0 to GridCol - 1 do begin MemoVt[col] := TfrMemoview.Create; MemoVt[col].Font.Name := Grid1.Font.Name; MemoVt[col].Font.Size := Grid1.Font.Size; MemoVt[col].Memo.Add(Grid1.Cells[col,0]); MemoVt[col].FrameTyp := StyleType; //显示边框 TempWidth := Grid1.ColWidths[col]; //宽度与Grid中的宽度一致 MemoVt[col].SetBounds(tempLeft,top ,tempWidth,heigth); templeft := tempLeft + tempwidth; page.Objects.Add(MemoVt[col]) end; end Else begin top := top + heigth; Inc(CurrRow); TempLeft := 20; SetLength(MemoVc,GridCol); for col :=0 to GridCol - 1 do begin MemoVc[col] := TfrMemoview.Create; MemoVc[col].Font.Name := Grid1.Font.Name; MemoVc[col].Font.Size := Grid1.Font.Size; MemoVc[col].Memo.Add(Grid1.Cells[col,CurrRow]); MemoVc[col].FrameTyp := StyleType; //显示边框 TempWidth := Grid1.ColWidths[col]; //宽度与Grid中的宽度一致 MemoVc[col].SetBounds(tempLeft,top ,tempWidth,heigth); templeft := tempLeft + tempwidth; page.Objects.Add(MemoVc[col]); end; end; if currRow >= GridRow then break; end; {页码} pageV := TfrMemoview.Create; pageV.Font.Name := '宋体'; pagev.Font.Size := 10; pagev.FrameWidth := 2; //pagev.FrameTyp := 24 ; pagev.Alignment := (pagev.Alignment and $FC) + 2;//居中 pageV.Memo.Add('第'+ inttostr(I + 1) + '页 (共' + inttostr(PageCount) + '页)' ); pagev.SetBounds(0,1025,750,20); page.Objects.Add(pageV); end; fr.ShowReport; screen.Cursor := crDefault; finally fr.Free; end; end;

2,498

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧