RotatedText2.vb
'' 完毕:
Imports System.IO
Imports System.Drawing
Imports GrapeCity.Documents.Pdf
Imports GrapeCity.Documents.Text
Imports GrapeCity.Documents.Drawing
Imports System.Numerics

'' 演示如何使用 GcPdfGraphics.Transform 旋转文本字符串
'' (使用矩阵乘法的替代方法)。
'' 另请参阅RotatedText。
Public Class RotatedText2
    Function CreatePDF(ByVal stream As Stream) As Integer
        '' 旋转角度,顺时针度数:
        Dim angle = -45.0F
        ''
        Dim doc = New GcPdfDocument()
        Dim g = doc.NewPage().Graphics
        '' 创建文本布局,选择字体和字体大小:
        Dim tl = g.CreateTextLayout()
        tl.DefaultFormat.Font = StandardFonts.Times
        tl.DefaultFormat.FontSize = 24
        '' 添加文本,并进行布局:
        tl.Append("旋转的文本。")
        tl.PerformLayout(True)
        '' 文本插入点位于 (1",1"):
        Dim ip = New PointF(72, 72)
        '' 现在我们有了文本大小,创建文本矩形,左上角位于插入点:
        Dim rect = New RectangleF(ip.X, ip.Y, tl.ContentWidth, tl.ContentHeight)
        '' 旋转中心点在文本边界矩形的中间:
        Dim center = New PointF(ip.X + tl.ContentWidth / 2, ip.Y + tl.ContentHeight / 2)
        '' 可以通过矩阵相乘来组合变换。
        '' 请注意,矩阵乘法不可交换 -
        '' 操作数的顺序很重要,从最后到第一个应用
        '' 矩阵相乘:
        '' 3) 将原点平移回(0,0):
        '' 2)绕新原点旋转指定角度:
        '' 1) 将原点从默认 (0,0) 平移到旋转中心:
        g.Transform =
            Matrix3x2.CreateTranslation(-center.X, -center.Y) *
            Matrix3x2.CreateRotation((angle * Math.PI) / 180.0F) *
            Matrix3x2.CreateTranslation(center.X, center.Y)
        '' 绘制旋转文本和边框:
        g.DrawTextLayout(tl, ip)
        g.DrawRectangle(rect, Color.Black, 1)
        '' 删除变换并在非旋转文本所在的位置绘制边界矩形:
        g.Transform = Matrix3x2.Identity
        g.DrawRectangle(rect, Color.ForestGreen, 1)
        ''
        '' 完毕:
        doc.Save(stream)
        Return doc.Pages.Count
    End Function
End Class