RotatedText.vb
''
'' This code is part of Document Solutions for PDF demos.
'' Copyright (c) MESCIUS inc. All rights reserved.
''
Imports System.IO
Imports System.Drawing
Imports GrapeCity.Documents.Pdf
Imports GrapeCity.Documents.Text
Imports GrapeCity.Documents.Drawing
Imports System.Numerics

'' Shows how to use GcPdfGraphics.Transform to rotate a text string.
'' See also RotatedText2.
Public Class RotatedText
    Function CreatePDF(ByVal stream As Stream) As Integer
        '' Rotation angle, degrees clockwise:
        Dim angle = -45.0F
        ''
        Dim doc = New GcPdfDocument()
        Dim g = doc.NewPage().Graphics
        '' Create a text layout, pick a font and font size:
        Dim tl = g.CreateTextLayout()
        tl.DefaultFormat.Font = StandardFonts.Times
        tl.DefaultFormat.FontSize = 24
        '' Add a text, and perform layout:
        tl.Append("Rotated text.")
        tl.PerformLayout(True)
        '' Text insertion point at (1",1"):
        Dim ip = New PointF(72, 72)
        '' Now that we have text size, create text rectangle with top left at insertion point:
        Dim rect = New RectangleF(ip.X, ip.Y, tl.ContentWidth, tl.ContentHeight)
        '' Rotate the text around its bounding rect's center:
        '' we now have the text size, and can rotate it about its center:
        g.Transform = Matrix3x2.CreateRotation((angle * Math.PI) / 180.0F, New Vector2(ip.X + tl.ContentWidth / 2, ip.Y + tl.ContentHeight / 2))
        '' Draw rotated text and bounding rectangle:
        g.DrawTextLayout(tl, ip)
        g.DrawRectangle(rect, Color.Black, 1)
        '' Remove rotation and draw the bounding rectangle where the non-rotated text would have been:
        g.Transform = Matrix3x2.Identity
        g.DrawRectangle(rect, Color.ForestGreen, 1)
        ''
        '' Done:
        doc.Save(stream)
        Return doc.Pages.Count
    End Function
End Class