procedure TForm1.Button3Click(Sender: TObject);
var
  xPrt:TPrinter;
  Left,Top,WordHeight , wordWidth : Integer;
  j,k:integer;  //循环变量
  PWidth:integer;  //纸张宽度  XmlRoot:IXMLNode;
  XmlNode:IXMLNode;
  StrName,StrMobileNum,StrReDate,StrPrtDate:String;  //存放客户信息
  PrtIni:TIniFile;
  IntCCnt:integer;   //列行数
  IniLeft:integer;   //ini文件定义的左起始位
  IniTitle:String;   //ini文件定义的标题
begin
  //取客户信息
  XMLDocument.LoadFromFile('Dtl.xml');
  XmlRoot:=XMLDocument.DocumentElement;
  XmlNode:= XmlRoot.ChildNodes[0];
  StrName:= XmlNode.Text;
  XmlNode:= XmlRoot.ChildNodes[1];
  StrMobileNum:= XmlNode.Text;
  XmlNode:= XmlRoot.ChildNodes[2];
  StrReDate:= XmlNode.Text;
  XmlNode:= XmlRoot.ChildNodes[3];
  StrPrtDate:= XmlNode.Text;  XmlNode:=XmlRoot.ChildNodes[4];
  
  xPrt:=Tprinter.Create;
  xPrt.PrinterIndex:=xPrt.Printers.IndexOf('Star TUP942 Raster Printer');
  with xPrt do
  begin
      BeginDoc;
      Canvas.Font.Name:='宋体';
      Canvas.Font.Size:=9;
      WordHeight:=Canvas.TextHeight('字');
      wordWidth:=Canvas.TextWidth('字');      Left:=20;
      Top:=0;
      //打印标题
      //先定位到纸的中间位置,再向左偏移字数*每个字宽度的一半,这样信息才可以居中显示
      PWidth:=xPrt.PageWidth;
      //Canvas.TextOut();
      Canvas.TextOut(Round(((PWidth-Left)/2)-7*WordWidth) ,Top,'客户详单');//今天这里出错,显示地址冲突之类的错误
      INC(Top,WordHeight+1);//换行
      Canvas.TextOut(Left,Top,'客户名称:'+StrName);
      Canvas.TextOut(Round((xPrt.PageWidth-Left)/2),Top,'客户号码:'+StrMobileNum);
      INC(Top,WordHeight+1);
      Canvas.TextOut(Left,Top,'查询帐期:'+StrReDate);
      INC(Top,WordHeight+1);
      
      Canvas.TextOut(Left,Top,'查询日期:'+StrPrtDate);
      INC(Top,WordHeight+1);
      {开始打印详单内容信息 }
      //开始打印标题
      PrtIni:=TIniFile.Create('D:\z\delphi打印\project\prt.ini');
      IntCCnt:=PrtIni.ReadInteger('Dtl','CCnt',9);      for j:=1 to IntCCnt do
      begin
          IniLeft:=PrtIni.ReadInteger('Dtl','CLeft_'+inttostr(j),0);
          IniTitle:=PrtIni.ReadString('Dtl','CName_'+inttostr(j),'');
          //Canvas.MoveTo(IniLeft,Top);
          Canvas.TextOut(IniLeft,Top,IniTitle); //昨天这里出错,也是地址冲突之类
      end;
      INC(Top,WordHeight+1);
      EndDoc;
  end;
  xPrt.Free;
  PrtIni.Free;
end;