首页
社区
课程
招聘
[旧帖] [求助]如何给打印机设置一个打印长度超过32767mm的问题 0.00雪花
发表于: 2013-3-12 17:36 2404

[旧帖] [求助]如何给打印机设置一个打印长度超过32767mm的问题 0.00雪花

2013-3-12 17:36
2404
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。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
自己顶一下!
2013-3-13 08:51
0
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
自己再顶一下!
2013-3-14 09:09
0
雪    币: 233
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
pos小票打印机的页面长度应该可以达到3米.
你可以了解一下,report machine 报表设计器
http://download.csdn.net/detail/unicorn_dsx/2866397 演示demo
2013-3-14 13:42
0
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
谢谢unicorndsx 的回复。对于小票打印机,程序可以不用理会打印长度,可以打印的无限长,完全根据要打印的内容。因为其没有单张打印幅面的说法。而我主要是针对的办公打印机或大幅面的打印机。
2013-3-14 16:45
0
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
再顶,等高手来解决。
2013-3-18 13:11
0
游客
登录 | 注册 方可回帖
返回
//