2

WPFでメモリコレクションまたは可変サイズで印刷する方法はありますか?

ListView コントロールを出力する次のコードを使用しています。ただし、コンテンツが垂直スクロール バーよりも大きい場合は、コンテンツが引き継がれて切り取られます。

 PrintDialog printDialog = new PrintDialog();
                printDialog.ShowDialog();

                printDialog.PrintVisual(lvDocumentSummary, "testing printing!");
4

6 に答える 6

6

複数のページを印刷するには、DocumentPaginator を実装するクラスを使用する必要があります。FixedDocument はより複雑な実装の 1 つですが、FlowDocument はより単純なものです。

FlowDocument fd = new FlowDocument();

foreach(object item in items)
{
    fd.Blocks.Add(new Paragraph(new Run(item.ToString())));
}

fd.Print();

また

PrintDialog pd = new PrintDialog();
pd.PrintDocument(fd);
于 2008-12-19T09:41:51.603 に答える
2

FixedDocument は、他の xaml ドキュメントと同様に、(FlowDocument 以外の) DataBinding をサポートします。リストビューを固定ドキュメントでホストし、DocumentViewer (印刷サポートが組み込まれている) で表示するだけです。

ただし、リストが 1 ページに対して長すぎる場合、FixedDocument は (flowdocument のように) 新しいページを自動的に生成しません。したがって、これは純粋な xaml では実行できないため、コードを使用して手動で新しいページを作成する必要があります。

于 2008-10-16T10:05:27.480 に答える
0

WPF からきれいに印刷したい場合は、FixedDocument を作成して印刷する必要がありますが、残念ながら、印刷しようとしているものによっては非常に複雑になる可能性があります。

ここに FixedDocument を作成するサンプル コードがあります: http://www.ericsink.com/wpf3d/B_Printing.html

于 2008-10-16T09:59:55.680 に答える
-1

興味深いことに、ListView は仮想化されていますか? そうであれば、オブジェクトが描画されていない可能性があります。Petzoldの印刷の例を見てみましょう。

于 2008-10-15T15:23:15.420 に答える
-4

これがこの問題に対する私の解決策です。ちょっと不安定ですが、私のシナリオでは機能します。

コレクションを読み取り、それを文字列に変換します。コレクション全体が StringBuilder オブジェクトに存在するようになりました。次に、クライアントのマシン上のファイルにテキスト/文字列を表示し、メモ帳プロセスを /p で実行して、ファイルの内容を出力しました。

それは機能し、コンテンツを正常に印刷します。

最後に、5 秒後に呼び出され、ファイルを削除するタイマーがあります。基本的に 5 秒以内に、要求は既にプリンター キューに送信されます。しかし、より良い解決策は、印刷ジョブがこの方法で処理されたことを確認することです。ジョブが実行されたことを 100% 確信できます。

于 2008-10-15T20:51:07.347 に答える