レポートをJPEG形式やBMP形式の画像で出力する方法は?

文書番号 : 37858     文書種別 : 使用方法     登録日 : 2015/10/30     最終更新日 : 2015/10/30
文書を印刷する
対象製品
ActiveReports for .NET 9.0J
詳細
画像ファイルに出力する方法は、レポートの形式によって異なります。
  1. セクションレポートの場合
  2. ページレポート/RDLレポートの場合


セクションレポートの場合


セクションレポートの場合、レポートをJPEG形式やBMP形式などの画像ファイルとして保存するための機能は用意されていませんが、ActiveReportsのPage.Drawメソッドや.NET FrameworkのGraphicsやBitMapオブジェクトを使用することで実現可能です。

以下のサンプルコードを参考に、ご検討ください。

◆サンプルコード(VB.NET)
Private Sub Form1_Load(...) Handles MyBase.Load
  ' セクションレポートを用意します。
  Dim sectionReport As New SectionReport1()
  ' 先にRun()を実行する必要があります。
  sectionReport.Run()

  ' 解像度を設定します
  Dim dpiX As Single = 100
  Dim dpiY As Single = 100

  ' JPEG形式で出力します。
  Me.SectionDocumentToJpeg(sectionReport.Document, dpiX, dpiY)
  ' BMP形式で出力します。
  Me.SectionDocumentToBmp(sectionReport.Document, dpiX, dpiY)

  ' 注意:同時にプレビューを行う場合、
  ' Viewer1.LoadDocument の後に画像ファイルへの出力はできません。
  ' DocummentのPagesがリセットされてしまうためです。

  Me.Viewer1.LoadDocument(sectionReport)
End Sub

' ドキュメントからJpegファイルへ出力するメソッドです。
Private Sub SectionDocumentToJpeg( _
  ByVal doc As GrapeCity.ActiveReports.Document.SectionDocument, _
  ByVal dpiX As Single, _
  ByVal dpiY As Single)

  For i As Integer = 0 To doc.Pages.Count - 1
    Dim bm As Bitmap
    bm = Me.SectionPageToBitmap(doc.Pages(i), dpiX, dpiY)
    Dim path As String = "report" & (i + 1).ToString("000") & ".JPG"
    bm.Save(path, System.Drawing.Imaging.ImageFormat.Jpeg)
  Next

End Sub

' ドキュメントからBMPファイルへ出力するメソッドです。
Private Sub SectionDocumentToBmp( _
  ByVal doc As GrapeCity.ActiveReports.Document.SectionDocument, _
  ByVal dpiX As Single, _
  ByVal dpiY As Single)

  For i As Integer = 0 To doc.Pages.Count - 1
    Dim bm As Bitmap
    bm = Me.SectionPageToBitmap(doc.Pages(i), dpiX, dpiY)
    Dim path As String = "report" & (i + 1).ToString("000") & ".BMP"
    bm.Save(path, System.Drawing.Imaging.ImageFormat.Bmp)
  Next

End Sub

' 各ページからBitmapオブジェクトを作成するメソッドです。
Private Function SectionPageToBitmap( _
  ByVal page As GrapeCity.ActiveReports.Document.Section.Page, _
  ByVal dpiX As Single, _
  ByVal dpiY As Single) As System.Drawing.Bitmap

  ' ページのサイズからBitmapを作成します。
  Dim width As Integer = CInt(page.Width * dpiX)
  Dim height As Integer = CInt(page.Height * dpiY)
  Dim bm As New System.Drawing.Bitmap(width, height)
  bm.SetResolution(dpiX, dpiY)

  ' レポートと同じサイズのRectangleFを用意します。
  Dim rec As RectangleF = New RectangleF(0, 0, page.Width, page.Height)

  ' BitmapからGraphicsオブジェクトを作成します。
  Dim gp As Graphics
  gp = Graphics.FromImage(bm)
  gp.Clear(Color.White)

  ' Alignment設定を初期化します。
  StringFormat.GenericTypographic.Alignment = StringAlignment.Near

  ' ページをGraphicsに描画します。
  page.Draw(gp, rec)

  Return bm

End Function

◆サンプルコード(C#)
private void Form1_Load(object sender, EventArgs e)
{
  // セクションレポートを用意します。
  SectionReport1 sectionReport = new SectionReport1();
  // 先にRun()を実行する必要があります。
  sectionReport.Run();

  // 解像度を設定します。
  float dpiX = 100;
  float dpiY = 100;

  // JPEG形式で出力します。
  this.SectionDocumentToJpeg(sectionReport.Document, dpiX, dpiY);
  // BMP形式で出力します。
  this.SectionDocumentToBmp(sectionReport.Document, dpiX, dpiY);

  // 注意:同時にプレビューを行う場合、
  // Viewer1.LoadDocument の後に画像ファイルへの出力はできません。
  // DocummentのPagesがリセットされてしまうためです。

  this.viewer1.LoadDocument(sectionReport);
}

// ドキュメントからJpegファイルへ出力するメソッドです。
private void SectionDocumentToJpeg(
  GrapeCity.ActiveReports.Document.SectionDocument doc,
  float dpiX,
  float dpiY)
{

  for (int i = 0; i < doc.Pages.Count; i++)
  {
    System.Drawing.Bitmap bm;
    bm = this.SectionPageToBitmap(doc.Pages[i], dpiX, dpiY);
    string path = "rpt" + (i + 1).ToString("000") + ".JPG";
    bm.Save(path, System.Drawing.Imaging.ImageFormat.Jpeg);
  }
}

// ドキュメントからBMPファイルへ出力するメソッドです。
private void SectionDocumentToBmp(
  GrapeCity.ActiveReports.Document.SectionDocument doc,
  float dpiX,
  float dpiY)
{

  for (int i = 0; i < doc.Pages.Count; i++)
  {
    System.Drawing.Bitmap bm;
    bm = this.SectionPageToBitmap(doc.Pages[i], dpiX, dpiY);
    string path = "rpt" + (i + 1).ToString("000") + ".BMP";
    bm.Save(path, System.Drawing.Imaging.ImageFormat.Bmp);
  }
}

// 各ページからBitmapオブジェクトを作成するメソッドです。
private System.Drawing.Bitmap SectionPageToBitmap(
  GrapeCity.ActiveReports.Document.Section.Page page,
  float dpiX,
  float dpiY)
{
  // ページのサイズからBitmapを作成します。
  int width = (int)(page.Width * dpiX);
  int height = (int)(page.Height * dpiY);
  var bm = new System.Drawing.Bitmap(width, height);
  bm.SetResolution(dpiX, dpiY);

  // レポートと同じサイズのRectangleFを用意します。
  var rec = new RectangleF(0, 0, page.Width, page.Height);

  // BitmapからGraphicsオブジェクトを作成します。
  Graphics gp;
  gp = Graphics.FromImage(bm);
  gp.Clear(Color.White);

  // Alignment設定を初期化します。
  StringFormat.GenericTypographic.Alignment = StringAlignment.Near;

  // ページをGraphicsに描画します。
  page.Draw(gp, rec);

  return bm;

}



ページレポート/RDLレポートの場合


ページレポート/RDLレポートには、画像ファイルへエクスポートする機能(描画拡張機能)が用意されております。
詳細については、製品ヘルプの以下のトピックをご覧ください。

ActiveReportsユーザーガイド
 - 概念
  - エクスポート
   - 描画拡張機能
    - 画像への描画
 - サンプルとチュートリアル
  - チュートリアル
   - ページレポート/RDLレポートのチュートリアル
    - エクスポート
     - カスタムWebのエクスポート(ページレポート/RDLレポート)

たとえば、以下のようなサンプルコードが考えられます。ご参考ください。

◆サンプルコード(VB.NET)
Private Sub Form1_Load(...) Handles MyBase.Load
  ' ページレポートを用意します。
  Dim file_name As String = "..¥..¥PageReport1.rdlx"
  Dim pageReport As New GrapeCity.ActiveReports.PageReport(New System.IO.FileInfo(file_name))
  Dim pageDocument As New GrapeCity.ActiveReports.Document.PageDocument(pageReport)

  ' レポート名を設定します。
  ' 以下の設定で、report001.BMP, report002.BMP, ... のような名前のファイルが生成されます。

  Dim exportFile As String = "report"
  Dim myFile As New System.IO.FileInfo(exportFile)

  ' 出力時の各種設定を行います。
  Dim settings As New GrapeCity.ActiveReports.Export.Image.Page.Settings
  '' 例)解像度を設定します。
  'settings.DpiX = 300
  'settings.DpiY = 300
  '' ※設定可能な項目の詳細は、本クラスのプロパティ一覧をご覧ください。

  ' 出力したい画像形式を設定します。

  settings.ImageType = GrapeCity.ActiveReports.Export.Image.Page.Renderers.ImageType.BMP

  ' レンダリング用クラスを用意します。
  Dim _renderingExtension As New _
    GrapeCity.ActiveReports.Export.Image.Page.ImageRenderingExtension
  Dim _provider As New GrapeCity.ActiveReports.Rendering.IO.FileStreamProvider _
    (myFile.Directory, System.IO.Path.GetFileNameWithoutExtension(myFile.Name))
  ' 画像ファイルへの出力を実行します。
  pageDocument.Render(_renderingExtension, _provider, settings)

  ' 注意:同時にプレビューを行う場合、
  ' Viewer1.LoadDocument 実行の後に画像ファイルへの変換はできません。

  Viewer1.LoadDocument(pageDocument)

End Sub

◆サンプルコード(C#)
private void Form1_Load(object sender, EventArgs e)
{
  // ページレポートを用意します。
  string file_name = @"..¥..¥PageReport1.rdlx";
  GrapeCity.ActiveReports.PageReport pageReport
    = new GrapeCity.ActiveReports.PageReport(new System.IO.FileInfo(file_name));
  GrapeCity.ActiveReports.Document.PageDocument pageDocument
    = new GrapeCity.ActiveReports.Document.PageDocument(pageReport);

  // レポート名を設定します。
  // 以下の設定で、report001.bmp, report002.bmp, ... のような名前のファイルが生成されます。

  string exportFile = "report";
  var myFile = new System.IO.FileInfo(exportFile);

  // 出力時の各種設定を行います。
  var settings = new GrapeCity.ActiveReports.Export.Image.Page.Settings();
  //// 例)解像度を設定します。
  //settings.DpiX = 300;
  //settings.DpiY = 300;
  // ※設定可能な項目の詳細は、本クラスのプロパティ一覧をご覧ください。

  // 出力したい画像形式を設定します。

  settings.ImageType = GrapeCity.ActiveReports.Export.Image.Page.Renderers.ImageType.BMP;

  // レンダリング用クラスを用意します。
  var _renderingExtension = new
    GrapeCity.ActiveReports.Export.Image.Page.ImageRenderingExtension();
  var _provider = new GrapeCity.ActiveReports.Rendering.IO.FileStreamProvider
    (myFile.Directory, System.IO.Path.GetFileNameWithoutExtension(myFile.Name));
  // 画像ファイルへの出力を実行します。
  pageDocument.Render(_renderingExtension, _provider, settings);

  // 注意:同時にプレビューを行う場合、
  // Viewer1.LoadDocument の後に画像ファイルへの変換はできません。

  viewer1.LoadDocument(pageDocument);
}
関連情報
キーワード
HowTo エクスポート