
3.3 打印机输出
在基于Windows的应用程序操作中,打印是最复杂的任务之一。VB应用程序的打印输出有两种方式:直接输出与窗体输出。所谓直接输出,就是将输出内容直接送往打印机。而窗体输出则是先将内容输出在窗体中,然后将窗体上所显示的内容通过打印机输出。
3.3.1 直接输出
使用Printer对象的Print方法,可以直接输出。与窗体或图片框一样,Printer对象是一个与设备无关的图片空间,支持用Print、PSet、Line、PaintPicture和Circle方法来创建文本和图形。窗体或图片框中几乎所有与文本和图形有关的属性、方法,Printer对象都可以使用。
【例3-12】下述代码将在打印机中直接打印出信息:

上述过程中的属性、方法在前面大都已作介绍,只是加上了对象名Printer。因此属性的设置针对打印机,而Print方法中的字符串也是送往打印机的。
代码中的EndDoc方法以及其他Printer对象特有的属性和方法介绍如下。
1.Printer对象的属性
1)刻度(Scale)属性,如表3-13所示。
表3-13 刻度属性

2)定位属性:就像为窗体和图形框设置属性一样,可为Printer对象设置CurrentX和CurrentY属性。这两个属性决定Printer对象当前页中的输出位置。
3)Copies属性:返回或设置需要打印的份数。在设计时不可用。
4)Duplex属性:返回或设置一个值,以决定是否要双面打印(若打印机支持该功能)。在设计时不可用。
5)Page属性:返回当前页号。VB保持一个已打印页数的计数器,它从应用程序开始或从在Printer对象上上次使用EndDoc语句起计数。在下述情况下该计数器从一开始并每次加一:使用NewPage方法或使用Print方法并且要打印的文本与当前页容纳不下。
6)PaperSize属性:返回或设置一个值,该值指出当前打印机的纸张大小。在设计时不可用。
7)PrintQuality属性:返回或设置一个值,该值指示打印机的分辨率。设计时不可用。
8)Zoom属性:该属性定义按原来的百分之多少输出。默认值为100,指定输出将按实际尺寸的100%来打印。可利用Zoom属性使打印页比实际纸页大一些或小一些。例如,将Zoom属性设置为50,可使打印页看起来只是实际打印纸页长和宽的50%。
也可用TextHeight和TextWidt方法在Printer对象中定位文本。
2.Printer对象的方法
1)EndDoc方法:用于终止发送给Printer对象的打印操作,将文档释放到打印设备或后台打印程序。
说明:如果在运行NewPage方法后立即调用EndDoc,不会打印额外的空白页。
2)KillDoc方法:用于立即终止当前打印作业。如果操作系统的打印管理器正在处理该打印作业(打印管理器正在运行并且允许后台打印),那么KillDoc将删除当前打印作业并且使打印机不接收任何信息。如果打印管理器不是正在在处理该打印作业(没有选用后台打印),部分或全部数据可能在KillDoc生效前已发送到打印机。此时,打印机驱动程序将尽可能使打印机复位并终止该打印作业。
3)NewPage方法:用以结束Printer对象中的当前页并前进到下一页。NewPage前进到下一个打印机页,并将打印位置重置到新页的左上角。
说明:调用NewPage时,它将Printer对象的Page属性加1。
3.3.2 窗体输出
使用窗体的PrintForm方法可以将窗体中的所有信息传送到打印机。
要用PrintForm方法打印应用程序中的信息,需先将该信息显示在窗体中,然后再用PrintForm打印窗体。语法格式为
[<窗体名>.]PrintForm
若省略窗体名称,则Visual Basic打印当前窗体。PrintForm打印窗体的全部内容,即使窗体的某部分在屏幕上见不到。打印结束后,PrintForm调用EndDoc方法清空打印机。
【例3-13】修改上例,先将信息显示在窗体,然后在打印机中打印出信息:

说明:
1)需要将AutoRedraw属性设置为True,才能将文本与图形打印出来。
2)PrintForm方法是应用程序打印的最简便的方法。但是打印效果可能不如直接打印。因为前者按用户屏幕的分辨率传送信息到打印机(每英寸打印96点),即使打印机有更高的分辨率(对于激光打印机,每英寸打印300点),结果也不会更好。