TateChuYoko.vb
'' 完毕:
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

'' 此示例演示如何呈现短直立拉丁文本或数字
'' 在垂直文本块中。这用于中文、日文和
'' 韩文竖排文字。在 CSS 中,这是使用日语来引用的
'' 名縦中横(tate chu yoko)。为了在 GcGraphics 中实现这一点,
'' 应设置 TextFormat.UprightInVerticalText 属性。
'' TextLayout 和 TextFormat 上的许多其他属性
'' 允许您微调行为,如本示例所示。
Public Class TateChuYoko
    Sub CreatePDF(ByVal stream As Stream)
        Dim doc = New GcPdfDocument()
        Dim page = doc.NewPage()
        Dim g = page.Graphics

        Dim rc = Util.AddNote(
            "竖排文本通常包括短的水平数字或拉丁文本。" +
            "",
            page)

        Dim fntJp = GCTEXT.Font.FromFile(Path.Combine("Resources", "Fonts", "YuGothM.ttc"))
        Dim fntLat = GCTEXT.Font.FromFile(Path.Combine("Resources", "Fonts", "MyriadPro-Cond.otf"))
        Dim hiliteFore = Color.DarkSlateBlue
        Dim hiliteBack = Color.FromArgb(&HFFFFFF99)

        Dim tl = g.CreateTextLayout()

        '' 设置文本流和其他布局属性:
        tl.FlowDirection = FlowDirection.VerticalRightToLeft
        tl.MaxWidth = page.Size.Width
        tl.MaxHeight = page.Size.Height
        tl.MarginAll = 72
        tl.MarginTop = rc.Bottom + 36
        tl.ParagraphSpacing = 12
        tl.LineSpacingScaleFactor = 1.4F

        '' g.FillRectangle(
        '' New RectangleF(tl.MarginLeft, tl.MarginTop, tl.MaxWidth.Value - tl.MarginLeft - tl.MarginRight, tl.MaxHeight.Value - tl.MarginTop - tl.MarginBottom),
        '' Color.AliceBlue)

        '' 直立文本的文本格式(短拉丁文字或数字)
        '' (GlyphWidths 打开相应的字体功能,但会产生差异
        '' 字体中仅存在这些功能):
        Dim fUpright = New TextFormat() With
        {
            .Font = fntLat,
            .FontSize = 14,
            .UprightInVerticalText = True,
            .GlyphWidths = GlyphWidths.QuarterWidths,
            .TextRunAsCluster = True
        }

        '' 竖排日语和横排拉丁文本的文本格式:
        Dim fVertical = New TextFormat(fUpright) With
        {
            .Font = fntJp,
            .UprightInVerticalText = False,
            .GlyphWidths = GlyphWidths.Default,
            .TextRunAsCluster = False
        }

        '' 确保横向文本的运行不会影响垂直间距:
        fVertical.UseVerticalLineGapForSideways = True

        '' 用于突出显示标题的两个附加文本共振峰:
        Dim fUpHdr = New TextFormat(fUpright) With
        {
            .ForeColor = hiliteFore,
            .BackColor = hiliteBack
        }
        Dim fVertHdr = New TextFormat(fVertical) With
        {
        .ForeColor = hiliteFore,
        .BackColor = hiliteBack
        }

        tl.Append("PDF", fUpright)
        tl.Append("ファイルをコードから", fVertical)
        tl.Append("API", fUpright)
        tl.Append("を利用することで操作できます。クロスプラットフォーム環境で動作するアプリケーションの開発を支援する", fVertical)
        tl.Append("API", fUpright)
        tl.Append("ライブラリです。", fVertical)

        '' 文本其余部分的字体较小:
        fUpright.FontSize -= 2
        fVertical.FontSize -= 2

        '' 1:
        tl.AppendParagraphBreak()
        tl.Append("PDF", fUpHdr)
        tl.Append("用の包括的な", fVertHdr)
        tl.Append("API", fUpHdr)

        tl.AppendSoftBreak()
        tl.Append("PDF", fUpright)
        tl.Append("バージョン「", fVertical)
        tl.Append("1.7", fUpright)
        tl.Append("」に準拠した", fVertical)
        tl.Append("API", fUpright)
        tl.Append("を提供し、レイアウトや機能を損なうことなく、豊富な機能を備えた", fVertical)
        tl.Append("PDF", fUpright)
        tl.Append("文書を生成、編集、保存できます。", fVertical)

        '' 2:
        tl.AppendParagraphBreak()
        tl.Append("完全なテキスト描画", fVertHdr)

        tl.AppendSoftBreak()
        tl.Append("PDF", fUpright)
        tl.Append("文書にテキストの描画情報が保持されます。テキストと段落の書式、特殊文字、複数の言語、縦書き、テキスト角度などが保持さるので、完全な形でテキスト描画を再現できます。", fVertical)

        '' 3:
        tl.AppendParagraphBreak()
        tl.Append(".NET Standard 2.0 準拠", fVertHdr)

        tl.AppendSoftBreak()
        tl.Append(".NET Core、.NET Framework、Xamarinで動作するアプリケーションを開発できます。Windows、macOS、Linuxなどクロスプラットフォーム環境で動作可能です。", fVertical)

        '' 4:
        tl.AppendParagraphBreak()
        tl.Append("100", fUpHdr)
        tl.Append("を超える", fVertHdr)
        tl.Append("PDF", fUpHdr)
        tl.Append("操作機能", fVertHdr)

        tl.AppendSoftBreak()
        tl.Append("ページの追加や削除、ページサイズ、向きの変更だけでなく、ファイルの圧縮、", fVertical)
        tl.Append("Web", fUpright)
        tl.Append("に最適化した", fVertical)
        tl.Append("PDF", fUpright)
        tl.Append("の生成など高度な機能も", fVertical)
        tl.Append("API", fUpright)
        tl.Append("操作で実現します。また、署名からセキュリティ機能まで様々な機能を含んだ", fVertical)
        tl.Append("PDF", fUpright)
        tl.Append("フォームを生成可能です。", fVertical)

        '' 5:
        tl.AppendParagraphBreak()
        tl.Append("高速、軽量アーキテクチャ", fVertHdr)

        tl.AppendSoftBreak()
        tl.Append("軽量", fVertical)
        tl.Append("API", fUpright)
        tl.Append("アーキテクチャでメモリと時間を節約できます。", fVertical)
        tl.AppendSoftBreak()
        tl.Append("また、他の生成用ツールに依存せずドキュメントを生成可能です。", fVertical)

        '' 6:
        tl.AppendParagraphBreak()
        tl.Append("クラウドアプリケーション展開", fVertHdr)
        tl.Append("", fUpHdr)

        tl.AppendSoftBreak()
        tl.Append("Azure、AWSなどのサービスに配置するクラウドアプリケーションの開発で利用可能です。仮想マシン、コンテナ、サーバーレスなどの方法で配置できます。", fVertical)

        tl.PerformLayout(True)
        g.DrawTextLayout(tl, PointF.Empty)

        '' 完毕:
        doc.Save(stream)
    End Sub
End Class