如何打印
要在Gambas 3中打印内容,您必须:
打印过程
运行Print方法时,将运行本地事件循环,并且该方法仅在打印完成或取消时返回。
在此本地事件循环期间,将引发以下事件:
Begin事件
打印开始时引发此事件。
如果您知道要打印多少页,您可以在那里定义
Printer.Count属性。
否则,您必须实现Paginate事件来布局文档并计算页数。
默认情况下,只打印一页。
Paginate事件
引发此事件是为了使您可以在后台对文档进行分页。
如果未定义该事件处理程序,则不会引发此事件,则你必须在Begin事件处理程序中定义Count属性。
否则,如果处理此事件,将一次又一次地调用事件处理程序,直到明确定义count属性为止。
Draw事件
对于必须打印的每一页,都会调用一次此事件。
当前页码由
Printer.page 属性返回。
所有绘图都是使用
Paint类完成的。
End事件
打印过程结束时会引发此事件。
如何绘制页面
页面尺寸
绘图是在一个矩形内完成的,该矩形表示有页边距或无页边距的页面。
矩形的原点是 (
0
,
0
) ,矩形的大小是 (
Paint.Width ,
Paint.Height)。
打印边距
打印机通常无法打印整页,即存在无法打印的空白。
仅当设置了
Printer.FullPage 属性时,上面的矩形表示整个页面。否则,这些边距将被考虑在内。
在设计打印时,你必须考虑到这一点!
我强烈建议始终使用打印机的FullPage设置,并允许用户从页面的边框中选择自己的页边距,以便
他得到了他想要的东西。
绝对坐标
您通常更喜欢使用以厘米或毫米为单位的绝对坐标,而不是使用图形坐标。
要做到这一点,您必须使用
Printer.PaperWidth 和
Printer.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提供了一个打印示例,显示了此前的大多数概念。