最好带有动态设置打印位置

解决方案 »

  1.   

    我写的双向打印的
    procedure _PrintBill;
    Const
      DocumentTitle = 'AW';
    var hPrinter: DWord;
        DocInfo: TDocInfo1;
        dwJob: Integer;
        dwBytesWritten: DWord;
        PrinterName: string;
        DocumentData: string;
      procedure PrintError;
      begin
        raise ERAWPrintError.Create(Format(errPrintError, [DocumentTitle]));
      end;
    begin
      PrinterName:= _DefaultPrinter;
      if not OpenPrinter(PChar(PrinterName), hPrinter, nil) then
        raise ERAWPrintErrorPrinterName.Create(Format(errOpenPrinter, [PrinterName]));
      try
        DocInfo.pOutputFile:= nil;
        DocInfo.pDatatype:= 'RAW';
        DocInfo.pDocName:= PChar(DocumentTitle);
        dwJob:= StartDocPrinter(hPrinter, 1, @DocInfo);
        if (dwJob=0) then PrintError;
        try
          if not StartPagePrinter(hPrinter) then PrintError;
          try
            DocumentData :=#10+#10+#10+#10+'                '+r_SysInfo.StationName;
            DocumentData :=DocumentData + #10+'                  '+_getrmb(strtoint(vartostr(Carprice)))+'       '+vartostr(Carprice)+'元';
            DocumentData :=DocumentData + #10+#10+'            '+inttostr(r_TradeInfo.WayNo) + '       ' + formatfloat('000000',r_Userinfo.No)+ '   '+formatfloat('00000000',r_UserInfo.CurrentBillNo-1);
            DocumentData :=DocumentData + #10+#10+'            '+datetimetostr(date)+ '        '+timetostr(time);
            DocumentData :=DocumentData + #10+#10+#10+#10+#10+#10; //换行
            if not WritePrinter(hPrinter, Pointer(DocumentData), Length(DocumentData), dwBytesWritten)
              then PrintError;
            if (LongInt(dwBytesWritten)<Length(DocumentData))
              then PrintError;
          finally
            if not EndPagePrinter(hPrinter) then PrintError;
          end;
        finally
          if not EndDocPrinter(hPrinter) then PrintError;
        end;
      finally
        ClosePrinter(hPrinter);
      end;
    end;
      

  2.   

    我写的图形打印,可以控制位置的
    uses printers  Try    //图形打印
       with printer do begin
         BeginDoc;     //开始一个打印任务
           Canvas.Font.Size :=12;  //设置打印的字体
           Canvas.TextOut (150,55,r_SysInfo.StationName);     //在150,50位置打出收费站名称
           Canvas.TextOut (170,70,_getrmb(strtoint(vartostr(CarPrice))));
           Canvas.TextOut (330,70,vartostr(CarPrice)+'元');
           Canvas.TextOut (120,85,inttostr(r_TradeInfo.WayNo));
           Canvas.TextOut (190,85,formatfloat('000000',r_Userinfo.No));
           Canvas.TextOut (300,85,copy(datetimetostr(now()),3,2)+formatfloat('00000000',r_UserInfo.CurrentBillNo-1));
           Canvas.TextOut (120,100,datetimetostr(date()));
           Canvas.TextOut (300,100,timetostr(time) );
       end;
     Finally
       printer.EndDoc;  //结束一个打印任务
     end;