我正在打印 RichTextBlock 内容,使用 RichTextOverflow 进行分页,效果很好,但我想将段落放在一页上,现在有时我在段落中间有分页符。
这是示例:
第 3 段应该在下一页,似乎 ITextParagraphFormat.KeepTogether 正是我所需要的,但不知道如何为 RichTextBlock 获取它。
我正在打印 RichTextBlock 内容,使用 RichTextOverflow 进行分页,效果很好,但我想将段落放在一页上,现在有时我在段落中间有分页符。
这是示例:
第 3 段应该在下一页,似乎 ITextParagraphFormat.KeepTogether 正是我所需要的,但不知道如何为 RichTextBlock 获取它。
如果您将段落放在 InlineUIContainer 内的 TextBlock/RTB 中,它将被视为单个元素,并在需要时完整地延续到下一页。这种方法可能有一些副作用,但我相信它应该适用于打印。
毕竟我做了一个方法,将在两页上被打破的段落“推”到下一页,我对这个解决方案不是很满意,但我没有找到另一种方法
public static void BreakBeforeLastParagraph(RichTextBlockOverflow rto)
{
if (!rto.HasOverflowContent)
return;
var pageBreak = rto.ContentEnd.Offset;
var brokenPar = rto.ContentSource.Blocks.FirstOrDefault(pr => pr.ElementStart.Offset <= pageBreak && pr.ElementEnd.Offset >= pageBreak);
if (brokenPar != null)
{
double spacerSize = pageBreak - brokenPar.ElementStart.Offset;
var spacer = new Paragraph();
spacer.Margin = new Windows.UI.Xaml.Thickness(0,spacerSize, 0,0);
rto.ContentSource.Blocks.Insert(rto.ContentSource.Blocks.IndexOf(brokenPar), spacer);
}
rto.UpdateLayout();
}