none
WPFでの印刷、FlowDocumentがDocumentPaginatorでうまく改ページできない。 RRS feed

  • 質問

  • VisualStudio2008でWPFアプリケーションを作成しております。

    FlowDocumentを印刷するアプリケーションを作成中なのですが、
    既定のプリンタサイズより、FlowDocumentのサイズが大きい場合、
    改ページしようと考え、FlowDocumentにIDocumentPagintaorを実装させて、
    DocumentPaginatorのラッパークラスを作成しています。
    (例えば、600*1200 のFlowDocumentに対して 600*600のページサイズとする)

    参考にしているのは以下のサイトです。
    http://blogs.msdn.com/fyuan/archive/2007/03/10/convert-xaml-flow-document-to-xps-with-style-multiple-page-page-size-header-margin.aspx

    参考のとおりに作ったつもりなのですが、上記の場合、
    改ページがうまくいかず、FlowDocumentが縮小され、下部分が途切れ、1ページしかできない
    Xpsファイルしかできません。

    もし、何かご存じの方おられました、ぜひ知恵をお貸しください。
    よろしくお願い致します。


    1/28追記
    質問が曖昧だったためか、なかなかお返事いただけないので、
    質問の内容を少し改めます。

    要するに、私のDocumentPaginatorの働きを理解できていないため、このような状態になっています。
    私の考えているDocumentPagintatorの働きを記載しますので、間違いがあれば指摘いただけると
    ありがたいです。

    DocumentPaginatorは、1つのドキュメントから複数のページドキュメントを作成できる、とあります。
    ここで私が考えている働きとは、印刷する用紙のドキュメントのサイズに対して、
    印刷したいドキュメントのサイズを設定することで、自動的にドキュメントを分割、改ページしてくれるものだと
    考えています。
    ただ、どこで、どのタイミングでその処理が行われているかはわかっておらず、
    かつ、その改ページのルールがどうなっているかもわかりません。
    もしかしたらそのあたりも全てDocumentPaginatorのラッパークラスに書く必要があるのかもしれませんが、
    タイミングがわからないため、どこでどうすればよいかわかりません。

    私の認識に誤りがある可能性は高いので、もしよろしければご指摘ください。
    2010年1月26日 7:06

回答

  • 申し訳ありません、自己解決しました。

    なぜうまくいかなかったかといいますと、FlowDocumentを自動で改ページしてくれる単位はBlocksごとであり、
    1つの大きいBlockの場合に改ページするなら、自身で何かしら細かくルールを作ってやるしかないようです。

    よくよくちゃんと考えればそうだな、という感じですね。

    稚拙な質問失礼しました。
    • 回答としてマーク hitmaker 2010年1月28日 7:51
    2010年1月28日 3:24