自己写打印程序打印报表,用虚拟机打印的时候一切正常,但是用真正的打印机时第一次打印出来的每行都只打印了半行出来,本来是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;