Partager via


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 LabSourceフォルダ(例:C:\Silverlight4\Labs\RichTextBox\Source)でEx03Endを選択して開いてみてください。

印刷ボタンのクリックイベントハンドラ内の処理

 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にする必要があります。

以上です。いかがでしょうか?

印刷機能は簡単にアプリケーションに組み込むことができますので、お試し戴ければと思います。

それではまた!

鈴木 章太郎