我在做一个发票打印程序,以定义了纸张大小。
请问接下来我该怎么做才能达到发票中项目的精确打印,有没有这方面的控件?
Qreport或FastReport行么?(我的发票存根信息是从数据库中取出的)delphi打印操作我不是很熟悉,请各位帮帮忙。
谢谢了。我自定义的纸张大小,走纸没问题。
但我现在设置打印参数后再打印就出问题了。
Var
  PrnDevice, PrnDriver, PrnPort: Array[0..255] Of Char;
  PrnHandle: THandle;
  PrnMode: PDeviceMode;
Begin
  Printer.GetPrinter(PrnDevice, PrnDriver, PrnPort, PrnHandle);
  If PrnHandle = 0 Then
    Raise Exception.Create('无法获取系统打印机信息!')
  Else
    Begin
      PrnMode:= GlobalLock(PrnHandle);
      With PrnMode^ Do
        Begin
          //打印份数
          dmFields:= dmFields Or dmCopies;
          dmCopies:= 1;          //打印方向
          dmFields:= dmFields Or dmOrientation;
          dmOrientation:= DMORIENT_PORTRAIT;          //纸张大小
          dmFields:= dmFields Or dmPaperSize;
          dmPaperSize:= DMPAPER_USER;          dmFields:= dmFields Or dmPaperLength;
          dmPaperLength:= 2970;
          
          dmFields:= dmFields Or dmPaperWidth;
          dmPaperWidth:= 2100;
          
          dmFields:= dmFields Or PrnMode^.dmLogPixels;
          dmLogPixels:= 300;
          ResetDC(Printer.Handle, PrnMode^);
        End;
      End;
End;
进行上面的操作后再打印走纸就不准确了,变得比以前长了很多。
请问是不是 dmLogPixels:= 300; 的问题。
我该怎么计算这个参数?另外,我想用代码建立自定义纸大小,写入注册表(Win9X and Win2K),该如何操作?
谢谢了!

解决方案 »

  1.   

    建议使用Report machine ,可以在运行时调整打印格式,这样的话比较好设置
    如果想要Report machine的源码可以联系[email protected]
      

  2.   

    Qreport也可以做到,其实发票的打印和打印机的精度有很大的关系,这在我得实际应用中遇到过很多,明明16*18MM的发票有的牌子打印机非要自定义成16*19.5mm才能走纸准确,这不是编程能解决的。
      

  3.   

    Qreport需要下载3.0以上版本才可以在运行时调整打印格式,如果打连续纸的话,不好在程序中控制纸张大小,原因如上
    --其实发票的打印和打印机的精度有很大的关系,这在我得实际应用中遇到过很多,明明16*18MM的发票有的牌子打印机非要自定义成16*19.5mm才能走纸准确,这不是编程能解决的。
      

  4.   

    如果有定位准确,而票面又比较简单,还是用printer对象吧.