RotatedText.vb
'' 
'' このコードは、DioDocs for PDF のサンプルの一部として提供されています。
'' © 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

'' GcPdfGraphics.Transform を使用してテキスト文字列を回転する方法を示します。
'' RotatedText2 も参照してください。
Public Class RotatedText
    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.FontName = "Yu Gothic"
        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)
        '' 矩形の中心付近でテキストを回転させます。
        '' テキストのサイズは既にあるので、その中央付近を中心として回転することができます。
        g.Transform = Matrix3x2.CreateRotation((angle * Math.PI) / 180.0F, New Vector2(ip.X + tl.ContentWidth / 2, ip.Y + tl.ContentHeight / 2))
        '' 回転したテキストと境界の矩形を描画します。
        g.DrawTextLayout(tl, ip)
        g.DrawRectangle(rect, Color.Black, 1)
        '' 回転を元に戻し、回転前のテキストがあったであろう境界の矩形を描画します。
        g.Transform = Matrix3x2.Identity
        g.DrawRectangle(rect, Color.ForestGreen, 1)
        ''
        '' PDF ドキュメントを保存します。
        doc.Save(stream)
        Return doc.Pages.Count
    End Function
End Class