0

ページネーションにRichTextOverflowを使用してRichTextBlockコンテンツを印刷していますが、うまく機能していますが、段落を1ページにまとめたいと思っています。段落の途中で改ページが発生することがあります。

例は次のとおりです。

印刷の問題

パラグラフ 3 は次のページにあるはずです。ITextParagraphFormat.KeepTogether はまさに必要なもののようですが、RichTextBlock でそれを取得する方法がわかりません。

4

2 に答える 2

2

InlineUIContainer 内の TextBlock/RTB 内に段落を配置すると、単一の要素として扱われ、必要に応じて次のページにそのまま引き継がれます。このアプローチにはいくつかの副作用があるかもしれませんが、印刷ではうまくいくはずです。

于 2013-01-18T20:46:35.260 に答える
0

結局、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();      
}
于 2013-01-18T16:16:21.847 に答える