HP LaserJet 5000 Series PCL 6 打印机的自定义纸张问题, 200分(100分)

  • 主题发起人 主题发起人 YaoChangLi
  • 开始时间 开始时间
Y

YaoChangLi

Unregistered / Unconfirmed
GUEST, unregistred user!
用Delphi 5编写了一个设置打印机纸张尺寸的程序,在HP 500和EPSON LQ-1600K等打印机上
都可以实现自定义纸张大小的设定,但到了HP LaserJet 5000 Series PCL 6打印机上,自
定义的纸张尺寸不管用,HP LaserJet 5000 Series PCL 6好象只接受标准纸张类型,
如:DMPAPER_A4, DMPAPER_B4,DMPAPER_LETTER...等,
如设定成:

var
PDevMode: PDeviceMode;
...
...
PDevMode^.dmFields:= DM_PAPERSIZE or DM_PAPERWIDTH or DM_PAPERLENGTH;
PDevMode^.dmPaperSize:= DMPAPER_USER;(或是0)
PDevMode^.dmPaperWidth:= {自定义宽度};
PDevMode^.dmPaperLength:= {自定义高度};
...
...
自定义的宽度和高度肯定在有效范围内,但是,打印机还是原来的默认尺寸,不知
是何缘故,是不是HP LaserJet 5000 Series PCL 6打印机不支持自定义纸张(但是,
用打印机对话框可以定义它的尺寸),可我想在程序中定义,怎么办?
 
>>PDevMode^.dmPaperSize:= DMPAPER_USER;(或是0)

将当前打印机纸张变为自定义,必须设置成为256.OK!

》》》PDevMode^.dmPaperSize:= 256;
 
DMPAPER_USER 是个常量,它的值等于256,它在Windows.pas中定义为
const
DMPAPER_USER = 256;
 
请把你打印那一段写全我在HP LaserJet 8000 Series PCL 6中没问题
 
procedure TForm1.Button1Click(Sender: TObject);
var
Device, Drive, Port: array[0..255] of Char;
TDevMode: THandle;
PDevMode: PDeviceMode;
begin

Printer.Refresh;
Printer.PrinterIndex:= Printer.PrinterIndex;
Printer.GetPrinter(Device, Drive, Port, TDevMode);
PDevMode:= GlobalLock(TDevMode);
PDevMode^.dmFields:= DM_PAPERSIZE or DM_PAPERWIDTH or DM_PAPERLENGTH;
PDevMode^.dmPaperSize:= 256;
PDevMode^.dmPaperWidth:= 1000;
PDevMode^.dmPaperLength:= 1000;
ResetDC(Printer.Handle, PDevMode^);
GlobalUnLock(TDevMode);
end;

 
附加功能 将问题提前
 
激光打印机中自定义纸张参数不能使用,我以前采取另一种方法,
比如在程序中先定义为A4纸张,然后重新设置纸张大小,这样就
可以实现自定义纸张了。
 
多人接受答案了。
 

Similar threads

I
回复
0
查看
811
import
I
I
回复
0
查看
651
import
I
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部