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

'' 演示如何使用图形转换(GcPdfGraphics.Transform 属性)。
Public Class Transforms
    '' 辅助方法绘制一个带有文本的填充框:
    Private Sub DrawBox(ByVal text As String, ByVal g As GcGraphics, ByVal box As RectangleF)
        g.FillRectangle(box, Color.FromArgb(80, 0, 184, 204))
        g.DrawRectangle(box, Color.FromArgb(0, 193, 213), 1)
        box.Inflate(-6, -6)
        g.DrawString(text, New TextFormat() With {.Font = StandardFonts.Times, .FontSize = 14}, box)
    End Sub

    Function CreatePDF(ByVal stream As Stream) As Integer
        Const baseTxt = "Text drawn at (0,36) in a 4""x2"" box"
        Dim doc = New GcPdfDocument()
        Dim page = doc.NewPage()
        Dim g = page.Graphics
        Dim box = New RectangleF(0, 36, 72 * 4, 72 * 2)
        '' #1:
        DrawBox($"Box 1: {baseTxt}, no transformations.", g, box)
        ''
        Dim translate0 = Matrix3x2.CreateTranslation(72 * 1, 72 * 4)
        Dim scale0 = Matrix3x2.CreateScale(0.5F)

        '' 变换按从最后到第一个的顺序应用。

        '' #2:
        g.Transform =
            scale0 *
            translate0
        DrawBox($"Box 2: {baseTxt}, translated by (1"",4"") and scaled by 0.5.", g, box)
        '' #3:
        g.Transform =
            translate0 *
            scale0
        DrawBox($"Box 3: {baseTxt}, scaled by 0.5 and translated by (1"",4"").", g, box)
        ''
        Dim translate1 = Matrix3x2.CreateTranslation(72 * 3, 72 * 5)
        Dim scale1 = Matrix3x2.CreateScale(0.7F)
        Dim rotate0 = Matrix3x2.CreateRotation((-70 * Math.PI) / 180.0F) '' 70 degrees CCW
        '' #4:
        g.Transform =
            rotate0 *
            translate1 *
            scale1
        DrawBox($"Box 4: {baseTxt}, scaled by 0.7, translated by (3"",5""), and rotated 70 degrees counterclockwise.", g, box)
        '' #5:
        g.Transform =
            Matrix3x2.CreateTranslation(36, 72) *
            g.Transform
        DrawBox($"Box 5: {baseTxt}, applied current transform (Box 4), and translated by (1/2"",1"").", g, box)
        '' #6:
        g.Transform =
            Matrix3x2.CreateSkew((-45 * Math.PI) / 180.0F, (20 * Math.PI) / 180.0F) *
            Matrix3x2.CreateTranslation(72 * 3, 72 * 7)
        DrawBox($"Box 6: {baseTxt}, translated by (3"",7""), and skewed -45 degrees on axis X and 20 degrees on axis Y.", g, box)
        '' #7:
        g.Transform =
            Matrix3x2.CreateRotation(Math.PI) *
            Matrix3x2.CreateTranslation(page.Size.Width - 72, page.Size.Height - 72)
        DrawBox($"Box 7: {baseTxt}, translated by (7.5"",10""), and rotated by 180 degrees.", g, box)
        '' 我们可以像这样删除图形上的任何转换:
        g.Transform = Matrix3x2.Identity
        ''
        '' 完毕:
        doc.Save(stream)
        Return doc.Pages.Count
    End Function
End Class