連載
» 2008年05月28日 00時00分 UPDATE

連載:VBで実践! 外部コンポーネント活用術:帳票作成ツール「ActiveReports .for NET 3.0J」を使う (4/4)

[岸本真二郎,デジタルアドバンテージ]
前のページへ 1|2|3|4       

印刷処理を記述する

 印刷処理の基本は、ActiveReportsデザイナで作成したレポート・ファイル(NewActiveReprot1.vb)に実装されているレポート・クラス(本稿ではNewActiveReport1クラス)のインスタンスを作成して、印刷処理を実行することです。

 [印刷]ボタンのClickイベント・ハンドラにこの印刷処理を記述します。

' [印刷]ボタンの処理
Private Sub btnPrint_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPrint.Click
  Dim rprt as New NewActiveReport1()  ' レポート・オブジェクト生成
  rprt.Run()                          ' 仮想的なレポートを作成する
  rprt.Document.Print(True, True)     ' レポートを印刷する
End Sub

[印刷]ボタンのClickイベント・ハンドラに記述した「印刷処理」のコード

 Clickイベント・ハンドラの中身は、たった3行です。最初にレポート・クラスのインスタンスを作成し、次の行のRunメソッドでレポートを作成します。作成されたレポートはレポート・クラスのDocumentプロパティで参照できます。最後にDocumentプロパティから得られるDocumentオブジェクト(DataDynamics.ActiveReports.Document名前空間)のPrintメソッドを実行して、実際の印刷を開始します。Printメソッドにはパラメータを2つ(いずれもTrueを)渡していますが、これは、事前に印刷ダイアログを表示することと、印刷の進行を示すダイアログを表示することを指示しています。

プレビュー・ウィンドウに表示する

 先ほど作成したプレビュー・ウィンドウを表示するようにしておきましょう。具体的には、[プレビュー]ボタンが押された際にプレビュー・ウィンドウ(Form2)を表示するようにします。

 レポート・クラスのインスタンスを、[印刷][プレビュー][PDF出力]ボタンが配置されたWindowsフォーム(Form1クラス)の中で生成するか、プレビュー・ウィンドウ(Form2クラス)の中で作成するかは本質的な問題ではありませんが、ここでは、先ほどの[印刷]ボタンが押された際の印刷処理と合わせて、[プレビュー]ボタンが押された際にレポート・オブジェクトを生成するようにしましょう。具体的には、[プレビュー]ボタンのClickイベント・ハンドラ内でレポート・オブジェクトを作成して、プレビュー・ウィンドウ(Form2)のプレビュー・コントロール(Viewerコントロール)に渡すようにします。

 これにはまず、プレビュー・ウィンドウ(Form2)で、レポート・オブジェクトに含まれるDocumentオブジェクトを受け取るように、Form2クラス内に次のようなSetDocumentメソッドを追加します。

public Class Form2

  public sub SetDocument(ByRef doc As DataDynamics.ActiveReports.Document.Document)
    ' ViewerコントロールのインスタンスのDocumentプロパティに
    ' Documentオブジェクトをセットする
    Me.Viewer1.Document = doc
  End Sub

End Class

印刷結果を保持するDocumentを受け取るSetDocumentメソッド

 呼び出し元のWindowsフォーム(Form1)の[プレビュー]ボタンのClickイベント・ハンドラでは、通常の印刷処理と同様にレポート・オブジェクトを作成し、プレビュー・ウィンドウ(Form2)にDocumentオブジェクトを渡した後、レビュー・ウィンドウをダイアログとして表示します。

' [プレビュー]ボタンの処理
Private Sub btnPreviewt_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPreview.Click
  Dim rprt as New NewActiveReport1()  'レポート・オブジェクト生成
  rprt.Run()                          '仮想的なレポートを作成する
  ' rprt.Document.Print( True, True ) 'レポートを印刷する
  Dim form2 As New Form2()
  form2.SetDocument( rprt.Document )
  form2.ShowDialog()
End Sub

[プレビュー]ボタンのClickイベント・ハンドラに記述した「プレビュー・ウィンドウを表示する処理」のコード

 以上で実装は完了です。実際にプレビュー・ウィンドウを表示したのが次の画面です。

dt-activereports_14.gif プレビュー・ウィンドウの表示
アプリケーションからプレビュー・ウィンドウを開く。

 プレビュー・ウィンドウには[印刷]ボタンが用意されていますので、そこから印刷することも可能です。このプレビュー・ウィンドウは、先ほど作成したSetDocumentメソッドから印刷内容が受け渡される仕組みですので、特定のレポートに依存していません。従って、複数のレポートを印刷するという場合でも、このプレビュー・ウィンドウを使い回せます。

PDFファイルにエクスポートする

 レポートを印刷する代わりに、PDFファイルにエクスポートするのも非常に簡単です。印刷内容をPDFファイルにエクスポートするには、PdfExportクラスを利用します。まずは前述した操作でツールボックスにPdfExportコンポーネントを登録ししておく必要があります。

 [印刷][プレビュー][PDF出力]ボタンが配置されたWindowsフォーム(Form1クラス)をWindowsフォーム・デザイナで開いてツールボックスから「PdfExport」をドラッグ&ドロップします。PdfExportクラスはUIを持たないコンポーネントなので、デザイナ画面の下部に表示されます。クラス名には「PdfExport1」という名前が自動的に付けられています。[PDF生成]ボタンのClickイベント・ハンドラで、このPdfExprt1コンポーネントを使用します。

 レポートを作成するまでは、これまで説明した印刷処理と同じ手順です。PDFファイルにエクスポートするには、作成したレポートを第1パラメータに渡してPdfExport1コンポーネントのExportメソッドを呼び出すだけです。また第2パラメータには、作成されるPDFファイル名(ファイル・パス)を指定します。

Private Sub btnPdf_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPdf.Click
  Dim rprt as New NewActiveReport1()
  rprt.Run()
  pdfExport1.Export(rprt.Document, "C:\\result.pdf")
End Sub

[PDF生成]ボタンのClickイベント・ハンドラに記述した「PDFファイルにエクスポートする処理」のコード

 実際にこれを実行して作成されたPDFファイルを確認してみたのが次の画面です。

dt-activereports_15.gif エクスポートされたPDFファイルを確認
Adobe ReaderでPDFファイルの内容を確認。

 ちなみに、Adobe ReaderでPDFファイルを開いて文書のプロパティを確認すると、[アプリケーション]にはActiveReportsの開発元の「Data Dynamics ActiveReports(tm) for .NET」がセットされています。PDFのバージョンは「1.3(Acrobat 4.x)」となっています。

非常に柔軟性の高い印刷処理が可能

 サンプルとして作成したアプリケーションでは、データソースとクエリを事前に指定することで非常に簡単にレポートを作成できることが確認できたと思います。しかしながら実際の業務アプリケーションではもっと複雑で、1つのクエリだけではすべてのデータが取得できない場合も多く、それに対応するためには印刷時に動的な処理を加える必要があるでしょう。

 ActiveReportsの特徴は、アンバインド処理が柔軟に行える点にあると筆者は見ています。アンバインド処理とはコントロールにデータセットのメンバをバインドしないで出力をおこなう方法です。実装の方法によってはデータソースやデータセットをActiveReportsのオブジェクトに設定せず、ActiveReportsの印刷処理に発生するイベントの中でコントロールの値を手動でセットすることも可能です。必要なら、1レコードを処理するごとに呼び出されるFetchDataイベントを自前で実装することで非常に柔軟な操作が行えます。行の内容によって背景色を変更するといった処理を記述できます。アンバインド処理では場合によってはプログラミング作業が増えて合理的でないようにも思えますが、複雑な構成のレポートを作成しなければならないような状況では役に立つことがあるでしょう。またレポートの中に、別のクエリから得られる結果をサブレポートとして印刷することも可能です。フッタには本文とは別のクエリで取得した結果を印刷するといったことも行えます。

 さらに、複数のレポートを連続して実行(Runメソッド)し、得られた結果をマージして1つの印刷物として出力することもできます。

まとめ

 ActiveReportsは、グラフの作成やレポートの作成の容易さもさることながら、(本稿では紹介できませんでしたが)データソースにバインドしない処理の自由度が非常に高い点も注目すべき特長です。またレイアウトの柔軟性も高く、ラベル印刷やExcel形式へのエクスポートなど、いろいろな用途に利用できます。レポート出力や帳票出力処理で思ったような結果が得られず困っている場合は、一度ActiveReportsを試してみてはいかがでしょうか。

「連載:VBで実践! 外部コンポーネント活用術」のインデックス

連載:VBで実践! 外部コンポーネント活用術

前のページへ 1|2|3|4       

Copyright© 1999-2017 Digital Advantage Corp. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。