RotatedText2.vb
'' 
'' このコードは、DioDocs for PDF のサンプルの一部として提供されています。
'' Copyright (c) GrapeCity 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 を使用してテキスト文字列を回転する方法を示します
'' (行列の乗算を使用する代替方法)。
'' 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)
        ''
        '' PDF ドキュメントを保存します。
        doc.Save(stream)
        Return doc.Pages.Count
    End Function
End Class