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ページのコンテントタイプ)
|
|
レポートの出力のためにフォルダーを追加する