ActiveReports for .NET 6.0JのAzure動作検証
ActiveReportsは、日本独自の帳票文化における高い要求を叶えることができる筆者愛用のコンポーネントです。Webアプリケ―ションと言えども、PDFなどで印刷可能な品質の出力機能が求められるときには、必須のコンポーネントです。
ActiveReportsは、以前もWindows Azure上で動作させる方法を紹介しましたが、フルIISモードでどれだけ手間がかからないようになったかを確認したいと思います。
ActiveReportsをWindows Azure開発環境で動作させてみる
フルIISモードになったとしても、Windows Azureの実環境にはActiveReportsはインストールされていないので、WebRole側のプロジェクトで参照設定の追加と各DLLの[ローカルコピー]プロパティをTrueにする作業を行います。
次に、aspxファイルを新規追加して、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にアクセスして、動作を確認します。
文字化けなどもなく、非常にスムーズに開発環境・実環境ともに正常動作しました。前回の苦労が嘘のようです。


