一、方法概述

  为了在屏幕上模拟打印效果,我们使用VB的一个窗体来模拟一张打印纸。在VB中,每一个窗体都有一个PrintForm方法。使用PrintForm方法可以把一个窗体的内容完全一样地通过打印机打印出来。由于PrintForm方法在打印窗体内容的时候,对于窗体内的文字和图形都是同样地打印。所以通过简单的编程,使用PrintForm方法可以非常方便地实现图文混合打印。

  具体的方法是:  

  ①、确定用户可以使用的显示与打印双功能字模

  “所见即所得”程序中用户可以使用的字模必须是同时支持Windows的显示设备和打印设备的双功能字模。只有这些字模才可以在屏幕和打印机上产生一样的效果。因此,程序必须首先获得这些显示与打印双功能字模的名称。  

  ②、在屏幕上设置“纸张”窗体的大小

  通过读取Windows打印管理器纸张尺寸的设置,在VB里建立一个与打印纸具有同样尺寸比例关系的窗体,作为屏幕上模拟打印效果的“纸张”,让用户在屏幕上就可以看到文字和图形在打印纸上的位置分布。  

  ③、用户在屏幕“纸张”上模拟打印效果

  在模拟打印的窗体中通过使用Print、Line、Circle等方法绘制文字和图形的,还可以使用图形框、Graph.VBX、OLE等控件绘制图形、统计图表、公式、艺术字型等等。  

  ④、将屏幕“纸张”的内容输出到打印机

  使用窗体的PrintForm方法把第③步所绘制的文字和图形输出到打印机,得到和屏幕显示一模一样的打印拷贝,实现“所见即所得”。  

  二、打印机字模和显示器字模的精确匹配

  Windows的字模分为两类:打印机字模和显示器字模。各种TrueType字模(如宋体、黑体字模)都是显示与打印双功能字模。其他的非TrueType字模就只能用于显示或打印。

  如果在模拟打印窗体的文字输出中使用了只能用于显示的字模,那么当PrintForm方法执行的时候,Windows就只能在打印字模中查找一个尽量和这个显示字模字型匹配的字模来进行打印。这样将导致得到的打印拷贝与屏幕显示一致。

  为了使程序获得“所见即所得”的能力,必须在窗体输出中使用显示与打印双功能字模。因此,程序获得“所见即所得”能力的一个关键是:确保在屏幕输出中只使用显示与打印双功能字模。

  在VB中提供了两个全局对象:屏幕对象Screen和打印机对象Printer。两个对象都提供了FontCount属性和Fonts属性。FontCount属性提供了可使用字模的数量,而Fonts属性提供了可使用字模的名称。在程序中,我们可以取出Screen对象和Printer对象所共同拥有的字模,这些字模就是所有的显示与打印双功能字模。具体的程序如下:

  首先设置一个列表框,取名List1,然后调用下面的GetFont函数,在List1中就存放所有显示与打印双功能字模的名称。  

  Sub GetFont()
   For i = 0 To Screen.FontCount - 1
   For j = 0 To Printer.FontCount - 1
   If Screen.Fonts(i) = Printer.Fonts(j) Then
   List1.AddItem (Screen.Fonts(i))
   End If
   Next j
   Next i
   End Sub