admin 管理员组

文章数量: 887021


2024年1月17日发(作者:struts2 spring)

VB环境下打印机的控制

VB提供了两种方式的打印控制。一种是通过打印机驱动程序,以页为基本打印单位,实现高精度打印字符、图形、图像、表格等。另一种是直接向打印机发送数据,以行为单位实现高速字符打印,此法还能通过发送控制指令对打印机实现完全的控制。

一、通过驱动程序控制打印

这是最常用的方式,因为与打印机无关,所以适应于任何类型的打印机。

㈠使用Printer对象

Printer对象是一个独立于打印机设备的封装,它可以代表不同的打印机,初始时,Printer对象为系统缺省的打印机,Printer对象具备例如:ColorMode、Copies、Duplex、Printquality等控制打印机特征的属性,提供了Newpage、EndDoc、KillDoc等控制打印过程的方法,以及大多数由窗体和图片框控件提供的图形属性和方法如:Currentx、Currenty、Textwidth、Textheight、Print、Pset、Line、PaintPicture和Circle等方法,它还拥有Font的所有属性。实现高分辨率的打印就是通过控制Printer对象的上述属性和方法完成的。

1.打印机的设置

若系统有多个打印机驱动,如果打印时没指定打印机,则选默认打印机。如果要用非默认打印机,可用Set

Printer=Printers(N)来实现。

2.打印纸张的定义

纸张的大小用Printer的PaperSize属性,但设置的纸张必须打印机支持,故最好设普遍使用的纸张,如A4等。

纸张的方向用Printer的Orientation属性, 0为横向,1为纵向。

纸张尺寸的计量单位用Printer的ScaleMode属性来设置。

下面的代码就是将纸张设为A4纵向、以毫米为计量单位。

ize = vbPRPSA4

ation = 1

ode = vbMillimeters

3.分页控制

Printer对象进以页为基本单位,分页控制可用Printer对象的NewPage(打印新的一页,CurrentX、CurrentY置为新页的左上角,可完成多页功能。)、EndDoc(将打印任务加入打印机队列)、KillDoc(取消打印任务)控制打印过程的。一般情况下,打印程序完成多页打印时会多次执行

NewPage,结束时执行一次EndDoc将打印任务加入打印机队列。如果你在NewPage后,立即使用EndDoc,VB则不会打印额外的空白页。如果希望显示空白页,则可在新的一页上只使用输出空格等空字符即可。

4.打印内容与定位

打印内容前应先定位,Printer对象的CurrentX与CurrentY属性可定位,若不定位,则从上次打印结束位置开始。

当定位好后,就可以使用Printer对象的Print方法进行内容打印。

5.打印字体设置

字符字体的设置,可用Printer对象的Font子对象,它有Name与Size等属性来设置字体与大小。

下面给出打印的部分代码:

㈡使用窗体的PrintFrom方法

若对打印质量要求不高,可直接用VB窗体的Printform方法实现打印。此法简单、易用且功能强大,只需一行代码就能打印所有内容。

实现的方法就是:先将要打印的内容在窗体上显示出来,然后调用该窗体的PrintForm方法即可。其语法格式为:[窗体名] .PrintForm 。若窗体中有图形,则应将窗体的AutoRedraw属性设为真。

此法虽简,但消耗内存大、打印粗糙、速度慢,尤其是带有滚动条的图像,只能打印当前可视的区域。

二、直接向打印机发送打印数据

VB还可以文件方式直接向打印机端口写入数据,以实现底层控制打印机。

1.打印数据

基本方式是:

2.关于针式打印机的进纸与退纸问题

针式打印机现在主要用于连续多联票据打印,使用直接向打印机发送数据的方式控制很方便实现自动进/退纸与切纸。但各种针式打印机支持的控制指令不完全一样,为了加强程序的通用性,应选用Epson兼容指令。因大多针式打印机都支持Epson兼容指令集。

总之, VB实现打印的方法较多。在实际开发中应该按需选用,一般对于打印质量要求不高、打印内容较少、为了控制的简便,可用窗体的PrintForm方法;若对质量要求高、内容较多、需精确定位等,应选Printer对象;多联票据类打印则用文件访问方式。


本文标签: 打印 打印机 控制 实现