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

namespace DsPdfWeb.Demos.Basics
{
    // 1つの TextLayout を使用して、シンプルな箇条書きリストを簡単にレンダリングする方法を紹介します。
    public class EasyBulletList
    {
        public int CreatePDF(Stream stream)
        {
            const int FontSize = 12;
            var doc = new GcPdfDocument();
            var page = doc.Pages.Add();
            var g = page.Graphics;
            var tl = g.CreateTextLayout();

            var img = GCDRAW.Image.FromFile(Path.Combine("Resources", "ImagesBis", "2020-website-gcdocs-headers_tall.png"));
            var rc = page.Bounds;
            rc.Height *= 0.65f;
            g.DrawImage(img, rc, null, ImageAlign.StretchImage);

            var ip = new PointF(48, 72);

            var font = GCTEXT.Font.FromFile(Path.Combine("Resources", "Fonts", "YuGothR.ttc"));
            var tfCap = new TextFormat() { Font = font, FontSize = FontSize * 1.6f, ForeColor = Color.White };
            var tf = new TextFormat() { Font = font, FontSize = FontSize, ForeColor = Color.White };
            tl.MaxWidth = 72 * 5;

            // ヘッダー
            tl.AppendLine("PDFを作成・編集するAPIライブラリ", tfCap);
            tl.AppendLine(tfCap);
            tl.AppendLine("DioDocs for PDFはC#およびVB.NETのコードからAPIを利用してPDFファイルを作成・編集できます。クロスプラットフォームで動作する.NETアプリケーション開発において、PDFファイルの操作を実装できるAPIライブラリです。", tf);
            tl.AppendLine(tf);
            g.DrawTextLayout(tl, ip);

            // 箇条書きリスト
            ip.Y += tl.ContentHeight;
            tl.Clear();
            const string bullet = "\x2022\x2003";
            tl.FirstLineIndent = -g.MeasureString(bullet, tf).Width;
            tl.ParagraphSpacing += 4;

            tl.Append(bullet, tf);
            tl.AppendLine("PDF文書の生成、読み込み、編集、保存をコードで実現", tf);
            tl.Append(bullet, tf);
            tl.AppendLine("日本語のフォント、段組み、縦書きにも対応", tf);
            tl.Append(bullet, tf);
            tl.AppendLine("PDFコンテンツの墨消しが可能", tf);
            tl.Append(bullet, tf);
            tl.AppendLine("様々なPDF機能をサポート", tf);
            tl.Append(bullet, tf);
            tl.AppendLine("すべての機能はWindows、macOS、Linuxに完全対応", tf);
            tl.Append(bullet, tf);
            tl.AppendLine("製品は個別またはバンドルとして購入可能", tf);
            g.DrawTextLayout(tl, ip);

            doc.Save(stream);
            return doc.Pages.Count;
        }
    }
}