SHOEISHA iD

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

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

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

インストールマニアックス ~ グレープシティコンポーネント meets Windows Azure

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

ActiveReports for .NET 6.0JのAzure動作検証

 ActiveReportsは、日本独自の帳票文化における高い要求を叶えることができる筆者愛用のコンポーネントです。Webアプリケ―ションと言えども、PDFなどで印刷可能な品質の出力機能が求められるときには、必須のコンポーネントです。

 ActiveReportsは、以前もWindows Azure上で動作させる方法を紹介しましたが、フルIISモードでどれだけ手間がかからないようになったかを確認したいと思います。

ActiveReportsをWindows Azure開発環境で動作させてみる

 フルIISモードになったとしても、Windows Azureの実環境にはActiveReportsはインストールされていないので、WebRole側のプロジェクトで参照設定の追加と各DLLの[ローカルコピー]プロパティをTrueにする作業を行います。

図11 参照設定
図11 参照設定

 次に、aspxファイルを新規追加して、ActiveReportsを使ってPDFを返却するページを作成します。

リスト2 ActiveReportsを使ってPDFを返却する例
Imports DataDynamics.ActiveReports
Imports DataDynamics.ActiveReports.Export.Pdf

Public Class CZ1102ActiveReports
    Inherits System.Web.UI.Page
    Protected Sub Page_Load(ByVal sender As Object,
                            ByVal e As System.EventArgs) _
                        Handles Me.Load
        If Not Me.IsPostBack Then
            Call GetRecords(False)
        End If
    End Sub

    Private Function GetRecords(ByVal isEmbedFonts As Boolean) As Boolean
        Using webClient As New System.Net.WebClient
            Dim userID As String = My.User.Name
            Dim pdfStream() As Byte
            Dim pdf() As Byte = System.Text.Encoding.UTF8.GetBytes("%PDF")

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

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

        Using _proc As New CZ1102DataClass
            ds = _proc.GetRecords
        End Using
        Using _rpt As New CZ1102Reports
            _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エクスポートオブジェクトを生成します。
            Using _pdf = New PdfExport
                ' PDFの出力用のメモリストリームを作成します。
                memStream = New System.IO.MemoryStream
                'フォントを非埋め込みにする
                If Not isEmbedFonts Then
                    _pdf.NeverEmbedFonts = "*"
                End If
                ' メモリストリームに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
End Class

 準備ができたのでWindows Azure開発環境のEmulatorで動作するかを確認してみると、該当のaspxにアクセスすればPDFがダウンロードされ、表示されることが確認できます。

ActiveReportsをWindows Azureにデプロイして動作させてみる

 ローカル開発環境での実行が確認できたので、ソリューションにあるWindwos Azureプロジェクトを右クリックして、[発行]メニューを選択します。発行が完了したらWindows Azureにアクセスして、動作を確認します。

図12 ActiveReportsのWindows Azure実環境での実行結果
図12 ActiveReportsのWindows Azure実環境での実行結果

 文字化けなどもなく、非常にスムーズに開発環境・実環境ともに正常動作しました。前回の苦労が嘘のようです。

次のページ
MultiRow for ASP.NET 1.0JのAzure動作検証

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

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

もっと読む

この記事の著者

初音玲(ハツネアキラ)

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

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

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

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/5784 2011/03/04 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング