SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

現役エンジニア直伝! 「現場」で使えるコンポーネント活用術(ActiveReports)

帳票Webアプリ実践構築ガイド
ActiveReports for .NETを使いこなす!~その2

  • このエントリーをはてなブックマークに追加

PDFを自動生成

 帳票定義体が作成できたら、CZ0906PdfBoundプロジェクトに帳票定義体 からPDFを生成するコードを追加します。

 今回のサンプルでは、帳票定義体に設定するデータはASP.NET WebサービスのCZ0906Boundから受け取ることになるので、帳票定義体のあるCZ0906PdfBoundプロジェクトと同一ソリューションにしておくと、テスト時にデバッグ実行しやすくなります。

図9 ASP.NET WebサイトとASP.NET Webサービスのソリューションを作成
図9 ASP.NET WebサイトとASP.NET Webサービスのソリューションを作成

PDF出力用の参照設定

 CZ0906PdfBoundサンプルでは、PDFの出力を行うためにActiveReportsのPDF出力用の参照設定を追加します。

図10 PdfExportへの参照を追加
図10 PdfExportへの参照を追加

Webフォームにコードを記述

 ソリューションの準備ができたなら、帳票定義体からPDFを生成する コードを記述します。

リスト3 Default.aspx.vb
Imports DataDynamics.ActiveReports

Partial Class _Default
    Inherits System.Web.UI.Page

    Private Sub Page_Load(ByVal sender As Object, _
                          ByVal e As System.EventArgs) Handles MyBase.Load
        If Not Me.IsPostBack Then
            Using _web As New WebBillBound.BillBound
                Dim rpt As New Seikyu_Report()

                rpt.DataSource = _web.GetRecords("admin", "", "").Tables(0)
                ' 仮想プリンタを設定します。
                rpt.Document.Printer.PrinterName = ""
                rpt.PageSettings.PaperKind = Drawing.Printing.PaperKind.A4
                rpt.PageSettings.Orientation = Document.PageOrientation.Portrait
                rpt.PageSettings.Margins.Top = ActiveReport3.CmToInch(0.5F)
                rpt.PageSettings.Margins.Bottom = ActiveReport3.CmToInch(0.5F)
                '
                rpt.Run()
                Using _stream As New System.IO.MemoryStream()
                    Dim p As New DataDynamics.ActiveReports.Export.Pdf.PdfExport()

                    p.Export(rpt.Document, _stream)
                    _stream.Position = 0
                    Response.ContentType = "application/pdf"
                    Response.AddHeader("content-disposition", _
                                       "inline; filename=sample.pdf")
                    Response.BufferOutput = True
                    Response.BinaryWrite(_stream.ToArray())
                End Using
                Response.End()
            End Using
        End If
    End Sub
End Class

 ブラウザでURLにDefault.aspxを指定すると、ASP.NETはDefault.aspx.vbのPage_Loadイベントを呼び出します。下記が、リスト3の処理内容です。

  1. BillBoundサービスを呼び出してDataSetを取得し、帳票定義体のDataSourceプロパティに設定
  2. PDFファイルを生成する際に参照するプリンタとして、仮想プリンタを設定
  3. Runメソッドで帳票を生成
  4. PdfExportを使ってDocumentをMemoryStreamに出力
  5. Webアプリのレスポンスとして、Response.BinaryWriteでMemoryStreamに設定されたPDFファイルの内容をブラウザに返却
※注

(2)は、サーバにつながっているプリンタの情報を取得しないようにするためです。仮想プリンタを設定することにより、サーバにつながっているプリンタに依存せずPDFファイルを生成できます。

実行

 CZ0906PdfBoundを実行すると、以下のようになります。

図11 CZ0906PdfBoundの実行結果
図11 CZ0906PdfBoundの実行結果
※注

 ブラウザが稼働しているPCの環境によっては、拡大率が低いときに罫線が非表示になる場合があります。

次のページ
実運用環境展開時の注意点

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
現役エンジニア直伝! 「現場」で使えるコンポーネント活用術(ActiveReports)連載記事一覧

もっと読む

この記事の著者

初音玲(ハツネアキラ)

 国内SIerのSEでパッケージ製品開発を主に行っており、最近は、空間認識や音声認識などを応用した製品を手掛けています。 個人的には、仕事の内容をさらに拡張したHoloLensなどのMRを中心に活動しています。 Microsoft MVP for Windows Development ブログ:http://hatsune.hatenablog.jp/

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/4026 2009/06/12 15:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング