SubSuperScript.vb
'' 
'' このコードは、DioDocs for PDF のサンプルの一部として提供されています。
'' © MESCIUS inc. All rights reserved.
'' 
Imports System.IO
Imports System.Drawing
Imports System.Text.RegularExpressions
Imports GrapeCity.Documents.Drawing
Imports GrapeCity.Documents.Pdf
Imports GrapeCity.Documents.Text
Imports GCTEXT = GrapeCity.Documents.Text
Imports GCDRAW = GrapeCity.Documents.Drawing

'' このサンプルは、下付き文字と上付き文字を描画する方法を示します。
Public Class SubSuperScript
    Sub CreatePDF(ByVal stream As Stream)
        Dim doc = New GcPdfDocument()
        Dim page = doc.NewPage()
        Dim g = page.Graphics

        Dim rc = Util.AddNote(
            "上付き/下付き文字を指定するサンプルです。" +
            "TextFormat.Subscript および TextFormat.Superscript プロパティを使用します。" +
            "ランダムな文字列で段落を描画し、指定した文字のみを上付きまたは下付き文字として描画します。",
            page)

        '' ランダムな段落を取得します。
        Dim para = Util.getString_ja(1, 1, 1)

        '' 段落から特定の文字列を抜き出します。
        Const subs = "負け"
        Const super = "いい"
        Dim frags = Regex.Split(para, $"({subs})|({super})")

        Dim fnt = GCTEXT.Font.FromFile(Path.Combine("Resources", "Fonts", "YuGothR.ttc"))

        '' 下付き文字と上付き文字のテキスト書式を作成します。
        Dim tfSub = New TextFormat() With {.Font = fnt, .FontSize = 12, .Subscript = True}
        Dim tfSuper = New TextFormat(tfSub) With {.Subscript = False, .Superscript = True}

        '' 特定の文字列のみ別の書式を使用して、TextLayout にテキストを追加します。
        Dim tl = g.CreateTextLayout()
        tl.DefaultFormat.Font = fnt
        tl.DefaultFormat.FontSize = 12
        For Each frag In frags
            If (frag = subs) Then
                tl.Append(frag, tfSub)
            ElseIf (frag = super) Then
                tl.Append(frag, tfSuper)
            Else
                tl.Append(frag)
            End If
        Next

        ''化学式の表記
        tl.AppendParagraphBreak()
        tl.Append($"化学式は、下付き文字を指定して表現できます。{vbCrLf} ")
        tl.AppendLine()
        Dim tfChem = New TextFormat() With {
                .Font = fnt,
                .FontSize = 16
            }
        Const strchem As String = "グルタミン酸:CH3CH2OH"
        Dim number As Integer = Nothing

        For Each frag In strchem.ToCharArray()

            If Integer.TryParse(frag.ToString(), number) Then
                tl.Append(frag.ToString(), tfSub)
            Else
                tl.Append(frag.ToString(), tfChem)
            End If
        Next


        '' レイアウトプロパティを設定してテキストを描画します。
        tl.MaxWidth = page.Size.Width
        tl.MaxHeight = page.Size.Height - rc.Height
        tl.MarginAll = 72
        tl.MarginTop = rc.Bottom + 36
        tl.PerformLayout(True)
        g.DrawTextLayout(tl, PointF.Empty)

        '' PDF ドキュメントを保存します。
        doc.Save(stream)
    End Sub
End Class