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;
}
}
}