1

RDLC/SSRS を使用しないレポート/印刷ソリューションを探しています。XPS をサポートしていることがわかっている DocumentViewer を使用したいと考えています。Visual to XPS を使用する例はたくさん見つかりましたが、ラベル、リストボックス、グリッドなどのさまざまなコントロールを使用して既存の WPF ページを取得し、それを XPS ドキュメントに作成できる例はあまり見つかりませんでした。XAML ページ全体を取得して XPS を作成するコード例はありますか?

4

2 に答える 2

4

些細なことではありません。ここでの基本的な問題は、XPS が固定ページを表すことです。既存の WPF ページは、必ずしもドキュメントのページに変換されるとは限りません。レポートがページに収まらない場合、レポートはどのように分割されますか? この情報が必要です。

できることは、レポートを FlowDocument として作成することです ( http://msdn.microsoft.com/en-us/library/aa970909.aspxを参照)。これにより、.NET フレームワークに、レポートをページ分割する方法に関する十分な情報が提供されます。これを行うと、次のようになります。

FlowDocument flowDocument;

// load, populate your flowDocument here

XpsDocument xpsDocument = new XpsDocument("filename.xps", FileAccess.ReadWrite);
XpsDocumentWriter writer = XpsDocument.CreateXpsDocumentWriter(xpsDocument);
writer.Write(((IDocumentPaginatorSource)flowDocument).DocumentPaginator);

できます。(コードは C# Book の Pro WPF から持ち上げられました)。

于 2010-01-13T09:58:00.350 に答える
1

通常、WPF ページには、Grid などのルート UI 要素があります。グリッドは特定の種類のビジュアルであるため (詳細については、「継承階層」の部分 @ http://msdn.microsoft.com/en-us/library/system.windows.controls.grid.aspxを参照してください)、必要なのはそのルート Grid 要素を他のビジュアルと同様に XPS に書き込みます。そして、埋め込まれたすべてのコントロールが自動的に XPS ドキュメントに書き込まれます。

于 2010-01-13T09:50:08.097 に答える