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

namespace GcPdfWeb.Samples
{
    // このサンプルでは、GrapeCity.Documents.Drawing.TableRenderer クラスなどを使用して、
    // テーブルのセル内のテキストと段落の配置がそれぞれ異なるテーブルを
    // 描画する方法を紹介しています。
    public class TableTextAlign
    {
        public int CreatePDF(Stream stream)
        {
            var doc = new GcPdfDocument();
            var g = doc.NewPage().Graphics;

            DrawTable(g, g.CanvasSize.Width, g.CanvasSize.Height);

            // PDF を保存します。
            doc.Save(stream);
            return doc.Pages.Count;
        }

        static void DrawTable(GcGraphics g, float pageWidth, float pageHeight)
        {
            var host = new LayoutHost();
            var view = host.CreateView(pageWidth, pageHeight);

            var rt = view.CreateRect();
            rt.AnchorTopLeft(null, 30, 20);

            var ta = new TableRenderer(g,
                rt, FixedTableSides.TopLeft,
                rowCount: 4,
                columnCount: 3,
                gridLineColor: Color.Black,
                gridLineWidth: 1,
                rowMinHeight: 28);

            var columns = ta.ColumnRects;
            columns[0].SetWidth(150);
            columns[1].SetWidth(200);
            columns[2].SetWidth(200);

            var fmtNorm = new TextFormat
            {
                Font = GCTEXT.Font.FromFile(Path.Combine("Resources", "Fonts", "ipag.ttc")),
                FontSize = 25,
                FontSizeInGraphicUnits = true,
                FontFeatures = new FontFeature[] { new FontFeature(FeatureTag.dlig) }
            };
            var fmtOrange = new TextFormat(fmtNorm)
            {
                ForeColor = Color.Orange
            };

            var cs = new CellStyle
            {
                PaddingLeftRight = 15,
                PaddingBottom = 3,
                TextAlignment = TextAlignment.Center,
                TextFormat = fmtNorm,
                CreateTextLayout = (g, cs, data) =>
                {
                    var tl = g.CreateTextLayout();
                    tl.TextExtensionStrategy = TextExtensionStrategy.Excel;
                    tl.Append((string)data, cs.TextFormat);
                    return tl;
                }
            };
            ta.DefaultCellStyle = cs;

            ta.AddCell(0, 0, "列 1");
            ta.AddCell(0, 1, "列 2");
            ta.AddCell(0, 2, "列 3");

            ta.AddCell(new CellStyle(cs) { ParagraphAlignment = ParagraphAlignment.Far, FillColor = Color.LemonChiffon },
                1, 0, "下詰め");
            ta.AddCell(new CellStyle(cs) { ParagraphAlignment = ParagraphAlignment.Center },
                1, 1, "中央揃えの複数行テキスト");
            ta.AddCell(new CellStyle(cs) { TextAlignment = TextAlignment.Distributed },
                1, 2, "均 等 割 り 付 け の 複 数 行 テ キ ス ト");

            ta.AddCell(2, 0, "リンゴ");
            ta.AddCell(2, 1, "バナナ");
            ta.AddCell(new CellStyle(cs) { TextFormat = fmtOrange }, 2, 2, "オレンジ");
            ta.AddCell(3, 0, "リンゴ");
            ta.AddCell(3, 1, "バナナ");
            ta.AddCell(3, 2, "オレンジ");

            ta.Render();
        }
    }
}