查看源代码 wxPrintout (wx v2.4.3)

此类封装了打印应用程序文档的功能。

必须派生一个新类并重写成员,以响应诸如 OnPrintPage()(在 wx 中未实现)和 HasPage()(在 wx 中未实现)之类的调用,并将打印图像渲染到关联的 wxDC 上。 此类的实例将传递给 wxPrinter:print/4wxPrintPreview 对象,以启动打印或预览。

您派生的 wxPrintout 负责绘制预览图像和打印页面。如果您的窗口绘图例程接受任意 DC 作为参数,则可以在您的 wxPrintout 子类中重用这些例程来绘制打印输出图像。您还可以在 wxPrintout 子类中添加额外的绘图元素,如页眉、页脚和/或页码。但是,打印页面上的图像通常与屏幕上绘制的图像不同,预览图像也是如此——不仅在页眉和页脚的存在方面,而且通常在比例方面也是如此。高分辨率打印机呈现更大的绘图表面(即,更高分辨率的 DC);缩小的预览图像呈现更小的绘图表面(较低分辨率的 DC)。通过在您的 wxPrintout 子类中使用例程 FitThisSizeToXXX() 和/或 MapScreenSizeToXXX() 来设置关联 DC 的用户比例和原点,您可以轻松地使用单个绘图例程在应用程序的窗口上绘图,创建打印预览图像,并创建打印纸张图像,并在预览图像和打印页面上实现相同的外观。

请参阅

wxWidgets 文档:wxPrintout

概要

函数

销毁对象

设置与此 wxPrintout 关联的 wxDC 的用户比例和设备原点,以便给定的图像大小完全适合页面矩形,并且原点位于页面矩形的左上角。

设置与此 wxPrintout 关联的 wxDC 的用户比例和设备原点,以便给定的图像大小完全适合在给定的 wxPageSetupDialogData 对象中设置的页面边距内。

设置与此 wxPrintout 关联的 wxDC 的用户比例和设备原点,以便给定的图像大小完全适合纸张,并且原点位于纸张的左上角。

返回与打印输出关联的设备上下文(在打印或预览开始时提供给打印输出)。

在关联的 wxDC 的逻辑坐标中,返回与给定 wxPageSetupDialogData 对象指定的页面边距相对应的矩形,用于当前用户比例和设备原点。

返回与关联的 wxDC 的当前用户比例和设备原点的逻辑坐标中的页面相对应的矩形。

返回与关联的 wxDC 的当前用户比例和设备原点的逻辑坐标中的纸张相对应的矩形。

返回打印机页面大小,以毫米为单位。

返回打印机页面大小,以像素为单位,称为页面矩形。

返回与整个纸张相对应的矩形,以像素为单位,称为纸张矩形。

返回打印机设备上下文的每逻辑英寸像素数。

返回屏幕设备上下文的每逻辑英寸像素数。

返回打印输出的标题。

如果当前正在使用打印输出进行预览,则返回 true。

设置与此 wxPrintout 关联的 wxDC 的用户比例和设备原点,以便一个屏幕像素映射到 DC 上的一个设备像素。

这将此 wxPrintout 的关联 wxDC 的用户比例设置为与 mapScreenSizeToPaper/1 相同的比例,但将逻辑原点设置为页面矩形的左上角。

这将此 wxPrintout 的关联 wxDC 的用户比例设置为与 mapScreenSizeToPageMargins/2 相同的比例,但将逻辑原点设置为给定 wxPageSetupDialogData 对象指定的页面边距的左上角。

设置与此 wxPrintout 关联的 wxDC 的用户比例和设备原点,以便打印页面尽可能与屏幕大小匹配,并且逻辑原点位于纸张矩形的左上角。

将设备原点按逻辑坐标指定的量移动。

设置关联的 wxDC 的设备原点,以便当前逻辑点成为新的逻辑原点。

类型

-type wxPrintout() :: wx:wx_object().

函数

-spec destroy(This :: wxPrintout()) -> ok.

销毁对象

链接到此函数

fitThisSizeToPage(This, ImageSize)

查看源代码
-spec fitThisSizeToPage(This, ImageSize) -> ok
                           when This :: wxPrintout(), ImageSize :: {W :: integer(), H :: integer()}.

设置与此 wxPrintout 关联的 wxDC 的用户比例和设备原点,以便给定的图像大小完全适合页面矩形,并且原点位于页面矩形的左上角。

在 MSW 和 Mac 上,页面矩形是页面的可打印区域。在其他平台和 PostScript 打印上,页面矩形是整个纸张。

如果您希望打印图像尽可能大,请使用此方法,但请注意,在某些平台上,图像的某些部分可能会在边缘被切掉。

链接到此函数

fitThisSizeToPageMargins(This, ImageSize, PageSetupData)

查看源代码
-spec fitThisSizeToPageMargins(This, ImageSize, PageSetupData) -> ok
                                  when
                                      This :: wxPrintout(),
                                      ImageSize :: {W :: integer(), H :: integer()},
                                      PageSetupData :: wxPageSetupDialogData:wxPageSetupDialogData().

设置与此 wxPrintout 关联的 wxDC 的用户比例和设备原点,以便给定的图像大小完全适合在给定的 wxPageSetupDialogData 对象中设置的页面边距内。

此函数在所有平台上提供最大的一致性,因为它不依赖于访问纸张的可打印区域。

备注:在 Mac 上,本地 wxPageSetupDialog 不允许您设置页面边距;您必须提供自己的机制,或者可以使用仅限 Mac 的类 wxMacPageMarginsDialog。

链接到此函数

fitThisSizeToPaper(This, ImageSize)

查看源代码
-spec fitThisSizeToPaper(This, ImageSize) -> ok
                            when This :: wxPrintout(), ImageSize :: {W :: integer(), H :: integer()}.

设置与此 wxPrintout 关联的 wxDC 的用户比例和设备原点,以便给定的图像大小完全适合纸张,并且原点位于纸张的左上角。

如果您正在管理自己的页面边距,请使用此方法。

注意:对于大多数打印机,纸张边缘周围的区域不可打印,因此图像的边缘可能会被切掉。

-spec getDC(This) -> wxDC:wxDC() when This :: wxPrintout().

返回与打印输出关联的设备上下文(在打印或预览开始时提供给打印输出)。

应用程序可以使用 getDC/1 获取设备上下文以进行绘制。

如果在 Windows 或 Mac 下打印,这将是 wxPrinterDC(在 wx 中未实现),如果在其他平台上打印,则是 wxPostScriptDC,如果预览,则是 wxMemoryDC

链接到此函数

getLogicalPageMarginsRect(This, PageSetupData)

查看源代码
-spec getLogicalPageMarginsRect(This, PageSetupData) ->
                                   {X :: integer(), Y :: integer(), W :: integer(), H :: integer()}
                                   when
                                       This :: wxPrintout(),
                                       PageSetupData :: wxPageSetupDialogData:wxPageSetupDialogData().

在关联的 wxDC 的逻辑坐标中,返回与给定 wxPageSetupDialogData 对象指定的页面边距相对应的矩形,用于当前用户比例和设备原点。

页面边距在所有平台上都相对于纸张边缘指定。

链接到此函数

getLogicalPageRect(This)

查看源代码
-spec getLogicalPageRect(This) -> {X :: integer(), Y :: integer(), W :: integer(), H :: integer()}
                            when This :: wxPrintout().

返回与关联的 wxDC 的当前用户比例和设备原点的逻辑坐标中的页面相对应的矩形。

在 MSW 和 Mac 上,这将是纸张的可打印区域。在其他平台和 PostScript 打印上,这将是完整的纸张矩形。

链接到此函数

getLogicalPaperRect(This)

查看源代码
-spec getLogicalPaperRect(This) -> {X :: integer(), Y :: integer(), W :: integer(), H :: integer()}
                             when This :: wxPrintout().

返回与关联的 wxDC 的当前用户比例和设备原点的逻辑坐标中的纸张相对应的矩形。

-spec getPageSizeMM(This) -> {W :: integer(), H :: integer()} when This :: wxPrintout().

返回打印机页面大小,以毫米为单位。

链接到此函数

getPageSizePixels(This)

查看源代码
-spec getPageSizePixels(This) -> {W :: integer(), H :: integer()} when This :: wxPrintout().

返回打印机页面大小,以像素为单位,称为页面矩形。

页面矩形的左上角为 (0,0),右下角为 (w,h)。 这些值可能与 wxDC:getSize/1 返回的值不同;如果打印输出用于预览,则使用内存设备上下文,该上下文使用反映当前预览缩放的位图大小。 如果要支持预览,则应用程序必须考虑到这种差异。

链接到此函数

getPaperRectPixels(This)

查看源代码
-spec getPaperRectPixels(This) -> {X :: integer(), Y :: integer(), W :: integer(), H :: integer()}
                            when This :: wxPrintout().

返回与整个纸张相对应的矩形,以像素为单位,称为纸张矩形。

纸张矩形和页面矩形之间的这种区别反映了大多数打印机无法打印到纸张边缘的事实。 页面矩形是一个左上角为 (0,0) 的矩形,其宽度和高度由 wxDC::GetPageSizePixels() 给出。

在 MSW 和 Mac 上,页面矩形给出了纸张的可打印区域,而纸张矩形表示整个纸张,包括不可打印的边框。 因此,wxDC::GetPaperRectPixels() 返回的矩形的左上角坐标将是小的负数,右下角的坐标将比 wxDC::GetPageSizePixels() 给出的宽度和高度略大。

在其他平台和 PostScript 打印中,纸张被视为其整个区域都可打印,因此此函数将返回与页面矩形相同的矩形。

-spec getPPIPrinter(This) -> {W :: integer(), H :: integer()} when This :: wxPrintout().

返回打印机设备上下文的每逻辑英寸像素数。

将打印机 PPI 除以屏幕 PPI 可以为在打印机上绘制文本提供合适的缩放因子。

请记住将其乘以缩放因子,以考虑预览 DC 的大小。 或者,您可以只使用下面的 FitThisSizeToXXX() 和 MapScreenSizeToXXX 例程,它们会为您完成大部分缩放计算。

-spec getPPIScreen(This) -> {W :: integer(), H :: integer()} when This :: wxPrintout().

返回屏幕设备上下文的每逻辑英寸像素数。

将打印机 PPI 除以屏幕 PPI 可以为在打印机上绘制文本提供合适的缩放因子。

如果您正在进行自己的缩放,请记住将其乘以缩放因子,以考虑预览 DC 的大小。

-spec getTitle(This) -> unicode:charlist() when This :: wxPrintout().

返回打印输出的标题。

-spec isPreview(This) -> boolean() when This :: wxPrintout().

如果当前正在使用打印输出进行预览,则返回 true。

链接到此函数

mapScreenSizeToDevice(This)

查看源代码
-spec mapScreenSizeToDevice(This) -> ok when This :: wxPrintout().

设置与此 wxPrintout 关联的 wxDC 的用户比例和设备原点,以便一个屏幕像素映射到 DC 上的一个设备像素。

也就是说,用户比例设置为 (1,1),设备原点设置为 (0,0)。

如果您希望在调用 wxDC 绘图调用之前进行自己的缩放,例如,如果您的底层模型是浮点数,并且您希望在高分辨率打印机上实现最大的绘图精度,请使用此方法。

您可以使用下面的 GetLogicalXXXRect() 例程来获取纸张矩形、页面矩形或页面边距矩形,以执行您自己的缩放。

注意:虽然 macOS 的底层绘图模型是浮点数,但 wxWidgets 的绘图模型是从整数坐标缩放的。

链接到此函数

mapScreenSizeToPage(This)

查看源代码
-spec mapScreenSizeToPage(This) -> ok when This :: wxPrintout().

这将此 wxPrintout 的关联 wxDC 的用户比例设置为与 mapScreenSizeToPaper/1 相同的比例,但将逻辑原点设置为页面矩形的左上角。

链接到此函数

mapScreenSizeToPageMargins(This, PageSetupData)

查看源代码
-spec mapScreenSizeToPageMargins(This, PageSetupData) -> ok
                                    when
                                        This :: wxPrintout(),
                                        PageSetupData :: wxPageSetupDialogData:wxPageSetupDialogData().

这将此 wxPrintout 的关联 wxDC 的用户比例设置为与 mapScreenSizeToPageMargins/2 相同的比例,但将逻辑原点设置为给定 wxPageSetupDialogData 对象指定的页面边距的左上角。

链接到此函数

mapScreenSizeToPaper(This)

查看源代码
-spec mapScreenSizeToPaper(This) -> ok when This :: wxPrintout().

设置与此 wxPrintout 关联的 wxDC 的用户比例和设备原点,以便打印页面尽可能与屏幕大小匹配,并且逻辑原点位于纸张矩形的左上角。

也就是说,屏幕上的 100 像素对象在打印页面上应显示相同的大小。(当然,在预览图像中,它会根据缩放因子变大或变小。)

如果您需要所见即所得的行为,例如在文本编辑器中,请使用此方法。

链接到此函数

new(Title, OnPrintPage)

查看源代码
-spec new(Title :: string(), OnPrintPage :: function()) -> wxPrintout:wxPrintout().

等效于 new/3

链接到此函数

new(Title, OnPrintPage, Opts)

查看源代码
-spec new(Title :: string(), OnPrintPage, [Option]) -> wxPrintout:wxPrintout()
             when
                 OnPrintPage :: fun((wxPrintout(), Page :: integer()) -> boolean()),
                 Option ::
                     {onPreparePrinting, fun((wxPrintout()) -> ok)} |
                     {onBeginPrinting, fun((wxPrintout()) -> ok)} |
                     {onEndPrinting, fun((wxPrintout()) -> ok)} |
                     {onBeginDocument,
                      fun((wxPrintout(), StartPage :: integer(), EndPage :: integer()) -> boolean())} |
                     {onEndDocument, fun((wxPrintout()) -> ok)} |
                     {hasPage, fun((wxPrintout(), Page :: integer()) -> ok)} |
                     {getPageInfo,
                      fun((wxPrintout()) ->
                              {MinPage :: integer(),
                               MaxPage :: integer(),
                               PageFrom :: integer(),
                               PageTo :: integer()})}.

构造函数。

创建一个带有回调函数以及可选的其他回调函数的 wxPrintout 对象。This 参数是指向此对象的 wxPrintout 对象引用。

注意:回调函数可能不会调用其他进程。

链接到此函数

offsetLogicalOrigin(This, Xoff, Yoff)

查看源代码
-spec offsetLogicalOrigin(This, Xoff, Yoff) -> ok
                             when This :: wxPrintout(), Xoff :: integer(), Yoff :: integer().

将设备原点按逻辑坐标指定的量移动。

链接到此函数

setLogicalOrigin(This, X, Y)

查看源代码
-spec setLogicalOrigin(This, X, Y) -> ok when This :: wxPrintout(), X :: integer(), Y :: integer().

设置关联的 wxDC 的设备原点,以便当前逻辑点成为新的逻辑原点。