自己写打印程序打印报表,用虚拟机打印的时候一切正常,但是用真正的打印机时第一次打印出来的每行都只打印了半行出来,本来是2页的数据缩成了一页,之后再打印就正常了,但是这时候不退出系统再用虚拟机打印,这时每行之间的距离变大了,本来是2页的变成了4页,关了再打印正常,然后退出系统再登陆打印,问题重现...
应该可以排除打印机的问题,打印其他的很正常...打印的代码大致如下:
注:这段代码我想也没什么问题吧,因为用类似的代码去打印其他的报表也是正常的,
打印之前还会写数据到memo中(mmoPrint),这个代码有点复杂就不贴出来了,有遇到过类似问题的朋友请指点一下,困惑中...
procedure TfrmBusinCheckRpt.PrintReport;
var
iLeft,iTop,iPageHeight,iPageWidth,x,y,LineSpace : integer;
i,j:Integer;
sTmp:string;
begin
j:=0; iTop := 80;
iLeft := 70;
y := iTop;//Top 起始行的位置,比如设置 Top := 20;
x := iLeft;//Left 左边的起始位置,比如设置:Left := 20;
iPageHeight:=Printer.PageHeight;
iPageWidth:=Printer.PageWidth;
Printer.Canvas.Font := fmBusinCheck21.mmoPrint.Font;
LineSpace := Printer.Canvas.TextHeight('字体')+4;//行间距 Printer.BeginDoc;
for i := 0 to fmBusinCheck21.mmoPrint.Lines.Count - 1 do
begin
Printer.Canvas.TextOut(x,y,fmBusinCheck21.mmoPrint.Lines[i]);
y := y + LineSpace;
if(y > iPageHeight - (itop + LineSpace * 2)) then
begin
j:=j+1;
Printer.Canvas.TextOut(iPageWidth div 2- LineSpace,iPageHeight- iTop - LineSpace,'第 '+ IntToStr(j)+' 页');
if i<> fmBusinCheck21.mmoPrint.Lines.Count-1 then
Printer.NewPage;
y := iTop;
end;
end;
Printer.Canvas.TextOut(iPageWidth div 2- LineSpace,iPageHeight- iTop - LineSpace,'第 '+ IntToStr(j+1)+' 页');
Printer.EndDoc;
end;
应该可以排除打印机的问题,打印其他的很正常...打印的代码大致如下:
注:这段代码我想也没什么问题吧,因为用类似的代码去打印其他的报表也是正常的,
打印之前还会写数据到memo中(mmoPrint),这个代码有点复杂就不贴出来了,有遇到过类似问题的朋友请指点一下,困惑中...
procedure TfrmBusinCheckRpt.PrintReport;
var
iLeft,iTop,iPageHeight,iPageWidth,x,y,LineSpace : integer;
i,j:Integer;
sTmp:string;
begin
j:=0; iTop := 80;
iLeft := 70;
y := iTop;//Top 起始行的位置,比如设置 Top := 20;
x := iLeft;//Left 左边的起始位置,比如设置:Left := 20;
iPageHeight:=Printer.PageHeight;
iPageWidth:=Printer.PageWidth;
Printer.Canvas.Font := fmBusinCheck21.mmoPrint.Font;
LineSpace := Printer.Canvas.TextHeight('字体')+4;//行间距 Printer.BeginDoc;
for i := 0 to fmBusinCheck21.mmoPrint.Lines.Count - 1 do
begin
Printer.Canvas.TextOut(x,y,fmBusinCheck21.mmoPrint.Lines[i]);
y := y + LineSpace;
if(y > iPageHeight - (itop + LineSpace * 2)) then
begin
j:=j+1;
Printer.Canvas.TextOut(iPageWidth div 2- LineSpace,iPageHeight- iTop - LineSpace,'第 '+ IntToStr(j)+' 页');
if i<> fmBusinCheck21.mmoPrint.Lines.Count-1 then
Printer.NewPage;
y := iTop;
end;
end;
Printer.Canvas.TextOut(iPageWidth div 2- LineSpace,iPageHeight- iTop - LineSpace,'第 '+ IntToStr(j+1)+' 页');
Printer.EndDoc;
end;
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货