私は、そのデータから簡単なレポートを印刷できるようにしなければならない今後のプロジェクトを持っています。それはWPFベースであり、私はどちらに行くべきか疑問に思っています。
WPFには、非常に使いやすい独自の印刷技術(XPSベース)が導入されていることがわかります。ただし、ReportViewerコントロールを使用してWindows Forms Hostコントロールに埋め込む方が簡単かどうか疑問に思う人もいます。これにより、ユーザーはさまざまな形式にエクスポートして印刷できるようになります。
WPFからの印刷/レポートの経験はありますか?どの方向をお勧めしますか?
これと同じ問題が発生し、今のところRDLC/ReportViewerを使用しています。ネイティブのWPFレポートツール(私が知っている)はなく、RDLCは非常に使いやすく、無料です。ランタイムのオーバーヘッドはわずか(約2Mb)ですが、.NET Frameworkの一部ではないため、配布することを忘れないでください。
RDLの制限
私はもともとWPFでの印刷にRDLC/ReportViewerを使用しましたが、非常に制限されていることがわかりました。私が見つけた制限のいくつかは次のとおりです。
WPFから直接印刷するのは非常に簡単です
これらの制限のため、純粋なWPFを使用してレポートを作成することを検討しましたが、それは非常に簡単なものであることがわかりました。 WPFでは、ページを生成できる独自のDocumentPaginator
サブクラスを実装できます。
Visualを取得し、ビジュアルツリーを分析し、選択した要素を非表示にして各ページを作成する単純なDocumentPaginatorサブクラスを開発しました。
DocumentPaginatorの詳細
以下は、初期化中にDocumentPaginatorサブクラスが行うことです(最初のPageCountがフェッチされたとき、または最初のGetPage()呼び出し中に呼び出されます)。
私のDocumentPaginatorのGetPageメソッドは次のとおりです。
Dispatcher.BeginInvoke(DispatcherPriority.ApplicationIdle, new Action(() => {} ));
)をフラッシュして、バックグラウンドレンダリングタスクを完了させますこれは非常に単純なコードであることが判明し、WPFで作成できるものなら何でもページに変換して印刷することができました。
追加のレポートサポート
これでページネータが機能するようになったので、スクリーン用または紙用のWPFコンテンツを作成するかどうかについてあまり心配する必要がなくなりました。実際、データ入力と編集用に作成したUIは、印刷にも非常によく機能します。
そこから単純なツールバーといくつかのコードビハインドを追加し、RDLよりもはるかに優れたWPFを中心に構築された本格的なレポートシステムを作成しました。レポートコードは、ファイルへのエクスポート、プリンターへの印刷、ページイメージの切り取り/貼り付け、およびExcelのデータの切り取り/貼り付けを行うことができます。チェックボックスをクリックするだけで、UIを「印刷ビュー」に切り替えて、印刷した場合の外観を確認することもできます。これらはすべて、わずか数百行のC#およびXAMLで実現できます。
この時点で、レポートコードにないRDLの機能は、書式設定されたExcelスプレッドシートを生成する機能だけだと思います。これをどのように行うことができるかはわかりますが、これまでのところ必要はありませんでした。データの切り取りと貼り付けだけで十分でした。
私の経験からは、ページネータを作成し、WPF自体を使用してレポートを作成することをお勧めします。
http://wpfreports.codeplex.com/ を見てください
Scryberはどうですか? PDFレポートテンプレートをxmlを使用して定義し、実行時にアプリケーション内のデータにバインドすることができます。 http://scryber.codeplex.com/
PdfReports をご覧ください。これは、iTextSharpおよびEPPlusライブラリの上に構築されたコードファーストのレポートエンジンです。 .NET 3.5+ WebおよびWindowsアプリケーションの両方と互換性があります。
Ray Burnsの回答を詳しく説明するには、実装例を探している場合は、以下を参照してください。 Custom Data Grid Document Paginator
これは素晴らしい出発点です。
私は、基本的に設計環境とデータソースマネージャーで構成される独自のレポートシステムを開発するタスクを最近達成しました。最初のタスクは、WYSWIGに似た設計環境を開発することでした。 GDI +を使用してこれを行いましたが、印刷を気にしなくても、印刷/印刷プレビューの生成は思ったよりも簡単でした。一般に、画面上のすべてのものを印刷イベントのグラフィックオブジェクトに描画するだけです。
WPFの場合も同様であると思うので、画面上にレポートを表示するだけで、印刷はほんの数行のコードになるだけです。
WPFの将来に関する全体的な政治的議論に入ることなく、私たちが見つけた最良の選択肢は、ReportViewerをWindows Forms Hostコントロールにラップすることでした。
http://blog.pineywoodstech.com/index.php/2012/01/using-Microsoft-reportviewer-with-wpf/