TateChuYoko.cs
//
// This code is part of Document Solutions for Word demos.
// Copyright (c) MESCIUS inc. All rights reserved.
//
using System;
using System.IO;
using System.Drawing;
using System.Collections.Generic;
using GrapeCity.Documents.Word;
using GrapeCity.Documents.Drawing;
using GrapeCity.Documents.Pdf;
using GrapeCity.Documents.Text;

namespace DsWordWeb.Demos
{
    // This sample demonstrates how to render short upright Latin text or numbers
    // in a block of vertical text. This is used in Chinese, Japanese and
    // Korean vertical text. In CSS this is referred to using the Japanese
    // name 縦中横 (tate chu yoko). In MS Word, this is referred to as
    // Horizontal In Vertical, and can be set using the Style.Font.EastAsianLayout.HorizontalInVertical
    // property.
    public class TateChuYoko
    {
        public GcWordDocument CreateDocx()
        {
            var doc = new GcWordDocument();

            doc.Body.Sections.First.PageSetup.TextFlowDirection = TextFlowDirection.TopToBottomRightToLeft;

            // Paragraph style for main caption:
            var sMainCaption = doc.Styles.Add("My Main Caption", StyleType.Paragraph);
            sMainCaption.Font.Name = "MS PGothic";
            sMainCaption.Font.Bold = true;
            sMainCaption.Font.Size = 14;
            sMainCaption.Font.Color.RGB = Color.DarkBlue;
            sMainCaption.ParagraphFormat.KeepWithNext = true;

            // Paragraph style for other captions:
            var sCaption = doc.Styles.Add("My Caption", StyleType.Paragraph);
            sCaption.BaseStyle = sMainCaption;
            sCaption.Font.Size = sMainCaption.Font.Size - 1;

            // Paragraph style for text:
            var sText = doc.Styles.Add("My Text", StyleType.Paragraph);
            sText.Font.Name = "MS PGothic";
            sText.Font.Size = sCaption.Font.Size - 1;
            sText.ParagraphFormat.KeepTogether = true;

            // Char style for 'Tate Chu Oko' text fragments:
            var sTate = doc.Styles.Add("My TateChuOko", StyleType.Character);
            sTate.Font.EastAsianLayout.HorizontalInVertical = true;

            var pars = doc.Body.Sections.Last.GetRange().Paragraphs;

            var par = pars.Add(sMainCaption);
            var runs = par.GetRange().Runs;
            runs.Add("PDF", sTate);
            runs.Add("ファイルをコードから");
            runs.Add("API", sTate);
            runs.Add("を利用することで操作できます。クロスプラットフォーム環境で動作するアプリケーションの開発を支援する");
            runs.Add("API", sTate);
            runs.Add("ライブラリです。");

            // Item 1
            par = pars.Add(sCaption);
            runs = par.GetRange().Runs;
            runs.Add("PDF", sTate);
            runs.Add("用の包括的な");
            runs.Add("API", sTate);

            par = pars.Add(sText);
            runs = par.GetRange().Runs;
            runs.Add("PDF", sTate);
            runs.Add("バージョン「");
            runs.Add("1.7", sTate);
            runs.Add("」に準拠した");
            runs.Add("API", sTate);
            runs.Add("を提供し、レイアウトや機能を損なうことなく、豊富な機能を備えた");
            runs.Add("PDF", sTate);
            runs.Add("文書を生成、編集、保存できます。");

            // Item 2
            par = pars.Add(sCaption);
            runs = par.GetRange().Runs;
            runs.Add("完全なテキスト描画");

            par = pars.Add(sText);
            runs = par.GetRange().Runs;
            runs.Add("PDF", sTate);
            runs.Add("文書にテキストの描画情報が保持されます。テキストと段落の書式、特殊文字、複数の言語、縦書き、テキスト角度などが保持さるので、完全な形でテキスト描画を再現できます。");

            // Item 3
            par = pars.Add(sCaption);
            runs = par.GetRange().Runs;
            runs.Add(".NET Standard 2.0 準拠");

            par = pars.Add(sText);
            runs = par.GetRange().Runs;
            runs.Add(".NET Core、.NET Framework、Xamarinで動作するアプリケーションを開発できます。Windows、macOS、Linuxなどクロスプラットフォーム環境で動作可能です。");

            // Item 4
            par = pars.Add(sCaption);
            runs = par.GetRange().Runs;
            runs.Add("100", sTate);
            runs.Add("を超える");
            runs.Add("PDF", sTate);
            runs.Add("操作機能");

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

            // Item 5
            par = pars.Add(sCaption);
            runs = par.GetRange().Runs;
            runs.Add("高速、軽量アーキテクチャ");

            par = pars.Add(sText);
            runs = par.GetRange().Runs;
            runs.Add("軽量");
            runs.Add("API", sTate);
            runs.Add("アーキテクチャでメモリと時間を節約できます。");
            runs.Add("また、他の生成用ツールに依存せずドキュメントを生成可能です。");

            // 6
            par = pars.Add(sCaption);
            runs = par.GetRange().Runs;
            runs.Add("クラウドアプリケーション展開");

            par = pars.Add(sText);
            runs = par.GetRange().Runs;
            runs.Add("Azure、AWSなどのサービスに配置するクラウドアプリケーションの開発で利用可能です。仮想マシン、コンテナ、サーバーレスなどの方法で配置できます。");

            // Done:
            return doc;
        }
    }
}