TextAlign.cs
// 完毕:
using System;
using System.Drawing;
using System.IO;
using GrapeCity.Documents.Pdf;
using GrapeCity.Documents.Text;

namespace DsPdfWeb.Demos.Basics
{
    // 演示文本对齐选项(LRT 文本的水平对齐):
    // 左/居中/右/两端对齐。
    public class TextAlign
    {
        public int CreatePDF(Stream stream)
        {
            // 生成一段随机文本的辅助函数:
            Func<string> makePara = () => Common.Util.LoremIpsum(1, 3, 4, 15, 20);
            //
            var doc = new GcPdfDocument();
            var g = doc.NewPage().Graphics;
            // 使用 Graphics.CreateTextLayout() 确保 TextLayout 的分辨率
            // 设置为与图形相同的值(默认为 72 dpi):
            var tl = g.CreateTextLayout();
            tl.DefaultFormat.Font = StandardFonts.Times;
            tl.DefaultFormat.FontSize = 12;
            // 设置布局大小(整页,边距为 1 英寸):
            tl.MaxWidth = doc.Pages.Last.Size.Width - 72 * 2;
            tl.MaxHeight = doc.Pages.Last.Size.Height - 72 * 2;
            // “标题”的强文本格式:
            var tf = new TextFormat(tl.DefaultFormat) { Font = StandardFonts.TimesBold };
            // 插入点:
            var ip = new PointF(72, 72);
            // TextAlignment 控制文本在布局矩形内的水平对齐方式。
            // 我们以不同的对齐方式呈现 5 个段落。
            // 领导:
            tl.TextAlignment = TextAlignment.Leading;
            tl.Append("TextAlignment.Leading: ", tf);
            tl.Append(makePara());
            tl.PerformLayout(true);
            g.DrawTextLayout(tl, ip);
            // 提前插入点,在段落之间添加一行的高度:
            ip.Y += tl.ContentHeight + tl.Lines[0].Height;
            // 中心:
            tl.Clear();
            tl.TextAlignment = TextAlignment.Center;
            tl.Append("TextAlignment.Center: ", tf);
            tl.Append(makePara());
            tl.PerformLayout(true);
            g.DrawTextLayout(tl, ip);
            // 提前插入点,在段落之间添加一行的高度:
            ip.Y += tl.ContentHeight + tl.Lines[0].Height;
            // 尾随:
            tl.Clear();
            tl.TextAlignment = TextAlignment.Trailing;
            tl.Append("TextAlignment.Trailing: ", tf);
            tl.Append(makePara());
            tl.PerformLayout(true);
            g.DrawTextLayout(tl, ip);
            // 提前插入点,在段落之间添加一行的高度:
            ip.Y += tl.ContentHeight + tl.Lines[0].Height;
            // 合理:
            tl.Clear();
            tl.TextAlignment = TextAlignment.Justified;
            tl.Append("TextAlignment.Justified: ", tf);
            tl.Append(makePara());
            tl.PerformLayout(true);
            g.DrawTextLayout(tl, ip);
            // 提前插入点,在段落之间添加一行的高度:
            ip.Y += tl.ContentHeight + tl.Lines[0].Height;
            // 分散式:
            tl.Clear();
            tl.TextAlignment = TextAlignment.Distributed;
            tl.Append("TextAlignment.Distributed: ", tf);
            tl.Append(makePara());
            tl.PerformLayout(true);
            g.DrawTextLayout(tl, ip);
            // 完毕:
            doc.Save(stream);
            return doc.Pages.Count;
        }
    }
}