在一种打印机调好打印格式后,如果电脑切换了一个打印机后,或者换个其他打印机后,格式就全乱了。
所以想请教一下有什么方法可以不论什么打印机,总是在固定的地方打印内容printer.BeginDoc;
                    
printer.Canvas.Font.Style := [fsBold];
                    printer.Canvas.Font.Size := 22;
                    printer.Canvas.TextOut(80,iCol+20,'----用户在线支付---');                    printer.Canvas.Font.Style := [];
                    printer.Canvas.Font.Size := 14;
                    printer.Canvas.TextOut(30,iCol+60,'-----------------------------------------------');                    printer.Canvas.Font.Style := [fsBold];
                    printer.Canvas.Font.Size := 22;
                    printer.Canvas.TextOut(30,iCol+80,jalist[iRow]['addr'].AsString);                    printer.Canvas.TextOut(30,iCol+110,jalist[iRow]['cust'].AsString);
                    printer.Canvas.TextOut(30,iCol+130,jalist[iRow]['phone'].AsString);
                 printer.EndDoc;

解决方案 »

  1.   

    不同打印机的DPI不一样啊,建议用fastreport
      

  2.   

    1楼兄弟说的对,DPI不同就效果就不同,所以你要用打印控件帮你解决这个问题1、用FastReport、Report machine都可以,做一个打印格式,保存成文件
    2、每次打印前先加载格式文件
    3、对指定组件写相应的值,然后打印
    多张票就重复步骤3
      

  3.   


    是的,打印小票,只有58和80,现在是排2个版来处理的。
    再问你一下, 收银小票上要打印图片要怎么处理?
    printer.Canvas.StretchDraw是打印不出来
      

  4.   

    一张图而已, 想怎么画就怎么画, 打印不出来不是打印机的问题, 你直接画到bmp上看有没有
      

  5.   

    可能你需要转化为位图即bmp格式才能打印出来。
      

  6.   


    是的,打印小票,只有58和80,现在是排2个版来处理的。
    再问你一下, 收银小票上要打印图片要怎么处理?
    printer.Canvas.StretchDraw是打印不出来这个问题是windows编程的经典问题呀,从我上高中时就见到有人问,见了不下30多次,我自己好像都回答过5+次,现在还有人问~~~ 
    一句话回答就是:用StretchDIBits
    要解释一下为什么,那就是某些类型的DC(典型如打印机DC)可能不支持BitBlt、StretchBlt这种操作(实际上StretchDIBits也可能不支持,这种打印机应该是文本打印机,不支持打印图形),你要用GetDeviceCaps检查一下该DC的光栅操作支持能力