RapidReport 製品ドキュメント

レンダラの仕様

RapidReportには以下のレンダラが用意されており、 利用するレンダラによって帳票の出力形式を変えることができます。

ここでは、各レンダラの詳細な仕様について説明します。

PDFレンダラの仕様

PDF形式で帳票を出力するには、PdfRendererオブジェクトを利用します。 そのコンストラクタは、以下の形式になっています。

  // C#
  PdfRenderer renderer = new PdfRenderer(stream);
  PdfRenderer renderer = new PdfRenderer(stream, setting);
  ' VisualBasic
  Dim renderer As New PdfRenderer(stream)
  Dim renderer As New PdfRenderer(stream, setting)
  // Java
  PdfRenderer renderer = new PdfRenderer(stream);
  PdfRenderer renderer = new PdfRenderer(stream, setting);

1つ目の引数には出力先を表すストリームオブジェクトを渡します。

2つ目の引数にはPdfRendererSettingというオブジェクトを渡します。 PdfRendererSettingは、PDF出力に関する設定を行うためのオブジェクトです。 デフォルトの設定のままでよいのであれば、この引数は省略できます。

PdfRendererSettingオブジェクトは以下の設定項目をメンバとして持っています。

項目 説明
ElementRendererMap
DummyElementRenderer
利用される要素レンダラのハッシュです
キーが見つからない場合、DummyElementRendererが利用されます
FontMap
DefaultFont
利用されるフォントのハッシュです
フォントを指定するためのキーと
iTextのcom.lowagie.text.pdf.BaseFontオブジェクトの組を格納します
キーが見つからなければ、DefaultFontが利用されます
GaijiFontMap
GaijiFont
外字領域(UnicodeでのU+E000からU+F8FF)に含まれる文字を表示するためのフォントです
フォントを指定するためのキーと
iTextのcom.lowagie.text.pdf.BaseFontオブジェクトの組を格納します
キーが見つからなければ、GaijiFontが利用されます。
ReplaceBackslashToYen バックスラッシュ文字を円マーク文字に変換するかを指定します
デフォルト値はFalseです
ShrinkFontSizeMin [shrink_to_fit(縮小して全体を表示)]にチェックが入っている要素での、
フォントサイズの最小値を設定します
デフォルト値は4.0です
ShrinkFontSizeStep [shrink_to_fit(縮小して全体を表示)]にチェックが入っている要素での、
フォントサイズを縮小していく刻みを設定します
デフォルト値は0.5です
UnderlineWidthCoefficient [text(テキスト)]、[field(フィールド)]要素で描画される文字列の
下線の太さを制御するための係数を設定します
デフォルト値は1.0です
SkipInitializeFontCreate(クラス変数) Trueを設定すると、FontMapとDefaultFontにデフォルトのフォント設定を行わなくなります。
デフォルト値はFalseです。
クラス変数なので、PdfRendererSettingオブジェクトを生成する前に設定を行ってください。
UseMsFont(クラス変数) Trueを設定すると、FontMapとDefaultFontにデフォルトのフォントとしてMS-Gothic/MS-Minchoが設定されます。
Falseを設定すると、HeiseiKakuGo-W5/HeiseiMin-W3が設定されます。
デフォルト値はTrueです。
クラス変数なので、PdfRendererSettingオブジェクトを生成する前に設定を行ってください。

フォントについて

デフォルトのFontMapとDefaultFontは、以下のように定義されています。

  ' .NET (VisualBasicで実装)
  DefaultFont = BaseFont.CreateFont("MS-Gothic", "UniJIS-UCS2-H", BaseFont.NOT_EMBEDDED)
  FontMap.Add("gothic", setting.DefaultFont)
  FontMap.Add("mincho", BaseFont.CreateFont("MS-Mincho", "UniJIS-UCS2-H", BaseFont.NOT_EMBEDDED))
  GaijiFont = Nothing
  // Java
  defaultFont = BaseFont.createFont("MS-Gothic", "UniJIS-UCS2-H", BaseFont.NOT_EMBEDDED);
  fontMap.put("gothic", setting.defaultFont);
  fontMap.put("mincho", BaseFont.createFont("MS-Mincho", "UniJIS-UCS2-H", BaseFont.NOT_EMBEDDED));
  gaijiFont = null;

任意のフォントを利用するには、以下のようにBaseFontオブジェクトを生成してFontMapに設定します。 (ここではgothicの定義を上書きする例を示しますが、新しいキーを登録することもできます)

  // C#
  PdfRendererSetting setting = new PdfRendererSetting();
  setting.FontMap["gothic"] = BaseFont.CreateFont([フォント指定], BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
  PdfRenderer renderer = new PdfRenderer(stream, setting);
  ' VisualBasic
  Dim setting As PdfRendererSetting = New PdfRendererSetting()
  FontMap("gothic") = BaseFont.CreateFont([フォント指定], BaseFont.IDENTITY_H, BaseFont.EMBEDDED)
  Dim renderer As PdfRenderer = New PdfRenderer(stream, setting)
  // Java
  PdfRendererSetting setting = new PdfRendererSetting();
  setting.fontMap.put("gothic", BaseFont.createFont([フォント指定], BaseFont.IDENTITY_H, BaseFont.EMBEDDED));
  PdfRenderer renderer = new PdfRenderer(stream, setting);

BaseFont.CreateFontメソッドの詳細については、iTextまたはiTextSharpのドキュメントを参照してください。

デフォルトのフォントをバージョン4系のままとする(MSゴシック/明朝を利用しない)

バージョン4系のデフォルト設定では、MS-Gothic/MS-Michoではなく、HeiseiKakuGo-W5/HeiseiMin-W3という論理フォントが設定されていました。 5.0以降でもこの設定を利用する場合は、クラス変数 useMsFont にFalseを設定してください。これによって、以下の設定が行われるようになります。

  ' .NET (VisualBasic)
  DefaultFont = BaseFont.CreateFont("HeiseiKakuGo-W5", "UniJIS-UCS2-H", BaseFont.NOT_EMBEDDED)
  FontMap.Add("gothic", setting.DefaultFont)
  FontMap.Add("mincho", BaseFont.CreateFont("HeiseiMin-W3", "UniJIS-UCS2-H", BaseFont.NOT_EMBEDDED))
  GaijiFont = Nothing
  // Java
  defaultFont = BaseFont.createFont("HeiseiKakuGo-W5", "UniJIS-UCS2-H", BaseFont.NOT_EMBEDDED);
  fontMap.put("gothic", setting.defaultFont);
  fontMap.put("mincho", BaseFont.createFont("HeiseiMin-W3", "UniJIS-UCS2-H", BaseFont.NOT_EMBEDDED));
  gaijiFont = null;

※このフォントを利用した場合、AdobeAcrobatReaderでは 小塚ゴシック/小塚明朝 というプロポーショナルフォントが採用されます。
※等幅フォントではないため、閲覧時にデザイン時と表示可能文字数などに違いが生じる場合があることにご注意ください。

ASP.NETでの注意点

ASP.NETでPDFレンダラを利用する場合には、 Global.asaxのApplication_Startメソッドに以下の内容を書いておく必要があります。

  // C#
  void Application_Start(object sender, EventArgs e)
  {
    iTextSharp.text.pdf.BaseFont.AddToResourceSearch(Server.MapPath("bin\\iTextAsian.dll"));
  }
  ' VisualBasic
  Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
    iTextSharp.text.pdf.BaseFont.AddToResourceSearch(Server.MapPath("bin\iTextAsian.dll"))
  End Sub

外字について

Windowsにおいて外字のフォントは、 すべてのフォントにリンクされたものと、特定のフォントにリンクされたものの2種類が存在します。 外字領域(UnicodeでのU+E000からU+F8FF)に含まれる文字を表示しようとした場合、 まず、現在のフォントにリンクされた外字フォントにその文字が含まれていればそれが利用され、 含まれていなければ、すべてのフォントにリンクされた外字フォントが利用されます。

これらの外字フォントを基にiTextのBaseFontオブジェクトを生成し、 PdfRendererSettingのGaijiFontおよびGaijiFontMapメンバへとそれぞれ設定することで、 PDF生成時に外字を利用することが可能になります。

外字フォントファイルの場所 設定先
すべてのフォント
にリンクされた
外字フォント
%WINDIR%\\fonts\\EUDC.TTE
GaijiFont
特定のフォント
にリンクされた
外字フォント
外字作成時にユーザが任意に指定
※ レジストリの
HKEY_CURRENT_USER/EUDC/932
からファイル名を取得可能
GaijiFontMap
※ 対応するフォントのキーと共に設定

外字フォントファイルは[TTE]という拡張子で作成されますが、 BaseFontへの読み込みを行う際は[TTF]という拡張子に変更してコピーを作成しておく必要があります。 なお、手動でEUDC.TTEファイルのコピーを行う際、エクスプローラではfontsディレクトリを直接操作することはできないので、 以下のようにコマンドプロンプトから実行してください。

  # xxは任意のフォルダ
  > copy %WINDIR%\\fonts\\EUDC.TTE xx\\EUDC.TTF

GaijiFontおよびGaijiFontMapへの設定を行うサンプルコードを以下に示します。 ここでは、すべてのフォントにリンクされた外字フォントのコピーとして xx\EUDC.TTF ファイルが存在し、 gothicキーに対応するフォントにリンクされた外字フォントのコピーとして xx\GAIJI_GOTHIC.TTF ファイルが存在するものとします。

  // C#
  PdfRendererSetting setting = new PdfRendererSetting();
  setting.GaijiFont = BaseFont.CreateFont("xx\\EUDC.TTF", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
  setting.GaijiFontMap.Add("gothic", BaseFont.CreateFont("xx\\GAIJI_GOTHIC.TTF", BaseFont.IDENTITY_H, BaseFont.EMBEDDED));
  ' VisualBasic
  Dim setting As PdfRendererSetting = New PdfRendererSetting()
  setting.GaijiFont = BaseFont.CreateFont("xx\\EUDC.TTF", BaseFont.IDENTITY_H, BaseFont.EMBEDDED)
  setting.GaijiFontMap.Add("gothic", BaseFont.CreateFont("xx\\GAIJI_GOTHIC.TTF", BaseFont.IDENTITY_H, BaseFont.EMBEDDED))
  // Java
  PdfRendererSetting setting = new PdfRendererSetting();
  setting.gaijiFont = BaseFont.createFont("xx\\EUDC.TTF", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
  setting.gaijiFontMap.put("gothic", BaseFont.createFont("xx\\GAIJI_GOTHIC.TTF", BaseFont.IDENTITY_H, BaseFont.EMBEDDED));

Windowsの外字設定を取得して、自動的に設定を行うサンプルコード

Windowsの外字設定の内容はレジストリから取得することができます。 これを利用して、GaijiFontおよびGaijiFontMapへの設定を自動で行うサンプルコードを以下に示します。

先に説明したとおり、外字を利用するには外字フォントファイルをコピーする必要があります。 そのため、このサンプルコードを利用するには、コピーしたファイルを置いておくための作業用フォルダを事前に作成しておいて下さい。

このサンプルでは、GaijiUtil.SetUpGaijiメソッドを呼ぶことで外字フォントのコピーと設定が行われるようになっています。 SetUpGaijiの引数には、設定を行うPdfSettingオブジェクトと、 RapidReport上でのフォントのキーとWindows上での外字がリンクされたフォント名との対応を表すディクショナリを渡します。 (コードが長いので折りたたみ表示とします)

▼C#のコードを開く

▼VisualBasicのコードを開く

.NET Framework利用時のFIPS準拠違反エラーへの対応方法

Windowsの「ローカルセキュリティポリシー」で、 「ローカルポリシー」「セキュリティオプション」の「システム暗号化:暗号化、ハッシュ、署名のためのFIPS準拠アルゴリズムを使う」 を有効とした場合、.NET Framework版のRapidReportでPDF出力を行うとInvalidOperationException例外が発生します。 (.NET5以降/.NET Core版、Java版では発生しません)

この問題を回避するには、以下のコードを実行します。

  // C#
  iTextSharp.text.pdf.PdfWriter.SkipIdGenerate = true;
  ' VisualBasic
  iTextSharp.text.pdf.PdfWriter.SkipIdGenerate = True

SkipIdGenerateはクラス変数なので、プロセス内で1度だけ設定すれば、 その後の全てのPDF出力処理で、先述のエラーの発生を回避できます。

SkipIdGenerateをtrueにすると、PDFの内部項目であるID値が出力されなくなります。 (ID値の出力にはFIPS非準拠であるMD5アルゴリズムが利用されているため、 ID値の出力をスキップすることでエラーが回避されます)

ID値はPDFの仕様上では省略可能な項目なので、 単にPDFを閲覧/印刷する場合にはID値がなくとも特に問題はありません。 ただし、他のPDFなどからRapidReportで生成したPDFを参照するといった使い方をされる場合、 ID値の有無が動作に影響する可能性はあるので、 状況に応じてこのオプションを利用するかをご判断ください。

※ PDFにパスワードを設定する場合は、この方法でのエラー回避は行えません。「FIPS準拠アルゴリズムを使う」を無効としてご利用ください。

Excel(XLS)レンダラの仕様

Excel(XLS)形式で帳票を出力するには、XlsRendererオブジェクトを利用します。 そのコンストラクタは、以下の形式になっています。

  // C#
  XlsRenderer renderer = new XlsRenderer(workbook);
  XlsRenderer renderer = new XlsRenderer(workbook, setting);
  ' VisualBasic
  Dim renderer As New XlsRenderer(workbook)
  Dim renderer As New XlsRenderer(workbook, setting)
  // Java
  XlsRenderer renderer = new XlsRenderer(workbook);
  XlsRenderer renderer = new XlsRenderer(workbook, setting);

1つ目の引数には、(N)POIのHSSFWorkbookオブジェクトを渡します。

2つ目の引数には、XlsRendererSettingオブジェクトを渡します。 XlsRendererSettingは、XLS出力に関する設定を行うためのオブジェクトです。 デフォルトの設定のままでよいのであれば、この引数は省略できます。

XlsRendererSettingオブジェクトは以下の設定項目をメンバとして持っています。

項目 説明
ElementRendererMap
DummyElementRenderer
利用される要素レンダラのハッシュです
キーが見つからない場合、DummyElementRendererが利用されます
FontMap
DefaultFont
利用されるフォントのハッシュです
フォントを指定するためのキーと、物理フォント名の組を指定します
キーが見つからなければ、DefaultFontが利用されます
CustomPalette XLSが持つパレットの内容を書き換えるかを指定します
Trueにすると、デザイン時に指定した色が正確に出力されますが、
デフォルトのパレットの内容は書き換えられます
Falseにすると、デフォルトのパレットから近い色が選択されて出力されます
デフォルト値はFalseです
ColWidthMax
RowHeightMax
生成されるセルの幅と高さの最大値を指定します
デフォルト値はColWidthMaxが800
RowHeightMaxが350です
VResolution
HResolution
印刷時の垂直/水平方向の解像度を指定します
デフォルト値はどちらも600です
ColWidthCoefficent
RowHeightCoefficent
セルを生成する際の幅と高さにかかる係数を指定します
デフォルト値はどちらも1です

デフォルトのFontMapとDefaultFontは、以下のように定義されています。

  ' .NET (VisualBasic)
  DefaultFont = "MS ゴシック"
  FontMap.Add("gothic", "MS ゴシック")
  FontMap.Add("mincho", "MS 明朝")
  // Java
  defaultFont = "MS ゴシック";
  fontMap.put("gothic", "MS ゴシック");
  fontMap.put("mincho", "MS 明朝");

XlsRendererで帳票出力を行う際は、 Renderメソッドを呼ぶ前に必ずNewSheetメソッドを呼んでワークシートを作成する必要があります。

  // C#
  xlsRenderer.NewSheet("sheet_name");
  reportPages.Render(xlsRenderer);
  ' VisualBasic
  xlsRenderer.NewSheet("sheet_name")
  reportPages.Render(xlsRenderer)
  // Java
  xlsRenderer.newSheet("sheet_name");
  reportPages.render(xlsRenderer);

他の出力方法として、XlsRendererにはRenderSheetメソッドが用意されており、これを利用することでページ区切の含まれないExcelシートを生成することが可能です。

Excel(XLSX)レンダラの仕様

XLSX形式での出力を行うには、XlsxRendererオブジェクトを利用します。 そのコンストラクタは、以下の形式になっています。

  XlsxRenderer renderer = new XlsxRenderer(workbook);
  XlsxRenderer renderer = new XlsxRenderer(workbook, setting);

1つ目の引数には、POIのXSSFWorkbookオブジェクトを渡します。

2つ目の引数には、XlsxRendererSettingオブジェクトを渡します。 XlsxRendererSettingは、XLSX出力に関する設定を行うためのオブジェクトです。 デフォルトの設定のままでよいのであれば、この引数は省略できます。

XlsxRendererSettingオブジェクトは以下の設定項目をメンバとして持っています。

項目 説明
ElementRendererMap
DummyElementRenderer
利用される要素レンダラのハッシュです
キーが見つからない場合、DummyElementRendererが利用されます
FontMap
DefaultFont
利用されるフォントのハッシュです
フォントを指定するためのキーと、物理フォント名の組を指定します
キーが見つからなければ、DefaultFontが利用されます
ColWidthMax
RowHeightMax
生成されるセルの幅と高さの最大値を指定します
デフォルト値はColWidthMaxが800
RowHeightMaxが350です
VResolution
HResolution
印刷時の垂直/水平方向の解像度を指定します
デフォルト値はどちらも600です
ColWidthCoefficent
RowHeightCoefficent
セルを生成する際の幅と高さにかかる係数を指定します
デフォルト値はどちらも1です

デフォルトのfontMapとdefaultFontは、以下のように定義されています。

  ' .NET (VisualBasic)
  DefaultFont = "MS ゴシック"
  FontMap.Add("gothic", "MS ゴシック")
  FontMap.Add("mincho", "MS 明朝")
  // Java
  defaultFont = "MS ゴシック";
  fontMap.put("gothic", "MS ゴシック");
  fontMap.put("mincho", "MS 明朝");

XlsxRendererで帳票出力を行う際は、 Renderメソッドを呼ぶ前に必ずNewSheetメソッドを呼んでワークシートを作成する必要があります。

  // C#
  xlsxRenderer.NewSheet("sheet_name");
  reportPages.Render(xlsxRenderer);
  ' VisualBasic
  xlsxRenderer.NewSheet("sheet_name")
  reportPages.Render(xlsxRenderer)
  // Java
  xlsxRenderer.newSheet("sheet_name");
  reportPages.render(xlsxRenderer);

他の出力方法として、XlsxRendererにはRenderSheetメソッドが用意されており、これを利用することでページ区切の含まれないExcelシートを生成することが可能です。

ExcelレンダラのRenderSheetメソッド

Xls(x)Rendererを利用して通常の方法(ReportPages.Renderメソッド)によって帳票出力を行うと、 見出しと明細行を含む一般的な帳票の場合、以下のような内容のExcelファイルが出力されます。

この方法で出力されるExcelファイルには、紙への印刷を行った場合にデザイン通りの内容で出力されることを目的としているため、 ページの区切りや、その度ごとに見出しやフッター行などが必要に応じて挿入されます。 しかし、このファイルを他の何らかのプログラムに対するデータソースとして利用する場合などは、この形式だと不都合も多いでしょう。

こうした場合は、Xls(x)Rendererクラスに用意されているRenderSheetメソッドを利用することで、 以下のようなページ区切りを含まないシートを出力できます。

RenderSheetメソッドを呼ぶ際は、引数としてReportオブジェクト(ReportPagesではなく)を渡します。
※XlsxRendererのコード例を提示しますが、XlsRendererでも同様のコードを実行可能です。

  // C#
  Report report = new Report(Json.Read("example.rrpt"));
  report.Fill(new ReportDataSource(dataTable));
  using (FileStream fs = new FileStream("output.xlsx", FileMode.Create))
  {
      XSSFWorkbook workbook = new XSSFWorkbook();
      XlsxRenderer renderer = new XlsxRenderer(workbook);
      renderer.NewSheet("sheet_name");
      renderer.RenderSheet(report);
      workbook.Write(fs);
  }
  ' VisualBasic
  Dim report As New Report(Json.Read("example.rrpt"))
  report.Fill(New ReportDataSource(dataTable))  
  Using fs As New FileStream("output.xlsx", IO.FileMode.Create)
    Dim workbook As New XSSFWorkbook
    Dim renderer As New XlsxRenderer(workbook)
    renderer.NewSheet("sheet_name")
    renderer.RenderSheet(report)
    workbook.Write(fs)
  End Using
  // Java
  Report report = new Report(ReadUtil.readJson("example.rrpt"));
  report.fill(new ReportDataSource(data));
  FileOutputStream fos = new FileOutputStream("output.xlsx");
  try{
    XSSFWorkbook workBook = new XSSFWorkbook();
    XlsxRenderer renderer = new XlsxRenderer(workBook);
    renderer.newSheet("sheet_name");
    renderer.renderSheet(report);
    workBook.write(fos);
  }finally{
    fos.close();
  }

RenderSheetでの出力に適した帳票レイアウトの生成

レポートデザイナのウィザード機能で、「一覧表形式」の「Excelシート向け」を選択することで、 このRenderSheetメソッドでの出力に適した形式の帳票を生成できます。

直接印刷・プレビューの仕様

.NET版で直接印刷・プレビューを行うには、 PrinterオブジェクトとFmPrintPreviewオブジェクト(フォーム)を利用します。

Printerオブジェクトのコンストラクタは、以下の形式になっています。

  // C#
  Printer printer = new Printer(pages);
  Printer printer = new Printer(pages, setting);
  ' VisualBasic
  Dim printer As New Printer(pages);
  Dim printer As New Printer(pages, setting);

1つ目の引数には、ReportPagesオブジェクトを渡します。

2つ目の引数には、GdiRendererSettingオブジェクトを渡します。 GdiRendererSettingは、直接印刷とプレビューに関する設定を行うためのオブジェクトです。 デフォルトの設定のままでよいのであれば、この引数は省略できます。

項目 説明
ElementRendererMap
DummyElementRenderer
利用される要素レンダラのハッシュです
キーが見つからない場合、DummyElementRendererが利用されます
FontMap
DefaultFont
利用されるフォントのハッシュです
フォントを指定するためのキーと、物理フォント名の組を指定します
キーが見つからなければ、DefaultFontが利用されます
ShrinkFontSizeMin [shrink_to_fit(縮小して全体を表示)]にチェックが入っている要素での、 フォントサイズの最小値を設定します
デフォルト値は4.0です
ShrinkFontSizeStep [shrink_to_fit(縮小して全体を表示)]にチェックが入っている要素での、
フォントサイズを縮小する単位を設定します
デフォルト値は0.5です

Printerオブジェクト自体にも、以下の項目が定義されています。

項目 説明
DynamicPageSetting 用紙設定をページ毎に動的に行うかを指定します
Trueにすることで、異なる用紙設定を持ったページを1度の印刷で出力できます
ただし、ユーザがPrintDialogで設定した内容は無効になります
デフォルト値はFalseです
PrintedPages 実際に印刷されたページのインデックスが格納されます
印刷処理後に参照して利用します
PreviewBackgroundImage プレビュー時に表示される背景画像を指定します
この画像はプレビュー時にのみ表示され、印刷実行時には表示されません。
PreviewBackgroundSetting PreviewBackGroundImageに指定された画像を描画する際の設定を行います
以下の設定項目を持ちます
項目説明
Alpha 画像の透明度を指定します
デフォルト値は1(不透明)です
X, Y 画像の描画位置を指定します
デフォルト値は(0, 0)です
Scale 画像を描画するサイズの倍率を指定します
デフォルト値は1(ページ全体のサイズ)です

直接印刷を行うコードは以下のようになります。

  // C#

  // ダイアログを出して印刷
  if (printer.PrintDialog.ShowDialog == DialogResult.OK)
  {
      printer.PrintDocument.Print();
  }

  // ダイアログを出さずに印刷
  printer.PrintDocument.Print();
  ' VisualBasic

  ' ダイアログを出して印刷
  If printer.PrintDialog.ShowDialog = DialogResult.OK Then
    printer.PrintDocument.Print()
  End If

  ' ダイアログを出さずに印刷
  printer.PrintDocument.Print()

FmPrintPreviewというフォームを利用することで、プレビュー表示ができます。 FmPrintPreviewのコンストラクタには、Printerオブジェクトを渡します。

FmPrintPreviewは、以下のメンバを持ちます。

項目 説明
StartUpZoomFit プレビュー画面が開かれた時点で
表示倍率をウィンドウサイズに合わせるかを指定します
デフォルト値はFalseです
StartUpZoomFitWidth プレビュー画面が開かれた時点で
表示倍率をウィンドウサイズの幅に合わせるかを指定します
デフォルト値はFalseです
SearchEnabled テキスト検索機能を有効にするかを指定します
デフォルト値はTrueです
PrintExecuted プレビュー画面から印刷が実行されたかを得ることができます
プレビュー表示が終了してから参照して利用します

プレビュー表示を行うコードは以下のようになります。

  // C#
  FmPrintPreview preview = new FmPrintPreview(printer);
  preview.ShowDialog();
  ' VisualBasic
  Dim preview As New FmPrintPreview(printer)
  preview.ShowDialog()

プレビュー画面の機能

プレビュー画面を構成するいくつかのコントロールについての説明を行います。

この項の内容は、独自のプレビュー画面を作成する場合などに有用です。 「プレビュー画面のカスタマイズ」にサンプルの説明があります。

FmPrintPreview内では、以下のコントロールが利用されています。

  • PrintPreview : プレビュー表示
  • PrintPreviewPage : ページ移動操作
  • PrintPreviewZoom : 拡大・縮小操作
  • PrintPreviewSearch : 検索パネルON/OFFボタン
  • PrintPreviewSearchPanel : 検索パネル

PrintPreviewには以下のプロパティ/メソッドが用意されています。

プロパティ/メソッド 説明
PageCount 現在表示中のページ数を設定/取得するプロパティです
最初のページは1になります
Zoom 拡大・縮小の倍率を設定/取得するプロパティです
設定可能な値の範囲は 0.3 (30%) ~ 3.0 (300%) です
ZoomIn() 拡大・縮小の倍率を1段階上げるメソッドです
0.3 (30%), 0.4 (40%), 0.5 (50%), 0.6 (60%),
0.7 (70%), 0.8 (80%), 0.9 (90%), 1.0 (100%),
1.25 (125%), 1.5 (150%), 1.75 (175%), 2.0 (200%), 2.5 (250%), 3.0 (300%)
という刻みで上がります
ZoomOut() 拡大・縮小の倍率を1段階下げるメソッドです
0.3 (30%), 0.4 (40%), 0.5 (50%), 0.6 (60%),
0.7 (70%), 0.8 (80%), 0.9 (90%), 1.0 (100%),
1.25 (125%), 1.5 (150%), 1.75 (175%), 2.0 (200%), 2.5 (250%), 3.0 (300%)
という刻みで下がります
ZoomFit() 画面サイズに合わせて拡大・縮小の倍率を設定するメソッドです
ZoomFitWidth() 画面幅に合わせて拡大・縮小の倍率を設定するメソッドです

PrintPreviewZoomには、以下のプロパティが用意されています。

プロパティ 説明
AutoFit 「画面サイズに合わせて拡大・縮小」状態かを設定・取得します
Trueを代入すると、画面サイズが変更されるたびに
拡大・縮小の倍率が画面サイズに合わせて自動的に設定されるようになります
AutoFitWidth 「画面幅に合わせて拡大・縮小」状態にします
Trueを代入すると、画面サイズが変更されるたびに
拡大・縮小の倍率が画面幅に合わせて自動的に設定されるようになります

PrintPreviewSearchには以下のメソッドが用意されています。

メソッド 説明
PanelShow() 検索パネルを表示します
PanelHide() 検索パネルを非表示にします

イメージの出力

PrinterオブジェクトのGetImageメソッドを用いると、 帳票のイメージをSystem.Drawing.Imageオブジェクトとして得ることができます。 引数としてページ番号を渡します。

  // C#
  Image image = printer.GetImage(0);
  ' VisualBasic
  Dim image As Image = printer.GetImage(0)

追加の引数として、x,y方向それぞれのスケールを指定することもできます。 これにより、任意の解像度の画像を得ることができます。

  // C#

  // 2倍の解像度の画像を得る
  Image image = printer.GetImage(0, 2, 2);
  ' VisualBasic

  ' 2倍の解像度の画像を得る
  Dim image As Image = printer.GetImage(0, 2, 2)

Graphicsオブジェクトを渡して描画を行うRenderというメソッドも用意されています。2番目の引数にはページ番号を渡します。 これを利用することで、例えば任意のコントロール上に帳票のイメージを描画するといったことが可能となります。

  // C#
  Graphics g = ...
  printer.Render(g, 0);
  ' VisualBasic
  Dim g As Graphics = ...
  printer.Render(g, 0)

GetPixelSizeメソッドによって、帳票イメージのピクセル単位でのサイズを得ることができます。 引数としてページ番号を渡します。 例としてBitmapオブジェクトを生成して描画を行うコードを以下に示します。

  // C#
  Size size = printer.GetPixelSize(0);
  Bitmap bmp = new Bitmap(size.Width, size.Height);
  Graphics g = Graphics.FromImage(bmp);
  printer.Render(g, 0);
  ' VisualBasic
  Dim size As Size = printer.GetPixelSize(0)
  Dim bmp As New Bitmap(size.Width, size.Height)
  Dim g As Graphics = Graphics.FromImage(bmp)
  printer.Render(g, 0)

イメージローダ

PdfRenderer,XlsRenderer,Printerオブジェクトには、ImageLoaderMapというメンバがあります。 これは[画像]要素に対して動的な画像を与えるために用意された、 イメージローダというオブジェクトを管理するためのハッシュです。

それぞれのレンダラに対して、イメージローダのインターフェース(と、その標準実装クラス)が、 以下のように用意されています。

レンダラ イメージローダの
インターフェース/標準実装クラス
PdfRenderer IPdfImageLoader
PdfImageLoader
XlsRenderer IXlsImageLoader
XlsImageLoader
XlsxRenderer IXlsxImageLoader
XlsxImageLoader
Printer IGdiImageLoader
GdiImageLoader

[画像]要素は、[キー]プロパティ値を用いてImageLoaderMapからイメージローダを取得します。 さらに、[式]プロパティを評価した結果の値をパラメータとしてイメージローダから画像を得ます。 利用可能な画像の形式はBMP/PNG/JPEG/GIFです。

先ほど示したイメージローダの各標準実装クラスを利用するには、まずImageMapというオブジェクトを生成します。 ImageMapはハッシュを拡張したオブジェクトで、画像を任意のキーと共に登録しておくことができます。

イメージローダに登録する画像データの型を以下に示します。

環境 画像データの型
.NET5以降/.NET Core Byte配列
.NET Framework System.Drawing.Image
Java java.awt.image.BufferedImage

イメージローダを作成して画像データを登録するサンプルコードを以下に示します。

  // C# (.NET5以降/.NET Core)
  ImageMap imageMap = new ImageMap();
  imageMap.Add("image1", File.ReadAllBytes("image1.png"));
  imageMap.Add("image2", File.ReadAllBytes("image2.png"));
  imageMap.Add("image3", File.ReadAllBytes("image3.png")) ;
  ' VisualBasic (.NET5以降/.NET Core)
  Dim imageMap As New ImageMap
  imageMap.Add("image1", File.ReadAllBytes("image1.png"))
  imageMap.Add("image2", File.ReadAllBytes("image2.png"))
  imageMap.Add("image3", File.ReadAllBytes("image3.png"))
  // C# (.NET Framework)
  ImageMap imageMap = new ImageMap();
  imageMap.Add("image1", new Bitmap("image1.png"));
  imageMap.Add("image2", new Bitmap("image2.png"));
  imageMap.Add("image3", new Bitmap("image3.png")) ;
  ' VisualBasic (.NET Framework)
  Dim imageMap As New ImageMap
  imageMap.Add("image1", New Bitmap("image1.png"))
  imageMap.Add("image2", New Bitmap("image2.png"))
  imageMap.Add("image3", New Bitmap("image3.png"))
  // Java
  ImageMap imageMap = new ImageMap();
  imageMap.put("image1", ImageIO.read(new File("image1.png")));
  imageMap.put("image2", ImageIO.read(new File("image2.png")));
  imageMap.put("image3", ImageIO.read(new File("image3.png")));

ImageMapクラスは、jp.co.systembase.report.renderer名前空間(パッケージ)に定義されており、 特定のレンダラに依存していません。 イメージローダの各標準実装クラスのコンストラクタはImageMapを受け取るようになっており、 与えられたパラメータをキーとしてここから画像を取得して返します。

  // C#
  PdfImageLoader pdfImageLoader = new PdfImageLoader(imageMap);
  XlsImageLoader xlsImageLoader = new XlsImageLoader(imageMap);
  XlsImageLoader xlsxImageLoader = new XlsxImageLoader(imageMap);
  GdiImageLoader gdiImageLoader = new GdiImageLoader(imageMap);
  ' VisualBasic
  Dim pdfImageLoader As New PdfImageLoader(imageMap)
  Dim xlsImageLoader As New XlsImageLoader(imageMap)
  Dim xlsxImageLoader As New XlsxImageLoader(imageMap)
  Dim gdiImageLoader As New GdiImageLoader(imageMap)
  // Java
  PdfImageLoader pdfImageLoader = new PdfImageLoader(imageMap);
  XlsImageLoader xlsImageLoader = new XlsImageLoader(imageMap);
  XlsxImageLoader xlsxImageLoader = new XlsxImageLoader(imageMap);

イメージローダが生成できたら、ImageLoaderMapに登録することで利用可能になります。

  // C#
  pdfRenderer.ImageLoaderMap.Add("key", pdfImageLoader);
  xlsRenderer.ImageLoaderMap.Add("key", xlsImageLoader);
  xlsxRenderer.ImageLoaderMap.Add("key", xlsxImageLoader);
  printer.ImageLoaderMap.Add("key", gdiImageLoader);
  ' VisualBasic
  pdfRenderer.ImageLoaderMap.Add("key", pdfImageLoader)
  xlsRenderer.ImageLoaderMap.Add("key", xlsImageLoader)
  xlsxRenderer.ImageLoaderMap.Add("key", xlsxImageLoader)
  printer.ImageLoaderMap.Add("key", gdiImageLoader)
  // Java
  pdfRenderer.imageLoaderMap.put("key", pdfImageLoader);
  xlsRenderer.imageLoaderMap.put("key", xlsImageLoader);
  xlsxRenderer.imageLoaderMap.put("key", xlsxImageLoader);

インターフェースを実装することでイメージローダを自作することもできます。 例えば標準では対応していないバーコードやグラフなどを表示するには、 独自のイメージローダを作成します。

いずれのインターフェースも、実装する必要があるのはGetImageという1つのメソッドのみです。 例えば、IPdfImageLoaderの定義は以下のようになっています。

  ' .NET (VisualBasic)
  Public Interface IPdfImageLoader
      Function GetImage(ByVal param As Object) As iTextSharp.text.Image
  End Interface
  // Java
  public interface IPdfImageLoader {
      com.lowagie.text.Image getImage(Object param);
  }

機能サンプルの「動的画像(グラフ)の表示」に、 イメージローダを利用したサンプルの説明があります。

Google App Engine利用時の注意点

Google App Engineを利用している場合はBufferedImageオブジェクトを生成することができないために、 ImageMapクラスを利用することができません。

代わりに、iTextの提供するcom.lowagie.text.Imageオブジェクトを格納可能なPdfImageMapを利用してください。 PdfImageMapオブジェクトは、ImageMapと同様にPdfImageLoaderのコンストラクタへ渡すことができます。

  PdfImageMap imageMap = new PdfImageMap();
  imageMap.put("image1", Image.getInstance("...\image1.png"));
  imageMap.put("image2", Image.getInstance("...\image2.png"));
  imageMap.put("image3", Image.getInstance("...\image3.png"));

  PdfImageLoader pdfImageLoader = new PdfImageLoader(imageMap);

Copyright (c) 2013, SystemBase Co.,Ltd. All rights reserved.