发票套打的问题,研究了N久都不知道原因,请那个高手帮帮忙!!! ( 积分: 100 )

  • 主题发起人 kongkong
  • 开始时间
K

kongkong

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure SetprintPaper(PageWidth, PaperHeight: integer);
var
Device: array[0..cchDeviceName - 1] of Char;
Driver: array[0..(MAX_PATH - 1)] of Char;
Port: array[0..32] of Char;
hDMode: THandle;
pDMode: PDevMode;
begin
Printer.GetPrinter(Device, Driver, Port, hDMode);
// 获取打印机DevMode 结构的句柄值,存放在hDMode 中
if hDMode <> 0 then
begin
pDMode := GlobalLock(hDMode);
// 获取指向打印机DevMode 结构的// 指针
if pDMode <> nil then
begin
pDMode^.dmPaperSize := 256;
pDMode^.dmPaperLength := PaperHeight;
pDMode^.dmPaperWidth := PageWidth;
pDMode^.dmFields := pDMode^.dmFields or DM_PAPERSIZE;
pDMode^.dmFields := pDMode^.dmFields or DM_PAPERLENGTH;
pDMode^.dmFields := pDMode^.dmFields or DM_PAPERWIDTH;
{ 以上三条语句是对相应的dmFields 成员进行置位。}
ResetDC(Printer.Handle, pDMode^);
// 设置打印机设备环境句柄的值
GlobalUnlock(hDMode);
end;
end;
end;

我用这个函数来设置发票纸张的大小,结果打印出来的实际高度和设置的不相符合。
比如:SetprintPaper(1790,930)结果打印出来的是17.9cm,8.95cm
设置SetprintPaper(1790,950)打印出来的是17.9cm,9.4cm狂郁闷啊!!!
我用的环境是2000 server 打印机爱普生LK1600kiii的。各位救命啊!!!!
 
procedure SetprintPaper(PageWidth, PaperHeight: integer);
var
Device: array[0..cchDeviceName - 1] of Char;
Driver: array[0..(MAX_PATH - 1)] of Char;
Port: array[0..32] of Char;
hDMode: THandle;
pDMode: PDevMode;
begin
Printer.GetPrinter(Device, Driver, Port, hDMode);
// 获取打印机DevMode 结构的句柄值,存放在hDMode 中
if hDMode <> 0 then
begin
pDMode := GlobalLock(hDMode);
// 获取指向打印机DevMode 结构的// 指针
if pDMode <> nil then
begin
pDMode^.dmPaperSize := 256;
pDMode^.dmPaperLength := PaperHeight;
pDMode^.dmPaperWidth := PageWidth;
pDMode^.dmFields := pDMode^.dmFields or DM_PAPERSIZE;
pDMode^.dmFields := pDMode^.dmFields or DM_PAPERLENGTH;
pDMode^.dmFields := pDMode^.dmFields or DM_PAPERWIDTH;
{ 以上三条语句是对相应的dmFields 成员进行置位。}
ResetDC(Printer.Handle, pDMode^);
// 设置打印机设备环境句柄的值
GlobalUnlock(hDMode);
end;
end;
end;

我用这个函数来设置发票纸张的大小,结果打印出来的实际高度和设置的不相符合。
比如:SetprintPaper(1790,930)结果打印出来的是17.9cm,8.95cm
设置SetprintPaper(1790,950)打印出来的是17.9cm,9.4cm狂郁闷啊!!!
我用的环境是2000 server 打印机爱普生LK1600kiii的。各位救命啊!!!!
 
没的办法,需要写设置界面,允许手动对各台机器调整高,宽偏差值,X,Y起始偏差值
再加上可调的奇偶页高度振颤(用来消除积累误差),就可以了
 
to 章慧
小弟比较笨,不懂您说的是什么意思。能不能麻烦您在讲详细点??
谢谢。
 
是不是处定义纸张大小,不能小于打印机所接受的最小值,你可以在打印机属性中对自定义纸张大小进行手工设置。看看其自定义纸张的最小值是多少。
 
你查一下打印机的分辨率吧,应该是这个的问题。不同的打印机的每英寸点数是不一样的。
 
取打印机的打印分辨率:
PointX:=GetDeviceCaps(printer.Handle,LOGPIXELSX) ;
PointY:=GetDeviceCaps(printer.Handle,LOGPIXELSX) ;
 
自由界面和报表的完美解决方案!
http://www.anylib.com
 
多人接受答案了。
 
顶部