发票打印问题,各位给点儿建议。(100分)

  • 主题发起人 主题发起人 paulannar
  • 开始时间 开始时间
P

paulannar

Unregistered / Unconfirmed
GUEST, unregistred user!
我在做一个发票打印程序,以定义了纸张大小。
请问接下来我该怎么做才能达到发票中项目的精确打印,有没有这方面的控件?
Qreport或FastReport行么?(我的发票存根信息是从数据库中取出的)
delphi打印操作我不是很熟悉,请各位帮帮忙。
谢谢了。
 
你用的是什么打印机? 如果是喷墨打印机或激打的话设页长很麻烦的
QReport和FastReport我都用过,最后还是直接控制(我用的针打)
var
f: file;
assignfile(f, "LPT1");
reset(f);
write("xxxxxxxxx");// 自己算位置(按字符算)
closefile(f);
 
首先得到发票中各项目在票据中的位置, 用尺子量,
得到使用打印机的 分辩率和 英寸 之间的关系, 即 每英寸 多少个点 这个属性,
再将英寸和你量的数据进行转换
最后打印
 
我用的是Epson LQ300和西铁城的一款打印机。
我自定义的纸张大小,走纸没问题。
但我现在设置打印参数后再打印就出问题了。
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),该如何操作?
谢谢了!
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部