打印机走纸不正确如何解决? ( 积分: 200 )

  • 主题发起人 主题发起人 西部游侠
  • 开始时间 开始时间
西

西部游侠

Unregistered / Unconfirmed
GUEST, unregistred user!
现象:
一个营业收费软件,原来运行于Windows98/WindowsME操作系统下,打印连续纸格式套打走纸没问题。而现在的操作系统升级为Windows2000/WindowsXP后,打印票据套打时走纸不正确了。打印完一张票据后,打印机走纸大概一张A4纸的距离,然后打印下一张票据。票据大小为自定义大小,18.9*8.79cm。已经在计算机中按票据大小定义了新的纸张类型,而且也将当前所有的默认纸张选择为此自定义纸张。所用打印机为EPSON-680K票据打印机。
编程语言为DELPHI7,所用的报表控件是QuickReport。
此情况到底是打印机的原因还是程序的原因呢?
请高手指教。
 
现象:
一个营业收费软件,原来运行于Windows98/WindowsME操作系统下,打印连续纸格式套打走纸没问题。而现在的操作系统升级为Windows2000/WindowsXP后,打印票据套打时走纸不正确了。打印完一张票据后,打印机走纸大概一张A4纸的距离,然后打印下一张票据。票据大小为自定义大小,18.9*8.79cm。已经在计算机中按票据大小定义了新的纸张类型,而且也将当前所有的默认纸张选择为此自定义纸张。所用打印机为EPSON-680K票据打印机。
编程语言为DELPHI7,所用的报表控件是QuickReport。
此情况到底是打印机的原因还是程序的原因呢?
请高手指教。
 
建议使用这个函数在程序里设置自定义纸张大小。
procedure SetPaperSize(Height, Width: integer);
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
if (Height = 0) or (Width = 0) then
begin
pDMode^.dmFields := pDMode^.dmFields or dm_PaperSize;
pDMode^.dmPaperSize := DMPAPER_FANFOLD_US;
end
else
begin
pDMode^.dmFields := pDMode^.dmFields or DM_PAPERSIZE or DM_PAPERWIDTH or
DM_PAPERLENGTH;
pDMode^.dmPaperSize := DMPAPER_USER;
pDMode^.dmPaperWidth := Width;
pDMode^.dmPaperLength := Height;
end;
GlobalUnlock(hDMode);
end;
end;
Printer.PrinterIndex := Printer.PrinterIndex;
end;
 
楼上所写的看不明白。
在程序中我是直接用的QuickReport这个报表控件,纸张大小已经在这个控件上作了设置。而且在操作系统中也添加了18.9*8.79大小的新的自定义纸张类型。
程序原来在98下运行是没问题的。
升级操作系统到XP/2000后才出现这种现象的。
我的意思是说,是不是QuickReport这个控件有什么问题,在98下正常而在XP下有BUG之类。
如果是QuickReport控件的原因的话,是不是有这个控件的补丁或高版本可以解决这一问题。
急!!!!
 
QuickReport升下级先,delphi自带的QuickReport版本很低的
 
看了DELPHI自带的QuickReport的版本是比较低的,3.0版本。
从网上下载了QuickReport4.5,如何安装呢?
 
loco说的没错,那函数挺好用的
 
关于loco所说的那个函数,哪位可否提供一个例程来,可以完整运行的一个自定义纸张大小的报表打印。谢谢了。
邮箱地址:zhangyong7369@hotmail.com
179049070@qq.com
 
我在用别的程序编程时遇到这样的问题。如果程序不是在多台电脑上应用,可以在使用
这个程序的电脑上重新编译一下应用程序。这时你会发现在你原来那上台定义的自定义
纸在这台上变成了别的格式。这就是问题的所在。也许你重新做一下自己的电脑可以解决
这个问题。
 
tian2048说得有道理,自定义纸张每台机器靠手工设的话,可能导致这种情况,你编程序的那台机器最好也是2000/XP,调试成功后,把这台机器里注册表中关于自定义纸张部分复制到其他机器中,这样应该可以。
 
是操作系统的字体差异造成的.建议将大小用点来设而不用cm.自己动一下脑筋
 
loco的procedure SetPaperSize(Height, Width: integer);
Height, Width的单位是什么呀?
点?mm?
 
跟打印機的驅程有關,跟quickreport也有關,改用fastreport吧,
另,打印機的驅程也要對,否則也不行.
經驗之談.
 
应该是这样:
设置纸张:打印机和传真->选中打印机->文件菜单->服务器属性
我用的是Windows 2003,XP可能差不多也是这样
 
后退
顶部