动态调整打印机纸张大小

动态调整打印机纸张大小

ID:41492375

大小:34.50 KB

页数:4页

时间:2019-08-26

动态调整打印机纸张大小_第1页
动态调整打印机纸张大小_第2页
动态调整打印机纸张大小_第3页
动态调整打印机纸张大小_第4页
资源描述:

《动态调整打印机纸张大小》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、动态调整打印机纸张大小江苏省昆山市地方税务局(215300)陆陈军信息管理系统中经常要提供各种打印功能,例如报表打印、凭证打印以及发票打印。在这些打印过程中所需要纸张的大小往往是不一致的,例如,打印报表有可能使用A4纸或A3纸,打印凭证或发票可能需要将打印纸张设置成自定义大小。如果在同一台打印机上打印这些内容,那么就应该针对不同的打印内容设置不同的纸张尺寸。显然如果用手动的方法来设置打印机的纸张尺寸是件很麻烦的事,最好的方法是让程序动态地修改打印机的纸张尺寸。解决问题的思路通过查阅API函数技术文档可知,每个打印机都拥有唯一的一个叫做DevMode的结构

2、,与打印机相关的各项参数被存放在这个结构中。通过对DevMode结构的分析,发现与设置打印机纸张大小有关的结构成员有四项:dmFields、dmPaperSize、dmPaperLength以及dmPaperWidth。dmFields是DevMode的标志位初始化部分,如果要修改结构中的某些成员,那么dmFields中相应位应被置位。dmPaperSize表示打印机当前默认的打印纸张的大小,若要设置自定义纸张该项应为0(注,上述解释是根据微软提供的技术文档,但是在Delphi中应将该成员设置成$100即256)。dmPaperLength和dmPape

3、rWidth只是在设置自定义大小纸张时使用,分别表示纸张的长度和宽度。如何对打印机的DevMode结构进行修改呢?无非采用两种方法,一种是利用Delphi提供的TPrinter类中的某些方法,还有一种是调用与打印有关的API函数。下面就以Delphi为开发工具,以Epson1600K为默认打印机,用两种不同的方法来实现这一功能。方法一:利用Delphi的TPrinter类TPrinter类是Delphi对Windows打印处理系统的封装,它能够帮助程序员在开发打印程序时尽可能地减少工作量。在程序中使用TPrinter,只要在单元的Use子句后面添加Pri

4、nters即可。当前打印机的DevMode结构的句柄可以通过调用Tprinter类中的GetPrinter方法来获取。当程序获得DevMode结构的句柄后,就调用GlobalLock函数来得到指向该结构的指针,随后可对结构中的某些成员进行修改。下面就举一个例子来说明这一问题:假设当前打印机的默认纸张尺寸是A3纸,现在要打印长度为114mm、宽度为190mm的纸张。为了简单起见,我们只在Form1上放置一个Button1按钮,增加一个OnClick事件,在Use子句后添加Printers。程序的代码如下:ProcedureTForm1.Button1Cli

5、ck(Sender:TObject);varDevice:array[0..cchDeviceName-1]ofChar;Driver:array[0..(MAX_PATH-1)]ofChar;Port:array[0..32]ofChar;hDMode:THandle;pDMode:PDevMode;beginPrinter.GetPrinter(Device,Driver,Port,hDMode);//获取打印机DevMode结构的句柄值,存放在hDMode中ifhDMode<>0thenbeginpDMode:=GlobalLock(hDMode)

6、;//获取指向打印机DevMode结构的//指针ifpDMode<>nilthenbeginpDMode^.dmPaperSize:=256;//如果要将当前打印机纸张变为自定义dmPaperSize必须设置成256pDMode^.dmPaperLength:=1140;pDMode^.dmPaperWidth:=1900;pDMode^.dmFields:=pDMode^.dmFieldsorDM_PAPERSIZE;pDMode^.dmFields:=pDMode^.dmFieldsorDM_PAPERLENGTH;pDMode^.dmFields:

7、=pDMode^.dmFieldsorDM_PAPERWIDTH;{以上三条语句是对相应的dmFields成员进行置位。}ResetDC(Printer.Handle,pDMode^);//设置打印机设备环境句柄的值GlobalUnlock(hDMode);end;end;{下面的代码是为了测试打印机是否按190*114纸张大小来打印}withPrinterdobeginBeginDoc;Canvas.TextOut(10,10,‘Hello,MyFriend!');EndDoc;end;end;方法二:利用有关打印的WindowsAPI函数解决问题的思

8、路和第一种方法类似,首先要获取当前打印机的DevMode结构的指针,然后再对该结

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。