備考
ActiveReportsを使用した帳票アプリケーションの基本的な作成方法については、これまでの連載記事も併せてご参照ください。特に、1つ前のバージョンである7.0J をもとに解説した2013年度版の記事は、9.0Jでもそのままご利用いただける内容となっています。また、2007/2008年度版の記事は3.0Jをもとに解説していますが、3.0Jのレポートと9.0Jのセクションレポートは名前空間や一部のAPIを除いて同じレポート形式であるため、セクションレポートの概念や基本的な使い方についてはこちらもご活用ください。
対象読者
- Visual Basicまたは、Visual C#を使ってプログラムを作ったことのある方
- 帳票作成ツールに興味のある方
必要な環境
-
Visual Studio 2010/2012/2013/2015のいずれかでプログラムが作れる環境
- Express EditionではActiveReportsをインストールできません。また、Visual Studio 2015についてはService Pack 2で対応しています。
本記事のサンプルコードは、C# 5.0/Visual Basic 2012で記述しています。
レイヤーでできること
9.0Jで追加された「レイヤー」機能は、ページレポートおよびRDLレポートで使用できます。
レイヤーは「層」を意味します。レイヤー機能とは、一般的に画像編集ソフトによくある機能で、複数のレイヤーを作成し、各レイヤー上に画像の要素を配置しその重ね合わせで全体の画像を表現する機能です。
ActiveReportsのレイヤー機能は、レポートデザイナ上に複数のレイヤーを作成し、各レイヤー上にレポートコントロールを配置できる機能です。 デザイン時にはレイヤーの表示/非表示や透明度を設定できるほか、実行時にはレイヤー毎に出力先(プレビュー、印刷、エクスポート)を設定できます。このレイヤー機能を使用することで、以下の要件に簡単に対応できます。
画像トレース
既存の帳票をスキャンした画像を背景レイヤーに配置し、その上にレポートコントロールを配置して帳票レイアウトを作成できます。既存の帳票をActiveReportsに移行する場合に便利です。
プレ印字の用紙にデータのみ印刷する
帳票のプレビュー時には、データとプレ印字の用紙(レイアウト枠線)を合わせて表示しますが、印刷する際にはデータのみプリンタに出力できます。 また、エクスポートにも同様に設定できます。
レイアウトテンプレートを作成する
レイアウト用の罫線のみを配置したレイヤーを作成し、デザインテンプレートとして使用できます。 また、間違ってレイアウトを変更しないようにレイヤーをロックできます。
今回は、「画像トレース」および「プレ印字の用紙にデータのみ印刷する」の2つの要件について、レイヤーの使い方を紹介します。
レイヤーの操作方法
要件ごとの説明に入る前に、レイヤーの操作方法について説明します。
[レイヤー一覧]ウィンドウ
レイヤーを操作するには、[レイヤー一覧]ウィンドウを使用します。
[レイヤー一覧]ウィンドウは、インストール後の初期状態ではVisual Studioに表示されません。[ActiveReports 9.0J]ツールバーの左から2番目の「レイヤー一覧」ボタンを押して表示します。[ActiveReports 9.0J]ツールバーが表示されていない場合は、Visual Studioのツールバー上で右クリックして「ActiveReports 9.0J」を選択し表示します。
または、Visual Studioの[表示]メニューの[その他のウィンドウ]-[ActiveReports 9.0J レイヤー一覧]からも表示できます。
なお、レイヤーの使用頻度が多い場合には、[ソリューション エクスプローラー]ウィンドウなどに結合して表示しておくといいでしょう。
レイヤーの機能
次に、レイヤーの各機能を確認します。
[レイヤー一覧]ウィンドウの上部にあるツールバーには、左から順に、[新規][削除][最前面へ移動][最背面へ移動]の4つのボタンが配置されています。これらのボタンの機能は、以下のとおりです。
[新規]ボタン
新しいレイヤーを作成します。
[削除]ボタン
選択されているレイヤーを削除します。デフォルトのレイヤー(default)は削除できません。
[最前面へ移動]/[最背面に移動]ボタン
選択されているレイヤーを最前面/最背面に移動します(レイヤー上に配置されたコントロールを一括して最前面/最背面に移動できます)。
さらに、レイヤーのリストには、[レイヤー名][表示][ロック]の3つの要素があります。これらの機能は、以下のとおりです。
[レイヤー名]フィールド
レイヤーの名称を設定します。デフォルトのレイヤー名(default)は変更できません。
[表示]チェックボックス
レイヤーの表示/非表示を設定します。一時的にレイヤーを非表示にしたい場合は、チェックをはずします。
[ロック]チェックボックス
レイヤー上に配置されたコントロールの移動、およびサイズの変更を禁止します。
注
ロック機能は、レポートデザイン時の操作ミスによる変更を防止するためのものです。このため、マウスまたはキーボードでのレポートアイテムの移動およびサイズの変更はできませんが、その他の操作(コピー、削除など)は可能です。また、[プロパティ]ウィンドウから値を変更する場合は、移動およびサイズの変更が可能です。
複数のレイヤーを使用してレポートをデザインする場合、[レイヤー一覧]ウィンドウで編集したいレイヤーを選択します。アクティブなレイヤーのプロパティは、[プロパティ]ウィンドウに表示されます。各プロパティの機能は、以下のとおりです。
DesignerLockプロパティ
レイヤー上に配置されたコントロールの移動、およびサイズの変更を禁止します。ロックする場合は、Trueに設定します。[レイヤー一覧]ウィンドウの[ロック]チェックボックスと同じ機能です。
DesignerTransparencyプロパティ
デザイン時のレイヤーの透明度を設定します。0~1の値を設定できます(0:不透明、1:透明)。0.5のように中間値を設定すると、レイヤー上のコントロールが一括で半透明に表示されます。詳細については、「画像トレース」サンプルで説明します。
DesignerTransparencyプロパティで設定したレイヤーの透明度は、デザイン時にのみ有効です。プレビューやエクスポートには反映されません。
DesignerVisibleプロパティ
レイヤーをデザイナ上に表示します。レイヤーを非表示にしたい場合は、Falseに設定します。[レイヤー一覧]ウィンドウの[表示]チェックボックスと同じ機能です。
TargetDeviceプロパティ
レイヤーの出力先を設定します。出力先は、プレビュー、印刷、エクスポートから選択できます。詳細については、「プレ印字の用紙にデータのみ印字する」サンプルで説明します。
画像トレース
ここでは、既存の帳票をトレースしてレポートレイアウトを作成する方法について説明します。付属のサンプルは、「01_画像トレース.rdlx」をご参照ください。
下絵の設定
はじめに、納品書などの既存の帳票をスキャンし、JPEGなどの画像ファイルとして保存しておきます。ここでは、「手元にある帳票はくしゃくしゃになった書類だけ」というケースを想定して、帳票をスキャンしています。
次に、ページレポートにレイヤーを追加し、レイヤー名を「下絵」に設定します。この「下絵」レイヤーにImageコントロールを配置し、さきほどスキャンした画像を表示します。また、画像をトレースしやすくするために、「下絵」レイヤーを最背面に移動し、半透明(DesignerTrasnparencyプロパティを0.5)に設定しておきます。なお、操作ミスによる画像の移動やサイズ変更を防ぐために、「下絵」レイヤーをロックしておくことをおすすめします。
レポートアイテムを配置
下絵をトレースして、デフォルトのレイヤー(default)にレポートアイテムを配置していきます。なお、こちらのレイヤーも半透明(DesignerTrasnparencyプロパティを0.5)に設定しておくと、「下絵」レイヤーの画像との重なりが確認しやすいでしょう。
このように、レイヤー機能を使用すると、既存の帳票をトレースして帳票デザインしていくことが可能です。
プレ印字の用紙にデータのみ印字する
ここでは、プレ印字の用紙にデータのみ印字する方法について説明します。付属のサンプルは、「02_プレ印字の用紙にデータのみ印字する.rdlx」をご参照ください。
TargetDeviceプロパティ
レイヤーのTargetDeviceプロパティは、レイヤーの出力先を設定します。この機能を利用して、プレビューではプレ印字用紙を含めたすべてのレイアウトを表示し、一方、印刷時にはデータのみ印字する、といった使い方が簡単にできます。
TargetDeviceプロパティは、以下の値を組み合わせて設定します。
None
レイヤーを出力しない
Screen
プレビューに出力する
Paper
印刷に出力する
Export
エクスポートに出力する
All
プレビュー、印刷、エクスポートに出力する
印刷時に出力しないレイヤーの場合は、[Paper]のチェックをはずします。
TargetDeviceプロパティの設定
プレ印字された用紙のサンプルとして、会社のロゴが表示されたハガキを使用します。
デフォルトのレイヤー(default)には、印刷するデータ(郵便番号、住所、氏名など)を表示するレポートアイテムを配置します。このレイヤーのTargetDeviceプロパティは、「All」に設定します。
次に、レイヤーを追加し、レイヤー名を「プレ印字用紙」に設定します。「プレ印字用紙」レイヤーには、プレ印字用紙のレイアウト(郵便番号の枠線や会社ロゴ)を表示します。このレイヤーは印刷しないため、TargetDeviceプロパティで[Paper]のチェックをはずします。
注
付属のサンプルではレポートアイテムを配置して作成していますが、実際には「画像トレース」サンプルと同様、スキャンした画像を使ってもかまいません。
以上の設定により、プレビュー時にはプレ印字用紙を含めた全体のレイアウトを表示し、印刷時には必要なデータだけプレ印字用紙に印字することができます。
セクションレポートでデータのみ印刷
ここでは、セクションレポートで「プレ印字の用紙にデータのみ印刷する」方法を紹介します。セクションレポートではレイヤー機能は使用できませんが、実行時にコードでプレビュー用、および印刷用にレポートを生成することで対応できます。
ただし、この方法の場合は、プレビュー用と印刷用にそれぞれレポートを生成することになります。通常はプレビュー用に作成したレポートをそのまま印刷しますが、この方法では印刷用に再度レポートを生成することになるため、通常のビューワからの印刷に対してパフォーマンス的に不利になります。
付属のサンプルは、「03_セクションレポートでデータのみ印刷.vb/.cs」をご参照ください。
レポートデザインの作成
はじめに、セクションレポートでレポートを作成します。ページレポートの場合と同様、ハガキのレイアウトおよびデータ部分を作成します。
コントロールの非表示
印刷時にプレ印字用紙のレイアウト(郵便番号の枠線や会社ロゴ)を非表示に設定するためのPublicなプロパティを追加します。
Private _ForPrint As Boolean = False Public Property ForPrint As Boolean Get Return Me._ForPrint End Get Set(value As Boolean) Me._ForPrint = value End Set End Property Private Sub Section_DataOnly_ReportStart(sender As Object, e As EventArgs) Handles MyBase.ReportStart ' 非表示にするコントロールの配列 Dim hideControls() As GrapeCity.ActiveReports.SectionReportModel.ARControl = {Me.Shape1, Me.Shape2, Me.Shape3, Me.Shape4, Me.Shape5, Me.Shape6, Me.Shape7, Me.Label1, Me.Picture1} ' コントロールを非表示にする If Me.ForPrint Then For Each c As SectionReportModel.ARControl In hideControls c.Visible = False Next End If End Sub
private Boolean _ForPrint = false; public Boolean ForPrint { get { return this._ForPrint; } set { this._ForPrint = value; } } private void Section_DataOnly_ReportStart(object sender, EventArgs e) { // 非表示にするコントロールの配列 GrapeCity.ActiveReports.SectionReportModel.ARControl[] hideControls = {this.Shape1, this.Shape2, this.Shape3, this.Shape4, this.Shape5, this.Shape6, this.Shape7, this.Label1, this.Picture1}; // コントロールを非表示にする if (this.ForPrint) { foreach (GrapeCity.ActiveReports.SectionReportModel.ARControl c in hideControls) { c.Visible = false; } } }
印刷ボタンの動作を変更する
データのみのレポートを印刷するように、印刷ボタンの動作を変更します。
Viewerコントロールのツールバーは .NET FrameworkのToolStripオブジェクトで作成されていますので、カスタマイズが可能です。カスタマイズの方法については、こちらのナレッジ文書をご参照ください。
まとめ
今回は、9.0Jの新機能であるレイヤーを紹介しました。レイヤーのDesignerTrasnparencyプロパティを使用することで、既存の帳票の画像をトレースして帳票レイアウトを作成できます。また、レイヤーのTargetDeviceプロパティを使用することで、簡単にプレ印字の用紙にデータのみ印刷できます。
次回は、「HTML5ビューワ」を使用したWebアプリケーションの作成方法を紹介します。