打印
打印对于许多 Windows 程序员来说是十分棘手的问题。
Delphi 简化了打印时用户所必须了解的大部分内容。用户可以很轻松地写出简单的打印程序来输出文本和位图化了的图像。
对于更为复杂的打印,仅需了解几个要领和技术,用户就可以实现任何类型的自定义打印。
当了解了这些后,打印也就不那么困难了。
Delphi 的TPrinter对象封装了 Windows 的打印引擎,为程序员做了大量原本需要亲自做的工作。
本章告诉用户怎样用TPrinter来完成各种打印作业。用户可以看到一个简单的例子,
从中可以了解到创建高级打印程序的技术,而这些技术正是用户成为打印高手的起点。
5.1 TPrinter 对象
Delphi 中的 TPrinter类可以方便地实现通常的打印任务。通过Printer 全局函数可以返回TPrinter类的一个对象,该对象在Printers单元中定义。
可以把Printer 全局函数看作一个全局变量,并利用这个全局变量来与打印机进行打印操作。
利用 Printer 来实现打印的一般过程如下:
(1)调用BeginDoc 过程向打印机发送一个打印作业(此时还没有在打印机上开始打
印)。
(2)通过一个 Text 变量或调用 Canvas 对象方法建立打印输出。
(3)调用 EndDoc过程结束当前的打印作业,该打印作业开始在打印机上打印。
(4)如果出现问题,调用 Abort过程取消当前打印的作业。
表5-1 所示是 TPrinter对象的几个常用属性:
表5-1 TPrinter对象的常用属性
属性 作用
Aborted 判断是否中止打印作业
Canvas 画布属性
Capabilities 当前打印机驱动设备的设置信息
Copies 打印的份数
Fonts 字体属性
Handle 打印机句柄
Orientation 纸张的方向:横向或纵向
PageHeight 纸张的高度
PageNumber 当前打印的页数
PageWidth 纸张的宽度
Printers 系统中安装的所有打印机
Printing 标识是否正在进行一个打印作业
PrinterIndex 打印机属性中当前打印机的索引值
表5-2 所示是 TPrinter对象的几个常用方法
表5-2 TPrinter的方法
方法 作用
Abort 中止正在打印的打印作业
BeginDoc 向打印机发送一个打印作业
EndDoc 结束当前的打印作业并关闭文本文件变量
GetPrinter 获得当前打印机序号
NewPage 开始新的一页并增加 PageNumber属性
Refresh 更新字体和打印机的属性
通常,在打印前要进行打印预览。在打印预览的时候,往往要将打印的结果在屏幕上显示出来。
这时,就要注意屏幕的分辨率和打印机的分辨率的差别了。读取屏幕信息可以通过全局变量 Screen 来实现,Screen 为TScreen类的一个实例,在创建工程的时候就自动创建了,并在程序开始运行时读取了屏幕的一些设置信息。
值得注意的一点是 TPrinter.Canvas。TPrinter.Canvas 对于窗体来说像一个画布,在它上面可以显示文本和图形。
不同的是, TPrinter.Canvas 表示的是打印输出的画布,而非显示用的画布。大多数用来显示文本、图像和画图的程序可以用同一种方式来打印输出。
但是,在打印时必须考虑到其中的不同之处:
¾ 在屏幕上绘画是动态的,可以擦去在屏幕上输出的内容。而向打印机中输出则不那么灵活,凡是向 TPrinter.Canvas 输出的内容将被打印机打印出来。
¾ 在屏幕上