MultiFormattedText.cs
// 
// このコードは、DioDocs for PDF のサンプルの一部として提供されています。
// © MESCIUS inc. All rights reserved.
// 
using System;
using System.IO;
using System.Drawing;
using GrapeCity.Documents.Drawing;
using GrapeCity.Documents.Pdf;
using GrapeCity.Documents.Text;

namespace DsPdfWeb.Demos.Basics
{
    // 単一の段落で異なるテキスト書式(フォント、色)を使用する方法を示します。
    public class MultiFormattedText
    {
        public int CreatePDF(Stream stream)
        {
            // 書式設定オプションを引用するサンプルテキストを生成する関数です。
            Func<TextFormat, string> makeSampleText = (tf_) =>
            {
                string boldItalic = string.Empty;
                if (tf_.Font.FontBold)
                    boldItalic = "bold ";
                if (tf_.Font.FontItalic)
                    boldItalic += "italic ";
                if (boldItalic == string.Empty)
                    boldItalic = "normal ";
                return $"This is {boldItalic}text drawn using font '{tf_.Font.FullFontName}', font size {tf_.FontSize} points, " +
                    $"text color {tf_.ForeColor}, background color {tf_.BackColor}. " + 
                    $"設定(フォント:{tf_.Font.FullFontName} サイズ:{tf_.FontSize} 色:{tf_.ForeColor} 背景色:{tf_.BackColor})";
            };
            // フォント名。
            const string times = "times new roman";
            const string arial = "arial";
            // ドキュメントとテキストレイアウトを作成します。
            var doc = new GcPdfDocument();
            var page = doc.NewPage();
            var g = page.Graphics;
            var tl = g.CreateTextLayout();
            // TextLayout を使用してページ全体をレイアウトし、余白を維持します。
            tl.MaxHeight = page.Size.Height;
            tl.MaxWidth = page.Size.Width;
            tl.MarginAll = 72;
            // いくつかのフォントを取得します。
            var fc = new FontCollection();
            fc.RegisterDirectory(Path.Combine("Resources", "Fonts"));
            var fTimes = fc.FindFamilyName(times, false, false);
            var fTimesBold = fc.FindFamilyName(times, true, false);
            var fTimesItalic = fc.FindFamilyName(times, false, true);
            var fTimesBoldItalic = fc.FindFamilyName(times, true, true);
            var fArial = fc.FindFamilyName(arial, false, false);
            var fIPAGothic = fc.FindFamilyName("IPAGothic", false, false);
            // 異なるフォントとフォントサイズを使用して TextLayout にテキストを追加します。
            var tf = new TextFormat() { Font = fTimes, FontSize = 12, };
            tl.Append(makeSampleText(tf), tf);
            tf.Font = fTimesBold;
            tf.FontSize += 2;
            tl.Append(makeSampleText(tf), tf);
            tf.Font = fTimesItalic;
            tf.FontSize += 2;
            tl.Append(makeSampleText(tf), tf);
            tf.Font = fTimesBoldItalic;
            tf.FontSize -= 4;
            tl.Append(makeSampleText(tf), tf);
            tf.Font = fArial;
            tf.FontSize += 2;
            tl.Append(makeSampleText(tf), tf);
            tf.Font = fIPAGothic;
            tf.FontSize -= 2;
            tl.Append(makeSampleText(tf), tf);
            // 異なる前景色と背景色でテキストを追加します。
            tf.Font = fTimesBold;
            tf.ForeColor = Color.Tomato;
            tl.Append(makeSampleText(tf), tf);
            tf.Font = fTimesBoldItalic;
            tf.FontSize = 16;
            tf.ForeColor = Color.SlateBlue;
            tf.BackColor = Color.Orange;
            tl.Append(makeSampleText(tf), tf);
            // 再び透明な黒色で仕上げます。
            tl.Append("The end.", new TextFormat() { Font = fTimes, FontSize = 14, });
            tl.Append("- 終了 -", new TextFormat() { Font = fIPAGothic, FontSize = 14, });
            // テキストのレイアウトと描画。
            tl.PerformLayout(true);
            g.DrawTextLayout(tl, PointF.Empty);
            // PDF ドキュメントを保存します。
            doc.Save(stream);
            return doc.Pages.Count;
        }
    }
}