function WinNTSetForm(PDevMode: PDeviceMode;Device: PChar; Port: PChar): Boolean;
  var
    hPrinter: THandle;
    pForm: Pointer;
    cbNeeded: DWORD;
    cReturned: DWORD;
    FormInfo1: TFormInfo1;
  begin
    Result := False;
    if OpenPrinter(Device, hPrinter, nil) then
    begin
      pForm := nil;
      EnumForms(hPrinter, 1, pForm, 0, cbNeeded, cReturned);
      GetMem(pForm, cbNeeded); //取pForm的大小并分配内存
      try
        if EnumForms(hPrinter, 1, pForm, cbNeeded, cbNeeded, cReturned) then
        begin
          if DeleteForm(hPrinter, PChar(CustomFormName)) then
            Dec(cReturned); //删除旧的Form
          with FormInfo1 do
          begin
            Flags := 0;
            pName := PChar(CustomFormName);
            Size.cx := AWidth * 100;
            Size.cy := AHeight * 100;
            with ImageAbleArea do
            begin
              Left := 0;
              Top := 0;
              Right := Size.cx;
              Bottom := Size.cy;
            end;
          end;
          if AddForm(hPrinter, 1, @FormInfo1) then
          begin
            Printer.PrinterIndex := Printer.PrinterIndex;
            PDevMode.dmFields := PDevMode.dmFields or DM_PAPERSIZE;
            PDevMode.dmPaperSize := cReturned + 1;
            Printer.PrinterIndex := Printer.PrinterIndex;
            Result := True;
          end;
        end;
      finally
        FreeMem(pForm);
      end;
      ClosePrinter(hPrinter);
    end;
  end;以上代码可以在XP或2000下实现自定义纸张,但是只能是打印机接在本机上才可以,如果是网络打印机的就不行,经过单步跟踪,发现打印机接在本机,AddForm(hPrinter, 1, @FormInfo1) 能返回真值,如果是网络打印机,则AddForm(hPrinter, 1, @FormInfo1)返加假,没办法设置纸张,难道网络打印机就不可能自定义纸张吗?高手们帮帮忙,谢谢!