如何打印

要在Gambas 3中打印内容,您必须:

打印过程

运行Print方法时,将运行本地事件循环,并且该方法仅在打印完成或取消时返回。

在此本地事件循环期间,将引发以下事件:

您必须实现draw事件。所有其他事件都是可选的。

Begin事件

打印开始时引发此事件。

如果您知道要打印多少页,您可以在那里定义Printer.Count属性。

否则,您必须实现Paginate事件来布局文档并计算页数。

默认情况下,只打印一页。

Paginate事件

引发此事件是为了使您可以在后台对文档进行分页。

如果未定义该事件处理程序,则不会引发此事件,则你必须在Begin事件处理程序中定义Count属性。

否则,如果处理此事件,将一次又一次地调用事件处理程序,直到明确定义count属性为止。

Draw事件

对于必须打印的每一页,都会调用一次此事件。

当前页码由Printer.page 属性返回。

所有绘图都是使用Paint类完成的。

End事件

打印过程结束时会引发此事件。

如何绘制页面

页面尺寸

绘图是在一个矩形内完成的,该矩形表示有页边距或无页边距的页面。

矩形的原点是 (0, 0) ,矩形的大小是 (Paint.WidthPaint.Height)。

打印边距

打印机通常无法打印整页,即存在无法打印的空白。

仅当设置了 Printer.FullPage 属性时,上面的矩形表示整个页面。否则,这些边距将被考虑在内。

在设计打印时,你必须考虑到这一点!

我强烈建议始终使用打印机的FullPage设置,并允许用户从页面的边框中选择自己的页边距,以便 他得到了他想要的东西。

绝对坐标

您通常更喜欢使用以厘米或毫米为单位的绝对坐标,而不是使用图形坐标。

要做到这一点,您必须使用Printer.PaperWidthPrinter.PaperHeight 属性,返回以毫米为单位的纸张大小。

然后,可以使用Paint.Scale方法缩放坐标系,使指定的每个坐标现在都以毫米为单位:

Dim MyPrinter As Printer

MyPrinter = New Printer As "MyPrinter"

...

Public Sub MyPrinter_Draw()

  Paint.Scale(Paint.Width / MyPrinter.PaperWidth, Paint.Height / MyPrinter.PaperHeight)
  ...

End

字体大小

注意: 由 Paint.Font.Size 返回的字体大小。字体尺寸是绝对尺寸。

Its unit is the typographic point.

一个印刷点是1/72英寸,即大约0,353毫米。

因此,如果10点字体适合在屏幕上绘制文本,那么它可能对纸张来说太大:

由于打印机的分辨率远大于屏幕的分辨率,所以您通常会打印更小的东西。

BUT: The font size will be modified according to the paint matrix (i.e. if you use Paint.Scale, Paint.Translate, Paint.Rotate...)

Gambas提供了一个打印示例,显示了此前的大多数概念。