WebアプリケーションでActiveReports帳票を印刷する
ActiveXビューワによる帳票の印刷・プレビュー
ActiveReportsでは、Windows Formsで利用可能なViewerコントロール同様に、Webアプリケーションにおいても、高機能なビューワを利用することができます。WebViewerコントロールを用いたアプリケーションは、Professional版でしか利用できませんが、ActiveXビューワ(arview2.cab)はStandard版でも利用できますので、今回はその使い方について紹介したいと思います。
Webアプリケーションに帳票生成ファイルを追加する
Webサイトのプロジェクト配下に直接レポートファイルを設置すると、ActiveReportsレポートデザイナのパフォーマンスが落ちてしまいます。WebアプリケーションでActiveReports帳票を開発する場合は、別途クラスライブラリのプロジェクトを作成し、それを参照した方がよいでしょう。
Webアプリケーションの実行時にはWebサイトのプロジェクト配下に直接配置しても特に問題はありません。
以下の例では、WEBアプリケーション配下のRptフォルダにレポートファイルを配置しています。
レポートレイアウトの作成方法はWindowsアプリケーションの場合と同様です。
WebページにActiveXビューワを配置する
次に、Webページでのビューワ表示部分を作成します。Webアプリケーションプロジェクトにarview2.cabを追加し、aspxファイル内では、<object>タグを使用してActiveXビューアを埋め込みます。
<object id="arv" codebase="arview2.cab#Version=2,4,2,1303"> </object>
各画面でビューワのサイズなどを指定したものを共通で利用したい場合は、ビューワ部分のHTMLソースを外部ファイル化し、インクルードするように作っておくとその後の更新が楽になります。
次に、HTMLの<head>タグの中に、データパスを指定するためのVBScriptコードを追加します。ActiveXビューワではVBScriptでプロパティを設定することで、DocumentクラスのPrintメソッドを実行するのと同様、簡単にビューワの表示・印刷ダイアログの初期値を簡単に変更できます。
<script type="text/vbscript" language="vbscript"> <!-- Sub arv_ControlLoaded() 'arv: <object>タグのid属性で指定した値 arv.DataPath = "Default.aspx?ReturnReport=1" End Sub //--> </script>
この他にも、ActiveXビューワには初期表示設定や、印刷ダイアログを表示して印刷する際の設定など、さまざまなプロパティが用意されています。
関数 | 内容 |
arv_ControlLoaded() | ビューワの読み込み |
arv_LoadedComplete() | ビューワ内のレポートの読み込み完了 |
プロパティ | 設定値 |
Printer.PaperSize | 9=A4:8=A3 |
Printer.Orientation | 1=縦:2=横 |
Printer.DeviceName | 使うプリンタデバイス |
Zoom | 初期のズーム |
Printer.RenderMode=1 | クライアント環境のOSがWindows 98/Meである場合に、文字間隔が不正になる問題を回避するためのコード |
以下のプロパティはビューワ表示ではなく、直接印刷ジョブをプリンタへ送信する場合に指定します。
プロパティ | 設定値 |
Printer.DispleyProgressDialog | True(プログレスダイアログ表示可否。直接印刷を行わない場合はFalse) |
PrintReport | True(直接印刷時のダイアログ表示可否) |
帳票を生成する
ページにActiveXビューワの表示領域を追加したら、次はビューワで表示するための帳票データの生成処理を実装します。
ASP.NET WebフォームのPage_Loadイベントに以下の処理を追加します。この処理ではActiveReports帳票を生成し、データをMemoryStreamオブジェクトに一旦格納したのちバイナリストリームとして返しています。
protected void Page_Load(object sender, EventArgs e) { MemoryStream outStream = new MemoryStream(); Rpt.NewActiveReport1 rpt = new Rpt.NewActiveReport1(); rpt.Run(false); //メモリストリームに帳票データを保存します。 rpt.Document.Save(outStream, DataDynamics.ActiveReports.Document.RdfFormat.AR20); //バッファストリームのシークポインタの位置を先頭に移動します。 outStream.Seek(0, SeekOrigin.Begin); //ストリーム読み込み用のバッファを作成し、 //ストリームのデータを読み込みます。 byte[] bytes = new byte[outStream.Length]; outStream.Read(bytes, 0, (int)outStream.Length); //出力内容をバッファ ストリームから削除します。 this.Page.Response.ClearContent(); //ヘッダへの出力内容をバッファ ストリームから削除します。 this.Page.Response.ClearHeaders(); //出力ストリームにレポートを出力します。 this.Page.Response.BinaryWrite(bytes); }
Protected Sub Page_Load(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles Me.Load Dim outStream As New MemoryStream Dim report1 As New NewActiveReport1() report1.Run(False) report1.Document.Save(outStream, _ DataDynamics.ActiveReports.Document.RdfFormat.AR20) 'バッファストリームのシークポインタの位置を先頭に移動します。 outStream.Seek(0, SeekOrigin.Begin) 'ストリーム読み込み用のバッファを作成し、 'ストリームのデータを読み込みます。 Dim bytes(outStream.Length) As Byte outStream.Read(bytes, 0, outStream.Length) '出力内容をバッファストリームから削除します。 Me.Page.Response.ClearContent() 'ヘッダへの出力内容をバッファ ストリームから削除します。 Me.Page.Response.ClearHeaders() '出力ストリームにレポートを出力します Me.Page.Response.BinaryWrite(bytes) End Sub
コードをビルドしてWeb Formを表示し、Webページにビューワと帳票が表示されれば成功です。
おわりに
今回はActiveReportsの罫線機能とデータの折り返し、プレビューと印刷機能について紹介しました。次回は、ActiveReportsで利用できるさまざまなデータソースに関する話題と、Webサービスを利用したネットワーク帳票などについて紹介する予定です。