2

非常に大きく複雑なオブジェクトを印刷する必要があります.2次元マトリックスの仮想化は、左側と上部に2つのテーブルがあり、中央にテーブルの交点を表しています。各テーブルには、5000 を超えるレコードを含めることができます。だから私はこれらすべてのことをコントロールしました。それはかなり良い仕事です。しかし、顧客はそれを印刷したいと考えています。マトリックスが 1 ページに対して大きすぎる場合、ピースに分割して各部分を印刷する必要があります。

用紙サイズごとにマトリックスを分割し、各部分のフロードキュメントを作成できます。しかし、それは多くの問題を伴う臭いです。特に、テーブルにはカスタムの列数があるため、すべての列を 1 つのドキュメントに配置することはできません。

したがって、これを実装する最も簡単な方法が存在することを願っています。(エクセルからの印刷を除く)

4

1 に答える 1

0

これを行う「簡単な」方法は、ドキュメントのサイズのビットマップを作成し、ドキュメント内のすべてのコントロールを でこのビットマップに描画しRenderTargetBitmap、ビットマップをページの四角形の幅と高さのタイルに分割し、各タイルをプリンター。

そうしないでください。

画面上で見栄えがよくても、紙の上では見栄えがよくないことがすぐにわかります。フォントがピクセル化され、グラデーションがディザリングされ、テキストが途切れ、文書内の空白領域によりテキストが異常な位置に印刷されます。WPF コントロールは UI スレッドからのみ使用でき、それらを大量に描画すると UI がブロックされる可能性があります。

その代わり; プリンターの機能を活用してください。テーブルが3つ?各表を個別に印刷します。UI を描画しようとする代わりに、DrawingVisualセルまたはグラフィックごとに を作成します。ページ上に各セルを配置し、余白からはみ出すかどうかをテストします。含まれている場合は、水平方向 (右マージンからはみ出す場合) または垂直方向 (下マージンからはみ出す場合) のスロップ リストに追加します。最初のページを描画したら、すべてのビジュアルを水平スロープに描画します。水平スロープが空になるまでそれを続けてから、垂直スロープでもう一度やり直してください。そしてまた次のテーブルへ。DrawingVisuals は UI スレッドを必要としないため、バックグラウンドで実行できます。

DocumentPaginatorこれをサポートしている可能性があります。私はそれを試していません。幸運を。

于 2012-11-01T00:59:02.237 に答える