我用的是15×11的纸张。
在delphi中自定义设置381×279.4,可打印的时候只显示左边部分。为何?

解决方案 »

  1.   

    参考这个  
     
    var    hDMode:  THandle;  
       PDMode:  PDEVMODE;  
     
       Printer.GetPrinter(Device,  Driver,  Port,  hDMode);  
     
       if  hDMode  <>  0  then  
       begin  
           pDMode  :=  GlobalLock(hDMode);  
           if  pDMode  <>  nil  then  
           begin  
                   pDMode^.dmFields  :=  DM_PAPERSIZE  or  DM_PAPERWIDTH  or  DM_PAPERLENGTH;  
                   pDMode^.dmPaperSize  :=  DMPAPER_USER;  
                   pDMode^.dmPaperWidth  :=  APaperWidth;  
                   pDMode^.dmPaperLength  :=  APaperHeight;  
     
                   pDMode^.dmFields:=pDMode^.dmFields  or  DM_ORIENTATION;  
                   pDMode^.DMORIENTATION:=  Direct;  
           end;  
       end;  
    //打印机设置的纸张大小  
    ---------------------------------------------------------------  
     
    还有试试这个吧  在执行打印前调用以下函数:  
    procedure  SetPaperSize(X,  Y:  Integer);  
    //  单位是0.1mm  
    //  A4时  Printer.Pagewidth:=1440;    A5时  Printer.Pagewidth:=1049;  
    //  B5时  Printer.Pagewidth:=1290;    16K时  Printer.Pagewidth:=1035;  
    //  lq1600宽行打印机这个值宽度最大为42cm左右,  长度大约2m。  
    //改变devicemode结构  
    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  (x  =  0)  or  (y  =  0)  then  
               begin  
                   {Set  to  legal}  
                   pDMode^.dmFields  :=  pDMode^.dmFields  or  dm_PaperSize;  
                   {pDMode^.dmPaperSize  :=  DMPAPER_LEGAL;  changed  by  wulianmin}  
                   pDMode^.dmPaperSize  :=  DMPAPER_FANFOLD_US;  
               end  
               else  
               begin  
                   {Set  to  custom  size}  
                   pDMode^.dmFields  :=  pDMode^.dmFields  or  
                       DM_PAPERSIZE  or  
                       DM_PAPERWIDTH  or  
                       DM_PAPERLENGTH;  
                   pDMode^.dmPaperSize  :=  DMPAPER_USER;  
                   pDMode^.dmPaperWidth  :=  x  {SomeValueInTenthsOfAMillimeter};  
                   pDMode^.dmPaperLength  :=  y  {SomeValueInTenthsOfAMillimeter};  
               end;  
               {设定纸张来源}  
               pDMode^.dmFields  :=  pDMode^.dmFields  or  DMBIN_MANUAL;  
               pDMode^.dmDefaultSource  :=  DMBIN_MANUAL;  
     
               GlobalUnlock(hDMode);  
           end;  
       end;  
       Printer.PrinterIndex  :=  Printer.PrinterIndex;  
       //以下开始打印  
       Printer.BeginDoc;  
       Printer.Canvas.TextOut(100,100,  'Test  1');  
       Printer.EndDoc;  
    end;  
      

  2.   

    还有我机子的服务器属性上有381*279.4这种格式,可在quickreport中没有。
    自定义纸张不起作用,我用的是xp
      

  3.   

    也碰到过类似问题你得先用Custom Size 设置一次,设为381*279.4, Apply,再换成 Default Size 设置一次,再Apply,Ok还有你的打印机,要设为纵向打印(默认打印机)