Surrogates.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

'' このサンプルは、サロゲートペアを含む様々な Unicode 文字を描画します。また、GcPdf に
'' 組み込まれた自動フォントフォールバック(フォント置換)機能も暗黙的に使用されます。
'' 注意:このサンプルは、システム提供のフォールバックフォントに依存するため、異なる
'' システムで異なる結果を生成する可能性があります。
'' このサンプルのプラットフォームおよびシステムに依存しないバージョンについては、
'' SurrogatesPort を参照してください。また、FontFallbacks も参照してください。
Public Class Surrogates
    Function CreatePDF(ByVal stream As Stream) As Integer
        Dim doc = New GcPdfDocument()
        Dim g = doc.NewPage().Graphics
        '' このサンプルでデモされた「面白い」文字のほとんどは、
        '' fallback フォント(FontFallbacks を参照)が自動的に使用されるので、
        '' キャプションに標準フォントを使用するだけです。
        Dim tf = New TextFormat() With {.FontName = "Yu Gothic", .FontSize = 12}
        Dim tf1 = New TextFormat(tf) With {.FontSize = 14}

        g.DrawString("ユニークな Unicode 文字(システムのフォールバックに依存)",
            New TextFormat(tf) With {.Underline = True, .FontSize = tf.FontSize + 2},
            New RectangleF(0, 36, doc.PageSize.Width, Single.MaxValue),
            TextAlignment.Center)

        '' テキスト挿入位置とその前進用関数を設定します。
        Dim ip = New PointF(72, 54)
        Dim nextIp As Func(Of Boolean, PointF) =
            Function(caption_ As Boolean)
                ip.Y += If(caption_, 30, 20)
                Return ip
            End Function

        '' 文字列を描画します。
        g.DrawString("サロゲートペア文字:", tf, nextIp(True))
        g.DrawString($"{ChrW(&HD867)}{ChrW(&HDEDB)} {ChrW(&HD840)}{ChrW(&HDC0B)} {ChrW(&HD834)}{ChrW(&HDD1E)} {ChrW(&HD834)}{ChrW(&HDD61)} {ChrW(&HD83D)}{ChrW(&HDC04)}", tf1, nextIp(False))

        g.DrawString("通貨記号:", tf, nextIp(True))
        g.DrawString($"{ChrW(&H24)} {ChrW(&H20A0)} {ChrW(&H20A1)} {ChrW(&H20A2)} {ChrW(&H20A3)} {ChrW(&H20A4)} {ChrW(&H20AC)} {ChrW(&H20B9)} {ChrW(&H20BD)}", tf1, nextIp(False))

        g.DrawString("数学演算子:", tf, nextIp(True))
        g.DrawString($"{ChrW(&H221A)} {ChrW(&H222B)} {ChrW(&H2211)} {ChrW(&H2210)} {ChrW(&H2264)} {ChrW(&H2265)} {ChrW(&H2202)} {ChrW(&H2208)}", tf1, nextIp(False))

        g.DrawString("CJK 統合漢字A:", tf, nextIp(True))
        g.DrawString($"{ChrW(&H3400)} {ChrW(&H3401)} {ChrW(&H3402)} {ChrW(&H3403)} {ChrW(&H3404)} {ChrW(&H3405)} {ChrW(&H3406)} {ChrW(&H3407)}", tf1, nextIp(False))

        g.DrawString("和暦合字:", tf, nextIp(True))
        g.DrawString($"{ChrW(&H337E)} {ChrW(&H337D)} {ChrW(&H337C)} {ChrW(&H337B)} {ChrW(&H32FF)}", tf1, nextIp(False))


        g.DrawString("文字様記号:", tf, nextIp(True))
        g.DrawString($"{ChrW(&H2110)} {ChrW(&H2111)} {ChrW(&H2112)} {ChrW(&H2113)} {ChrW(&H2114)} {ChrW(&H2115)} {ChrW(&H211B)} {ChrW(&H211C)}", tf1, nextIp(False))

        g.DrawString("私用領域:", tf, nextIp(True))
        g.DrawString($"{ChrW(&HE000)} {ChrW(&HE001)} {ChrW(&HE010)} {ChrW(&HE011)} {ChrW(&HE012)} {ChrW(&HE013)} {ChrW(&HE014)} {ChrW(&HE015)}", tf1, nextIp(False))

        g.DrawString("矢印:", tf, nextIp(True))
        g.DrawString($"{ChrW(&H2190)} {ChrW(&H2191)} {ChrW(&H2192)} {ChrW(&H2193)} {ChrW(&H21B0)} {ChrW(&H21E6)} {ChrW(&H21CB)} {ChrW(&H21A9)}", tf1, nextIp(False))

        g.DrawString("装飾記号:", tf, nextIp(True))
        g.DrawString($"{ChrW(&H2714)} {ChrW(&H2717)} {ChrW(&H275B)} {ChrW(&H275C)} {ChrW(&H2706)} {ChrW(&H2707)} {ChrW(&H2708)} {ChrW(&H2709)}", tf1, nextIp(False))

        g.DrawString("点字パターン:", tf, nextIp(True))
        g.DrawString($"{ChrW(&H2830)} {ChrW(&H2831)} {ChrW(&H2832)} {ChrW(&H2833)} {ChrW(&H2834)} {ChrW(&H2835)} {ChrW(&H2836)} {ChrW(&H2837)}", tf1, nextIp(False))

        g.DrawString($"幾何学的形状:", tf, nextIp(True))
        g.DrawString($"{ChrW(&H25D0)} {ChrW(&H25D1)} {ChrW(&H25D2)} {ChrW(&H25D3)} {ChrW(&H25A4)} {ChrW(&H25F0)} {ChrW(&H25BC)} {ChrW(&H25CE)}", tf1, nextIp(False))

        g.DrawString("ラテン語拡張A:", tf, nextIp(True))
        g.DrawString($"{ChrW(&H100)} {ChrW(&H101)} {ChrW(&H102)} {ChrW(&H103)} {ChrW(&H104)} {ChrW(&H105)} {ChrW(&H106)} {ChrW(&H107)}", tf1, nextIp(False))

        g.DrawString("絵文字、その他:", tf, nextIp(True))
        g.DrawString($"{ChrW(&H2600)} {ChrW(&H2601)} {ChrW(&H2602)} {ChrW(&H2603)} {ChrW(&H2604)} {ChrW(&H2605)} {ChrW(&H2606)} " +
                     $"{ChrW(&H2607)} {ChrW(&H2608)} {ChrW(&H2609)} {ChrW(&H2614)} {ChrW(&H2615)} {ChrW(&H26F0)}", tf1, nextIp(False))
        ''
        '' PDF ドキュメントを保存します。
        doc.Save(stream)
        Return doc.Pages.Count
    End Function
End Class