SHOEISHA iD

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

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

ComponentZine(ActiveReports)

ActiveReports+WebMatrix 2を使ってWindows Azureで簡単PDF出力

「ActiveReports for .NET 6.0J(SP5)」の利用

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

ActiveReportsをWebMatrix 2で使う

 空のWebサイトができたら、ActiveReportsを使って環境変数の一覧をPDF出力するサンプルを作ってみましょう。

帳票定義体の作成

 ActiveReportsのProfessional版にはランタイムデザイナーというサンプルが付属しています。このサンプルを使うとActiveReportsの帳票定義体ファイルを作成することができます。

 「CZ1210ActiveReports」フォルダに「Context」フォルダを追加し、そこに環境変数名と環境変数値をペアで出力するように設定した帳票定義を作成して、CustomersReport.rpxという名前で保存しましょう。

Binフォルダへの追加

 ActiveReportsはWindowsやWebMatrix 2に付属しているコンポーネントではないので、初期状態ではActiveReportsのDLLはWebMatrix 2に組み込まれていません。

 WebMatrix 2ではDLLはBinフォルダに格納することになるので、最初に必要なのはActiveReportsのDLLをBinフォルダに格納することです。

図5 ActiveReportsのDLLをBinフォルダに追加
図5 ActiveReportsのDLLをBinフォルダに追加

 DLLファイルの追加は、Binフォルダを右クリックして[既存のファイルの追加]メニューを選択し、開いたダイアログでActiveReportsのインストールフォルダにある「Bin\v6.5.4530.1」フォルダの中から必要なDLLを指定して行います。

 今回のサンプルで必要なのは次のファイルです。

  • ActiveReports.Document.dll
  • ActiveReports.Document.xml
  • ActiveReports.PdfExport.dll
  • ActiveReports.PdfExport.xml
  • ActiveReports.Viewer6.dll
  • ActiveReports.Viewer6.xml
  • ActiveReports6.dll
  • ActiveReports6.xml
  • Ja\ActiveReports.Document.resources
  • Ja\ActiveReports.PdfExport.resources
  • Ja\ActiveReports.Viewer6.resources
  • Ja\ActiveReports6.resources

ASP.NET Webページの追加

 ActiveReportsを使う準備ができたので、PDF出力するASP.NET Webページを作成します。

 WebMatrix 2でサイト名を右クリックして「新しいファイルの追加」メニューを選択し、ダイアログを表示します。

図6 ASP.NET Webページの追加
図6 ASP.NET Webページの追加

 左側のメニューの「すべて」をクリックし「VBHTML」アイコンを選択して「index.vbhtml」と名前を付けて[OK]ボタンをクリックします。

ActiveReports操作用コードを記述

 Index.vbhtmlに、CustomersReport.rpxに情報を埋め込んでPDF出力するコードを記述します。Index.vbhtmlはRazor形式という書式でASP.NET Webページを記述します。

リスト1 index.vbhtmlの定義例
@Imports DataDynamics.ActiveReports
@Imports DataDynamics.ActiveReports.Export.Pdf
@Imports System.Data

@Code
    Dim pdfStream() As Byte

    pdfStream = GetPdfDatas()
    ' ブラウザに対してPDFドキュメントの適切なビューワを使用するように指定します。
    Response.ContentType = "application/pdf"
    Response.AddHeader("content-disposition", "inline; filename=ActiveReports.PDF")
    ' 出力ストリームにPDFのストリームを出力します。
    Response.BinaryWrite(pdfStream)
    ' バッファリングされているすべての内容をクライアントへ送信します。
    Response.End()
End Code

@Functions
    Private block As Object = Nothing

    ''' <summary>
    ''' PDFデータを取得する
    ''' </summary>
    Public Function GetPdfDatas() As Byte()
        Dim memStream As System.IO.MemoryStream
        Dim ds As DataSet = GetRecords()

        Using rpt As New ActiveReport
            Dim report As New DataDynamics.ActiveReports.ActiveReport()
            Using xtr As New System.Xml.XmlTextReader(Server.MapPath("~/Content/CustomersReport.rpx"))
                rpt.LoadLayout(xtr)
                xtr.Close()
            End Using
            rpt.Document.Printer.PrinterName = ""
            rpt.PageSettings.PaperKind = System.Drawing.Printing.PaperKind.A4
            rpt.PageSettings.Orientation = Document.PageOrientation.Portrait
            rpt.PageSettings.Margins.Top = ActiveReport.CmToInch(0.5F)
            rpt.PageSettings.Margins.Bottom = ActiveReport.CmToInch(0.5F)
            'データを割り当てる
            rpt.DataSource = ds.Tables("Enviroment")
            ' レポートを作成します。
            rpt.Run(False)
            ' PDFの出力用のメモリストリームを作成します。
            memStream = New System.IO.MemoryStream
            ' PDFエクスポートオブジェクトを生成します。
            Using _pdf = New PdfExport
                ' メモリストリームにPDFエクスポートを行います。
                _pdf.Security.Use128Bit = True
                _pdf.Security.OwnerPassword = "hatsune"
                _pdf.Security.Permissions = PdfPermissions.AllowPrint
                _pdf.Security.Encrypt = True
                _pdf.Export(rpt.Document, memStream)
            End Using
        End Using
        Return memStream.ToArray()
    End Function

    Private Function GetRecords() As DataSet
        Dim ds As New DataSet

        With block
            ds.Tables.Add("Enviroment")
            ds.Tables("Enviroment").Columns.Add("Name", GetType(String))
            ds.Tables("Enviroment").Columns.Add("Value", GetType(String))
        End With
        For Each env In Environment.GetEnvironmentVariables
            Dim row As DataRow = ds.Tables("Enviroment").NewRow
            row("name") = env.key
            row("value") = env.value
            ds.Tables("Enviroment").Rows.Add(row)
        Next

        Return ds
    End Function

End Functions

 RazorなASP.NET Webページでは、@code~End Codeの間に記述したコードがVisual Basicのコードとして認識されJITコンパイルされて実行されます。その中で使っているプロシージャは@Functions~End Functionsの間に記述します。

 大まかな処理の流れは、GetRecordsで作成したデータセットをGetPdfDatasで帳票定義体と合成してメモリ上のバイナリーデータとしてPDF化し、それをindex.vbhtmlがリクエストされたときのレスポンスデータとして返却します。

WebMatrix 2での実行

 Index.vbhtmlにコードが記述できたのでさっそく実行してみましょう。

 WebMatrix 2のリボンの一番左にある[実行]アイコンをクリックします。

 ブラウザにはDefault.cshtmlの内容である空白ページが表示されるのでURL欄に「index」と『後ろに追記』して[Enter]キーを押してページを移動します。

図7 WebMatrix 2での実行
図7 WebMatrix 2での実行

 残念ながら「ライセンスがない状態でビルドされたため実行できません」とエラーが表示されて正常に動作しませんでした。

次のページ
ライセンスエラー対策

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

  • X ポスト
  • このエントリーをはてなブックマークに追加
ComponentZine(ActiveReports)連載記事一覧

もっと読む

この記事の著者

初音玲(ハツネアキラ)

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

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

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

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/6845 2012/10/26 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング