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

namespace DsPdfWeb.Demos.Basics
{
    // 此示例演示如何防止段落之间出现分页符
    // 以及拆分 TextLayout 时的下一个。
    // 此示例中文本的 @Splitting 与 @{PaginatedText} 中的类似,
    // see comments in PaginatedText 以获取有关文本处理的更多信息。
    public class KeepWithNext
    {
        public int CreatePDF(Stream stream)
        {
            const int NPAR = 40;
            var doc = new GcPdfDocument();
            var tl = new TextLayout(72)
            {
                FirstLineIndent = 72 / 2,
                MaxWidth = doc.PageSize.Width,
                MaxHeight = doc.PageSize.Height,
                MarginAll = 72,

            };
            tl.DefaultFormat.Font = StandardFonts.Times;
            tl.DefaultFormat.FontSize = 12;
            // 与下一个段落放在一起的文本格式:
            var tf = new TextFormat(tl.DefaultFormat)
            {
                FontSize = tl.DefaultFormat.FontSize + 2,
                FontBold = true
            };
            // 我们在本文档中添加了一些随机的“lorem ipsum”段落,
            // 在每个段落之前添加一个“标题”,并将其放在一起
            // 带有以下“lorem ipsum”段落:
            for (int i = 0; i < NPAR; i++)
            {
                // “标题”与下一段保持在一起:
                tl.Append("标题与下一段保持在一起。", tf);
                // AppendParagraphBreak 添加段落分隔符,但防止两个段落之间出现分页符:
                tl.AppendParagraphBreak();
                // “标题”后的随机段落:
                tl.Append(Common.Util.LoremIpsum(1));
            }
            tl.PerformLayout(true);
            // 我们强制所有段落行保持在同一页上,
            // 这使得“标题”和以下段落更加明显
            // 保存在同一页面上:
            var to = new TextSplitOptions(tl)
            {
                KeepParagraphLinesTogether = true,
            };
            // 在循环中,分割并渲染文本:
            while (true)
            {
                // 'rest' 将接受不适合的文本:
                var splitResult = tl.Split(to, out TextLayout rest);
                doc.Pages.Add().Graphics.DrawTextLayout(tl, PointF.Empty);
                if (splitResult != SplitResult.Split)
                    break;
                tl = rest;
            }
            // 完毕:
            doc.Save(stream);
            return doc.Pages.Count;
        }
    }
}