7 November 2010 0 Comments

Silverlight 4におけるアプリケーション要件への挑戦 – Printing

皆様、こんにちは!本日はSilverlight 4 の印刷機能につき、ご紹介したいと思います。 印刷機能 Silverlight 4 は、レポートやドキュメントの印刷を可能にする API を搭載しています。画面 UI とは異なる印刷プレビューを作成、表示することも可能です。ページの印刷と、印刷イベントをサポートしています。具体的なサンプルアプリケーションでこの点を詳しく見てみましょう。 印刷 – Print Document クラス PrintDocument という印刷用のオブジェクトがあります。これをまず生成します。イベントとしては、 PrintPage が重要です。印刷ページ毎にこのPrintPageのイベントが走るので、ここで印刷の処理を行うということになります。実際の実装は非常にシンプルです。下記のソースコードをご覧ください。 印刷処理 PrintDocument pd = new PrintDocument(); pd.DocumentName = “印刷文書名”; // 印刷ドキュメント名 pd.PrintPage += (s, args) => // ページ印刷ごとのイベント発生 { args.PageVisual = LayoutRoot; // ①PageVisualの利用 args.HasMorePages = false; // ②HasMorePagesプロパティ }; pd.EndPrint += (s, args)=> //印刷終了時のイベント発生 { MessageBox.Show(“印刷完了”); } pd.Print(); // 印刷開始 ① PrintPageのイベントが呼ばれたとき、 PageVisual の中に、印刷したいものを代入するということになります。ここでは LayoutRoot が指定されています。ここで、画面のXAMLエディタを開いて、中身を見て戴くと、SilverlightのUIの一番TopのGridが、通常LayoutRootですので、この場合には、画面ごとそっくり印刷されることになります。 ということは、このPageVisualに代入するものを変更すれば他の帳票等が印刷可能です。XAMLで別の帳票画面を作成して、それを指定すれば良い訳です。 この場合のソースコードについては、 Silverlight Training Kit にある RichTextBox Lab の Source フォルダ(例: C:Silverlight4LabsRichTextBoxSource )で Ex03 の End を選択して開いてみてください。 印刷ボタンのクリックイベントハンドラ内の処理 private void btnPrint_Click(object sender, RoutedEventArgs e) { PrintDocument theDoc = new PrintDocument(); string DocumentName = “Silverlight 4 Text Editor – Opened Document”; theDoc.PrintPage += (s, args) => { args.PageVisual = rtb; args.HasMorePages = false; }; theDoc.EndPrint += (s, args) => { MessageBox.Show(“The document printed successfully”, “Text Editor”, MessageBoxButton.OK); }; theDoc.Print(DocumentName); } ここでは PageVisual に、 rtb (このプロジェクト内で使われているRichTextBoxの名前)を指定しています。 ② これは重要なプロパティで、これ以上ページがない場合には False という設定にしています。複数ページを印刷したいときには、これを True にしておき、全ての印刷が終了したら、これを False にする必要があります。 以上です。いかがでしょうか? 印刷機能は簡単にアプリケーションに組み込むことができますので、お試し戴ければと思います。 それではまた! 鈴木 章太郎

See the original post here: 
Silverlight 4におけるアプリケーション要件への挑戦 – Printing

If you liked this post, buy me a Coffee.

Leave a Reply