ActiveReportsではASP.NET Webアプリケーションに対して、HTMLの出力をカスタマイズできます。
メモ:
このチュートリアルでは、以下の作業を行います。
HTML出力のカスタマイズのためにパブリッククラスを作成する
C#コード |
コードのコピー
|
---|---|
public class MyCustomHtmlOutputter: IOutputHtml |
Visual Basic
Visual Basicコード (クラスの上に貼り付けます) |
コードのコピー
|
---|---|
Imports System Imports System.IO Imports System.Web Imports System.Text Imports GrapeCity.ActiveReports Imports GrapeCity.ActiveReports.Export.Html |
Visual Basicコード (クラス内に貼り付けます) |
コードのコピー
|
---|---|
Implements IOutputHtml '応答用HttpContextを作成します。 Private context As System.Web.HttpContext = Nothing 'HTML保存用のフォルダ作成用オブジェクトを作成します。このファイル名は、一意な名前を使います。 Private dirToSave As System.IO.DirectoryInfo = Nothing Public mainPage As String = "" Public Sub New(ByVal context As System.Web.HttpContext) If context Is Nothing Then Throw New ArgumentNullException("context") End If Me.context = context Dim dirName As String = context.Server.MapPath("ReportOutput") Me.dirToSave = New DirectoryInfo(dirName) End Sub #Region "Implementation of IOutputHtml" Public Function OutputHtmlData(ByVal info As HtmlOutputInfoArgs) As String Implements IOutputHtml.OutputHtmlData Dim temp As String = "" Select Case info.OutputKind Case HtmlOutputKind.BookmarksHtml, HtmlOutputKind.FramesetHtml temp = Me.GenUniqueFileNameWithExtension(".html") Dim fs As New FileStream(temp, FileMode.CreateNew) Me.WriteStreamToStream(info.OutputStream, fs) fs.Close() Return temp Case HtmlOutputKind.HtmlPage 'メインページをブラウザに通知できるように、作成したファイル名を保存します。 Me.mainPage = Me.GenUniqueFileNameWithExtension(".html") Dim fs As New FileStream(Me.mainPage, FileMode.CreateNew) Me.WriteStreamToStream(info.OutputStream, fs) fs.Close() Return Me.mainPage Case HtmlOutputKind.ImageJpg '.jpg形式のファイル保存用のユニークファイル名を作成します temp = Me.GenUniqueFileNameWithExtension(".jpg") Dim fs As New FileStream(temp, FileMode.CreateNew) fs = File.Create(temp) Me.WriteStreamToStream(info.OutputStream, fs) fs.Close() Return temp Case HtmlOutputKind.ImagePng '.png形式のファイル保存用のユニークファイル名を作成します temp = Me.GenUniqueFileNameWithExtension(".png") Dim fs As New FileStream(temp, FileMode.CreateNew) Me.WriteStreamToStream(info.OutputStream, fs) fs.Close() Return temp Case Else 'デフォルトのhtml temp = Me.GenUniqueFileNameWithExtension(".html") Dim fs As New FileStream(temp, FileMode.CreateNew) Me.WriteStreamToStream(info.OutputStream, fs) fs.Close() Return temp End Select End Function Public Sub Finish() Implements IOutputHtml.Finish End Sub #End Region Private Sub WriteStreamToStream(ByVal sourceStream As Stream, ByVal targetStream As Stream) 'ソースストリームのサイズを確認します Dim size As Integer = CType(sourceStream.Length, Integer) 'ソースストリームと同じサイズのバッファを作成します。 Dim buffer(size) As Byte 'ストリームのシークポインタを先頭に移動します。 sourceStream.Seek(0, SeekOrigin.Begin) 'ストリームの内容をバッファにコピーします。 sourceStream.Read(buffer, 0, size) '出力ストリームにストリームの内容をコピーします。 targetStream.Write(buffer, 0, size) End Sub Private Function GenUniqueFileNameWithExtension(ByVal extensionWithDot As String) As String Dim r As New System.Random() Dim unique As Boolean = False Dim filePath As String = "" Dim iRandom As Integer = 0 'ランダムな名前を一意になるまで生成します。 While Not unique iRandom = r.Next() 'ファイル名を作成します。 Dim sb = New StringBuilder() sb.Append(Me.dirToSave.FullName) sb.Append(Path.DirectorySeparatorChar) sb.Append(iRandom.ToString()) sb.Append(extensionWithDot) filePath = sb.ToString() If File.Exists(filePath) = False Then unique = True Else unique = False End If End While Return filePath End Function |
C#
C#コード (クラスの上に貼り付けます) |
コードのコピー
|
---|---|
using System; using System.IO; using System.Web; using System.Text; using GrapeCity.ActiveReports; using GrapeCity.ActiveReports.Export.Html; |
C#コード (クラス内に貼り付けます) |
コードのコピー
|
---|---|
//応答用HttpContextを作成します。 |
Htmlエクスポートオブジェクトを作成してレポートをエクスポートする
Visual Basic
Visual Basicコード (Page Loadイベント内に貼り付けます) |
コードのコピー
|
---|---|
Dim rpt As New rptCustHTML() ' レポート出力が準備できるまでバッファを使用します。 ' すでにバッファリングされているデータをクリアします。Response.ClearContent() ' すでにバッファリングされているヘッダーをクリアします。(例えばHTMLページのコンテントタイプ) ' HTMLエクスポートオブジェクトを作成します。 Dim HtmlExport1 As New GrapeCity.ActiveReports.Export.Html.Section.HtmlExport() ' HTMLにエクスポートします。 |
C#
C#コード (Page Loadイベント内に貼り付けます) |
コードのコピー
|
---|---|
rptCustHTML rpt = new rptCustHTML(); try { rpt.Run(false); } catch (Exception eRunReport) { //レポートの実行に失敗した場合は、ユーザーにエラーを通知する。 Response.Clear(); Response.Write("<h1>Error running report:</h1>"); Response.Write(eRunReport.ToString()); return; } //レポート出力が準備できるまでバッファを使用します。 Response.Buffer = true; //すでにバッファリングされているデータをクリアします。 Response.ClearContent(); //すでにバッファリングされているヘッダーをクリアします。(例えばHTMLページのコンテントタイプ) |
レポートの出力のためにフォルダーを追加する