Hi:
  最近遇到了一个困惑,如何将一个打印机的打印长度设置到3.2米以上。请大家指点:首先,对打印机设置打印尺寸可以通过SetPrinter API来完成。MSDN中SetPrinter函数的声明如下:
BOOL SetPrinter(  HANDLE hPrinter,  // handle to printer object
  DWORD Level,      // information level
  LPBYTE pPrinter,  // printer data buffer
  DWORD Command     // printer-state command
);
当Level参数的值为9时,pPrinter的值是一个PRINTER_INFO_9类型,PRINTER_INFO_9结构体的定义如下:
typedef struct _PRINTER_INFO_9 {
  LPDEVMODE pDevMode;
} PRINTER_INFO_9, *PPRINTER_INFO_9;
结构体中存放的是指向DEVMODE结构体的指针,而DEVMODE结构中就有设置页面尺寸的字段,如下:
typedef struct _devicemode { 
  BCHAR  dmDeviceName[CCHDEVICENAME]; 
  WORD   dmSpecVersion; 
  WORD   dmDriverVersion; 
  WORD   dmSize; 
  WORD   dmDriverExtra; 
  DWORD  dmFields; 
  union {
    struct {
      short dmOrientation;
      short dmPaperSize;
      short dmPaperLength;
      short dmPaperWidth;
      short dmScale; 
      short dmCopies; 
      short dmDefaultSource; 
      short dmPrintQuality; 
    };
    POINTL dmPosition;
    DWORD  dmDisplayOrientation;
    DWORD  dmDisplayFixedOutput;
  };  short  dmColor; 
  short  dmDuplex; 
  short  dmYResolution; 
  short  dmTTOption; 
  short  dmCollate; 
  BYTE  dmFormName[CCHFORMNAME]; 
  WORD  dmLogPixels; 
  DWORD  dmBitsPerPel; 
  DWORD  dmPelsWidth; 
  DWORD  dmPelsHeight; 
  union {
    DWORD  dmDisplayFlags; 
    DWORD  dmNup;
  }
  DWORD  dmDisplayFrequency; 
#if(WINVER >= 0x0400) 
  DWORD  dmICMMethod;
  DWORD  dmICMIntent;
  DWORD  dmMediaType;
  DWORD  dmDitherType;
  DWORD  dmReserved1;
  DWORD  dmReserved2;
#if (WINVER >= 0x0500) || (_WIN32_WINNT >= 0x0400)
  DWORD  dmPanningWidth;
  DWORD  dmPanningHeight;
#endif
#endif /* WINVER >= 0x0400 */
} DEVMODE;
问: dmPaperLength 和 dmPaperWidth 是以1/10mm为单位的,而 dmPaperLength 和 dmPaperWidth定义的为short类型,其取值范围为 -32768 ~ 32767之间。因而可以得出每张纸的最大打印幅面为 宽:3.2767m * 高: 3.2767m。而市面上很多大幅面的打印机,单张可以打印到超过3米以上。对于超过32767这样的数据是如何正确的设置到打印机的呢?如Epson Stylus Pro 4880C,它的最大长度可以设置到15m。打印机操作系统 打打印机操作系统SetPrinterAPI