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にアクセスして、動作を確認します。
文字化けなどもなく、非常にスムーズに開発環境・実環境ともに正常動作しました。前回の苦労が嘘のようです。