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:\Silverlight4\Labs\RichTextBox\Source)で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にする必要があります。
以上です。いかがでしょうか?
印刷機能は簡単にアプリケーションに組み込むことができますので、お試し戴ければと思います。
それではまた!
鈴木 章太郎