wxPython官方文档中文翻译 - 打印框架概述

113 阅读6分钟

官方文档:docs.wxpython.org/printing_fr…

打印框架依赖于应用程序来提供一些类,这些类的成员函数能够响应特定的请求,例如“打印此页”或“此页在文档中存在吗?”。这种方法使得wxPython能够承担起诸如翻页预览、调用打印对话框、创建打印机设备上下文等管理职责:应用程序则可以专注于将信息渲染到设备上下文上。

在大多数情况下,你唯一需要派生的类是wx.Printout;其他所有类都可以按原样使用。

下面将简要描述每个类的作用以及它们是如何协同工作的。

Printout

在应用程序中,文档的打印能力由派生自wx.Printout的类来体现。这个类可根据请求打印一页内容,并且可以传递给wx.Printer对象的Print函数以实际打印文档,或者传递给wx.PrintPreview对象以启动预览功能。一旦定义了wx.Printout的功能,下面的代码展示了启动打印、预览以及打印设置对话框是多么容易。请注意,在打印和预览中都使用了MyPrintout类。所有的预览用户界面功能都由wxPython来处理:

if printing:
    printer = wx.Printer()
    printout = MyPrintout("My printout")
    printer.Print(self, printout, True)

elif preview:
    # 传递两个打印输出对象:一个用于预览,另一个以备可能的打印操作。 
    preview = wx.PrintPreview(MyPrintout(), MyPrintout())
    frame = wx.PreviewFrame(preview, self, "Demo Print Preview",
                            wx.Point(100, 100), wx.Size(600, 650))
    frame.Centre(wx.BOTH)
    frame.Initialize()
    frame.Show(True)

wx.Printout会组装要打印的页面,并(通过你子类中重写的方法)将请求的页面内容写入传递给它的wx.DC对象中。这个wx.DC可以是wx.MemoryDC(用于在屏幕上显示预览图像)、wx.PrinterDC(在Microsoft Windows系统和Mac系统下用于打印),或者是wx.PostScriptDC(在GTK环境下用于打印或生成PostScript格式的输出)。

如果你的窗口类有一个Draw(dc) 例程来进行屏幕渲染,那么你的wx.Printout子类通常会调用这些例程,以便在打印输出上创建图像的各个部分。你的wx.Printout子类还可以自行调用其关联的wx.DC来绘制页眉、页脚、页码等等。

所绘制图像的缩放比例通常在屏幕显示、预览图像以及打印图像之间有所不同。这个类提供了一组名为FitThisSizeToXXX()MapScreenSizeToXXX()GetLogicalXXXRect的例程,可用于设置打印输出设备上下文(DC)的用户缩放比例和原点,这样你的类就能够轻松地将图像映射到打印输出上,而无需深入了解屏幕和打印机的每英寸点数(PPI)以及缩放的细节。

Printer

wx.Printer类使用通用接口封装了依赖于平台的打印功能。在大多数情况下,你无需从wx.Printer派生类;只需像上述示例中那样,在你的打印函数中创建一个wx.Printer对象即可。

PrintPreview

wx.PrintPreview类管理打印预览过程。除其他事项外,它会构造传递给你的wx.Printout子类用于打印的设备上下文(DC),并管理多页的显示、可缩放的预览图像等等。在大多数情况下,你可以直接使用这个类,但你也可以创建自己的子类,例如,用于更改预览窗口的布局或内容。

PrinterDC

wx.PrinterDC类是在Microsoft Windows系统和Mac系统下代表实际打印页面的wx.DC。在打印过程中,这个类的一个对象会被传递给你派生的wx.Printout对象,以便在上面进行绘制。wx.PrinterDC的大小将取决于纸张的方向以及打印机的分辨率。

在打印中有两个重要的矩形区域:页面矩形区域定义了应用程序所看到的可打印区域,并且在Microsoft Windows系统和Mac系统下,它是由打印机指定的可打印区域。(对于PostScript打印,页面矩形区域就是整个页面。)继承的函数wx.DC.GetSize会以设备像素为单位返回页面大小。wx.PrinterDC上的点(0, 0)表示页面矩形区域的左上角;也就是说,页面矩形由Rect(0, 0, w, h) 给出,其中(w, h)是GetSize函数返回的值。

另一方面,纸张矩形区域代表包括不可打印边框在内的整个纸张区域。因此,纸张矩形区域左上角的坐标会有较小的负值,而其宽度和高度会比页面矩形区域的宽度和高度稍大一些。wx.PrinterDC特有的函数wx.PrinterDC.GetPaperRect会返回给定wx.PrinterDC的纸张矩形区域。

PostScriptDC

wx.PostScriptDC类是在GTK以及其他PostScript打印环境下代表实际打印页面的wx.DC。在打印过程中,这个类的一个对象会被传递给你派生的wx.Printout对象,以便在上面进行绘制。wx.PostScriptDC的大小将取决于用于构造它的wx.PrintData

wx.PrinterDC不同,在wx.PostScriptDC中,页面矩形区域和纸张矩形区域之间没有区别;这两个矩形区域都表示整张纸。

PrintDialog

wx.PrintDialog类会弹出标准的打印对话框,通过该对话框你可以选择要打印的页面范围(以及许多其他打印设置,这些设置可能因平台而异)。在创建wx.PrintDialog时,你需要向其提供一个wx.PrintDialogData类型的对象,该对象用于填充对话框中的内容。

PrintData

wx.PrintData类是wx.PrintDialogData类的一个子集,(在内部)用于初始化wx.PrinterDCwx.PostScriptDC。(实际上,一个wx.PrintDatawx.PrintDialogDatawx.PageSetupDialogData的一个数据成员)。从本质上讲,wx.PrintData包含了来自两个对话框中配置wx.PrinterDCwx.PostScriptDC所需的那些信息(例如,纸张大小、纸张方向等)。你可能希望创建这个对象的一个全局实例,以便为应用程序的打印设置提供每次调用之间的持续性。

PrintDialogData

wx.PrintDialogData类包含用户在打印对话框中输入的设置信息。它包含诸如页面范围、份数等等内容。在大多数情况下,你无需访问这些信息;框架会负责向你派生自wx.Printout的对象请求用户所要求打印的页面。

PageSetupDialog

wx.PageSetupDialog类会弹出标准的页面设置对话框,通过该对话框你可以指定纸张方向、纸张大小以及相关设置。在初始化时,你要向它提供一个wx.PageSetupDialogData对象,该对象用于填充对话框内容;当关闭对话框时,这个对象会包含用户所选择的设置,包括纸张方向和(或)页边距。

注意:请注意,在Macintosh(苹果Mac)系统上,原生的页面设置对话框中不包含可让你更改页边距的选项。

PageSetupDialogData

wx.PageSetupDialogData类包含影响页面大小(纸张大小)、方向、页边距等方面的设置。请注意,并非所有平台都会填充所有字段;例如,Microsoft Windows系统下的页面设置对话框允许你设置页边距,而Mac系统的设置对话框则不可以。

通常情况下,你应在程序启动时分别创建一个wx.PrintDatawx.PageSetupDialogData的全局实例,这些实例将包含系统提供的默认设置。每次用户调用wx.PrintDialogwx.PageSetupDialog时,你都要传递这些数据结构,以便初始化对话框的值,并让对话框对其进行更新。然后,框架会查询这些数据结构,以获取诸如打印页面范围(来自wx.PrintDialogData)或纸张大小和(或)页面方向(来自wx.PageSetupDialogData)等信息。