1、发票规格为:201*102mm,页边距为左:15mm,  上:25mm, 右:20mm,下:5mm,怎样才能在给定的范围内输出发票上的内容呢?请高手给出设计思路。2、我现在能将发票上的内容打印出来,但没有在如上给出的有效区域内打印,也就是页面设置有问题,我看了网上的一些函数如setPaperSize(x,y)都没有效果;还有象控制在(15mm,25mm)处开始打印也不能实现。本人急用,请高手赐教!

解决方案 »

  1.   

    你用什么报表控件?quickreport还是fastreport?
      

  2.   

    你是win2000的系统吧?
    我也有这个问题
    用Printer对像进行自定义打印,
    几个函数似乎都不起作用啊?
      

  3.   

    to victor_yang: 我不是用的报表控件,是通过输出屏幕上的edit的位置打印出edit.text。to xiaofeng_cxy: 没错,我用的是win2000,我看过几个帖子说是可以,可我怎么调都不对啊。
      

  4.   

    var
      device,driver,post:array[0..255]of char;
      hdmode:THandle ;
      pdmode:PDevMode;
    begin
      //设置打印机
      Printer.PrinterIndex:=PT.PrintIndex;
      //设置纸张大小
      Printer.GetPrinter(device,driver,post,hdmode);
      if hdmode<>0 then
      begin
        pdmode:=GlobalLock(hdmode);
        if pdmode<>nil then
        begin
          pdmode^.dmPaperSize:=256;
    //我的纸张大小是长25CM,宽14.5CM
          pdmode^.dmPaperLength:=2500;
          pdmode^.dmPaperWidth:=1450;
          pdmode^.dmFields:=pdmode^.dmFields or DM_PAPERSIZE;
          pdmode^.dmFields:=pdmode^.dmFields or DM_PAPERLENGTH ;
          pdmode^.dmFields:=pdmode^.dmFields or DM_PAPERWIDTH;
          ResetDC(printer.Handle,pdmode^);
          GlobalUnlock(hdmode);
        end;
      end;我是用来打印条码标签的,此程序对大多数激光,和针式的打印机可以。
    我用过EPSON-6200L,EPSON-1200,CONON-S400SP,EPSON-K300+等等!!!
      

  5.   

    我有现成的发票打印模块,请和我联系:[email protected]/@163.com
      

  6.   

    还是用报表控件吧,我套打用的是report machine可以自定义纸张
      

  7.   

    我也有这样的问题,,,,在可在csdn上面的帖子
    哎!我都快繁死乐!!!能交流以下吗???
      

  8.   

    to win2000pega(景) :我用的也是这段代码,但是没有效果。我现在想先解决页边距的问题,纸张的大小毕竟可以另外手动设置。感谢大家的交流,我的qq:110801367,E_mail:[email protected]
      

  9.   

    错了
    邮箱是[email protected]
      

  10.   

    to win2000pega(景) :
    按照你给的代码是可以实现自定义纸张设定,但是我现在要先列出联在本机上的所有打印机,然后选择一台,进行打印,但是在这种情况下上述的自定义纸张过程就失效了。不知各位有没有遇到这种问题,请指教。
      

  11.   

    打票据的话可以用Printer直接。比较方便的。
      

  12.   

    使用GetDeviceCaps函数,获得DPI值,并进行转换。不同的打印机有不同DPI呢!
      

  13.   

    这里有在WIN2000/XP下添加自定义纸张的Delphi源代码
    http://tansuo.51.net/
      

  14.   

    用这些代码可以实现纸张定义和打印
    var
      device:array[0..255] of char;
      driver:array[0..255] of char;
      port  :array[0..255] of char;
      hdmode:thandle;
      pdmode:pdevmode;
    begin
     printer.PrinterIndex:=printer.PrinterIndex;
     printer.GetPrinter(device,driver,port,hdmode);
     if hdmode<>0 then begin
       pdmode:=globallock(hdmode);
       if pdmode<> nil then begin
         pdmode^.dmFields:=pdmode^.dmfields or dm_papersize;
         pdmode^.dmPaperSize:=dmpaper_legal;
         pdmode^.dmFields:=pdmode^.dmFields or dm_papersize or dm_paperwidth or dm_paperlength;
         pdmode^.dmPaperSize:=dmpaper_user;
         pdmode^.dmPaperWidth:=200;
         pdmode^.dmPaperLength:=200;
         pdmode^.dmFields:=pdmode^.dmFields or dmbin_manual;
         globalunlock(hdmode);
         end;
         end;
         printer.PrinterIndex:=printer.PrinterIndex;
         printer.BeginDoc;
         printer.Canvas.TextOut(10,10,formatfloat('0.00',strtofloat(edit1.Text)));
         printer.Canvas.TextOut(10,40,formatfloat('0.00',strtofloat(edit2.Text)));
         printer.EndDoc;