ページネーションにRichTextOverflowを使用してRichTextBlockコンテンツを印刷していますが、うまく機能していますが、段落を1ページにまとめたいと思っています。段落の途中で改ページが発生することがあります。
例は次のとおりです。
パラグラフ 3 は次のページにあるはずです。ITextParagraphFormat.KeepTogether はまさに必要なもののようですが、RichTextBlock でそれを取得する方法がわかりません。
ページネーションにRichTextOverflowを使用してRichTextBlockコンテンツを印刷していますが、うまく機能していますが、段落を1ページにまとめたいと思っています。段落の途中で改ページが発生することがあります。
例は次のとおりです。
パラグラフ 3 は次のページにあるはずです。ITextParagraphFormat.KeepTogether はまさに必要なもののようですが、RichTextBlock でそれを取得する方法がわかりません。
InlineUIContainer 内の TextBlock/RTB 内に段落を配置すると、単一の要素として扱われ、必要に応じて次のページにそのまま引き継がれます。このアプローチにはいくつかの副作用があるかもしれませんが、印刷ではうまくいくはずです。
結局、2 つのページで分割された段落を次のページに「プッシュ」する方法を作成しましたが、この解決策にはあまり満足していませんが、別の方法は見つかりませんでした。
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();
}