我的想法是在 fastReport 里自己动手做一个定位打印. 我估计没有什么现成的控件,
因为各种单据的格式不一样. 但如果有的话, 别忘了告诉我一声.
至于打印机, 如果可以连续进纸打印的, 那一般的针式打印机就可以了,
如果主要是单页进纸的, 那建议使用票据打印机(好贵哦).
帮你顶了

解决方案 »

  1.   

    我的票据格式大小是自定义的,我的想法是这样的,先把格式做好,然后动态填充数据,再做打印.我只用过Quick report ,没有做过像票据这样的打印,不知道如何下手.
      

  2.   

    用 fastReport做吧。
    还有就是你的打印机可能要注意选型,因为有的打印机的走纸不标准。
    如果你想实现自动进纸,连续打印的话,打印机的选型是很重要的。
    我就遇到过这个情况,同样的程序,有的打印机就能很规范的打印
    而有的就不能。
      

  3.   

    建议采用EPS 1600K 的打印机。
      

  4.   

    用DELPHI带的PRINTER就可以做到精确打印!
      

  5.   

    给你一段代码,可以套打任何纸张
    procedure TForm1.N12Click(Sender: TObject);
    var
        q:integer;
    begin
      if (Edit1.Text='') or (Edit2.Text='')
      then showmessage('纸张没有设置')
      else begin
       Rep:=TQuickrep.create(nil);
       SetLength(TmQrlabel,i);
        try
          Rep.Page.Length:=strtoint(Edit1.text);
          Rep.page.width:=strtoint(Edit2.Text);
          Rep.page.bottommargin:=0;
          Rep.page.Leftmargin:=0;
          Rep.page.Rightmargin:=0;
          Rep.page.Topmargin:=0;
          Rep.bands.HasTitle:=true;
          rep.bands.TitleBand.Height:=strtoint(Edit1.Text);
          rep.bands.TitleBand.Width:=Strtoint(Edit2.Text);
          for q:=low(TMQrlabel) to high(TMQrlabel) do
           begin
             TmQRLabel[q]:=TQRLabel.create(rep);
             TmQrLabel[q].parent:=Rep.bands.titleBand;
             TmQrlabel[q].AutoStretch:=true;
             TmQrLabel[q].wordwrap:=true;
             TmQrLabel[q].Caption:= ADBText[q].Text;
             TmQrlabel[q].Font.Assign(ADBText[q].font);
             TmQrlabel[q].left:=formcmTopix(strtoint(AEdit[q].text));
             TmQrLabel[q].Top:=FormcmTopiy(strtoint(BEdit[q].text));
           end;
            rep.print;    Finally
          Rep.free;
        end;
        end;
    end;
     Function TForm1.FormCmtoPix(Len:integer):integer;  //换算
        var
          DC:HDC;
          dpiSize:integer;
        begin
          DC:=GetDC(self.Handle);
          dpiSize:=GetDeviceCaps(dc,LOGPIXELSX);
          Result:=Round(len*(dpisize/25.4));
        end;
     Function TForm1.FormCmtoPiy(Len:integer):integer;
         var
          DC:HDC;
          dpiSize:integer;
        begin
          DC:=GetDC(self.Handle);
          dpiSize:=GetDeviceCaps(dc,LOGPIXELSY);
          Result:=Round(len*(dpisize/25.4));
        end;
      

  6.   

    用FASTREPORT就可以了,因为宽度是固定的,只要计算页面的长度即可.
      

  7.   

    我用过很多方法,但现在只用一种方法:
      用EXCEL打印格式又快又省心,
      把你需要的格式用程序写成EXCEL文件或是把几个打印模版在EXCEL里做好打包到资源文件里用的时候调用。  在EXCEL里做套打时我一般用这么几个步骤
      先将套打的票据用扫描仪出一个300点的文件。
      再将文件做成EXCEL文件的背景
      然后就是画格。
      再就是填充数据了。这样做出来的多试几次就可以出出比较理想的票据了。祝你顺利!
      

  8.   

    楼上的用EXCEL 是个好方法..顶一下
    其实用报表也可以实现的.和什么打印机没太大关系.我用的是自带的报表.可以实现的 就是麻烦了点.需要长时间的调试.如果是连续套打 建议你使用好点的打印机.否则连续打印会出现走纸偏差的