Function ChangePape(const PaperName: string; PaperWidth, PaperLength:integer):Boolean; //改变当前的打印纸张设置 var FormInfos : Array [1..1024] of Form_Info_1; cbNeeded, cReturned ,neededsize: DWORD; i,j:integer; ppo:PRINTER_INFO_2; dev :PDeviceMode; PrintDevice, PrintDriver, PrintPort : array[0..255] of Char; hDMode : THandle; hPrinter : THandle; begin Printer.GetPrinter(PrintDevice, PrintDriver, PrintPort, hDMode); OpenPrinter(PrintDevice, hPrinter, nil); if hPrinter = 0 then raise Exception.Create('联接打印机失败!'); EnumForms(hPrinter, 1, Nil, 0, cbNeeded, cReturned); EnumForms(hPrinter, 1, @FormInfos, cbNeeded, cbNeeded, cReturned ); j := 0; //showmessage(inttostr(cReturned)); for i:= 1 to cReturned do// 通过轮寻找到自定义的纸张的纸张类型排序号 if FormInfos[i].pName =PaperName then j:=i; if j=0 then begin AddCustomPaper(PaperName,PaperWidth,PaperLength); j := cReturned + 1; end; //如无纸张则添加 GetPrinter(hPrinter,2,Nil, 0, @NeededSize); GetPrinter(hPrinter, 2, @ppo, NeededSize, @NeededSize); dev := ppo.pDevMode; dev.dmPaperSize := j; ppo.pDevMode := dev; SetPrinter(hPrinter,2,@ppo,0); //定义打印机列表并选择自定义纸张 Result := True; end;procedure AddCustomPaper(const PaperName: string; PaperWidth, PaperLength:integer); var PrintDevice, PrintDriver, PrintPort : array[0..255] of Char; hDMode : THandle; hPrinter : THandle; FormInfo : TFormInfo1; DevsP:Pointer; begin Printer.GetPrinter(PrintDevice, PrintDriver, PrintPort, hDMode); OpenPrinter(PrintDevice, hPrinter, nil); if hPrinter = 0 then raise Exception.Create('联接打印机失败!'); with FormInfo do begin Flags :=FORM_USER; pName := PChar(PaperName); Size.cx := PaperWidth*100; Size.cy := PaperLength*100; ImageableArea.Left := 0; ImageableArea.Top := 0; ImageableArea.Right :=PaperWidth*100; ImageableArea.Bottom := PaperLength*100; end; //修改纸型,如果没有就新增 if not SetForm(hPrinter, PChar(PaperName), 1, @FormInfo) then AddForm(hPrinter, 1, @FormInfo); //添加纸张 ClosePrinter(hPrinter); end;procedure DeleteCustomPaper(const PaperName: string); var PrintDevice, PrintDriver, PrintPort : array[0..255] of Char; hDMode : THandle; hPrinter : THandle; begin Printer.GetPrinter(PrintDevice, PrintDriver, PrintPort, hDMode); OpenPrinter(PrintDevice, hPrinter, nil); if hPrinter = 0 then raise Exception.Create('联接打印机失败!'); DeleteForm(hPrinter, PChar(PaperName)); ClosePrinter(hPrinter); end;
可以QQ交流或在QQ群内交流 本人QQ:77694361 QQ群:17307502
楼主,你这不是用 FastReport 打印吧?
procedure TForm1.Button1Click(Sender: TObject); var sPage: TfrxComponent; begin sPage := frxReport1.FindObject('Page1'); //这是你要修改的页面的名称 if not Assigned(sPage) then Exit; frxReport1.FileName := '1.fr3'; with (sPage as TfrxReportPage) do begin PaperWidth := 210; //纸张宽度 单位:毫米 PaperHeight := 297; //纸张高度 单位:毫米 end; frxReport1.ShowReport(); end;
var
FormInfos : Array [1..1024] of Form_Info_1;
cbNeeded, cReturned ,neededsize: DWORD;
i,j:integer;
ppo:PRINTER_INFO_2;
dev :PDeviceMode;
PrintDevice, PrintDriver, PrintPort : array[0..255] of Char;
hDMode : THandle;
hPrinter : THandle;
begin
Printer.GetPrinter(PrintDevice, PrintDriver, PrintPort, hDMode);
OpenPrinter(PrintDevice, hPrinter, nil);
if hPrinter = 0 then
raise Exception.Create('联接打印机失败!');
EnumForms(hPrinter, 1, Nil, 0, cbNeeded, cReturned);
EnumForms(hPrinter, 1, @FormInfos, cbNeeded, cbNeeded, cReturned );
j := 0;
//showmessage(inttostr(cReturned));
for i:= 1 to cReturned do// 通过轮寻找到自定义的纸张的纸张类型排序号
if FormInfos[i].pName =PaperName then j:=i;
if j=0 then
begin
AddCustomPaper(PaperName,PaperWidth,PaperLength);
j := cReturned + 1;
end; //如无纸张则添加
GetPrinter(hPrinter,2,Nil, 0, @NeededSize);
GetPrinter(hPrinter, 2, @ppo, NeededSize, @NeededSize);
dev := ppo.pDevMode;
dev.dmPaperSize := j;
ppo.pDevMode := dev;
SetPrinter(hPrinter,2,@ppo,0); //定义打印机列表并选择自定义纸张
Result := True;
end;procedure AddCustomPaper(const PaperName: string; PaperWidth, PaperLength:integer);
var
PrintDevice, PrintDriver, PrintPort : array[0..255] of Char;
hDMode : THandle;
hPrinter : THandle;
FormInfo : TFormInfo1;
DevsP:Pointer;
begin
Printer.GetPrinter(PrintDevice, PrintDriver, PrintPort, hDMode);
OpenPrinter(PrintDevice, hPrinter, nil);
if hPrinter = 0 then
raise Exception.Create('联接打印机失败!');
with FormInfo do
begin
Flags :=FORM_USER;
pName := PChar(PaperName);
Size.cx := PaperWidth*100;
Size.cy := PaperLength*100;
ImageableArea.Left := 0;
ImageableArea.Top := 0;
ImageableArea.Right :=PaperWidth*100;
ImageableArea.Bottom := PaperLength*100;
end;
//修改纸型,如果没有就新增
if not SetForm(hPrinter, PChar(PaperName), 1, @FormInfo) then
AddForm(hPrinter, 1, @FormInfo); //添加纸张 ClosePrinter(hPrinter);
end;procedure DeleteCustomPaper(const PaperName: string);
var
PrintDevice, PrintDriver, PrintPort : array[0..255] of Char;
hDMode : THandle;
hPrinter : THandle;
begin
Printer.GetPrinter(PrintDevice, PrintDriver, PrintPort, hDMode);
OpenPrinter(PrintDevice, hPrinter, nil);
if hPrinter = 0 then
raise Exception.Create('联接打印机失败!');
DeleteForm(hPrinter, PChar(PaperName));
ClosePrinter(hPrinter); end;
本人QQ:77694361
QQ群:17307502
var
sPage: TfrxComponent;
begin
sPage := frxReport1.FindObject('Page1'); //这是你要修改的页面的名称
if not Assigned(sPage) then Exit;
frxReport1.FileName := '1.fr3';
with (sPage as TfrxReportPage) do
begin
PaperWidth := 210; //纸张宽度 单位:毫米
PaperHeight := 297; //纸张高度 单位:毫米
end;
frxReport1.ShowReport();
end;
2、什么系统?
如WIN2000、XP:
控制面板->打印机->文件->属性服务器中增加自定义纸张格式。