チュートリアル1 見積書

このページでは、RapidReportを利用した基本的な帳票開発の流れを理解して頂くために、 実際に1本の帳票を作成する手順を詳しく説明していきます。

作成する帳票の完成イメージは以下のようになります。

見積書の例
サンプルについて
完成したサンプルが example フォルダ内に以下の名前で含まれています。 帳票定義ファイル: example1.rrpt ソースコード: Example1.cs、Example1.vb、Example1.java

帳票に渡すデータ

今回の例で帳票に渡すデータは、以下のような形式となります。

サンプルデータ

RapidReportでは、行と列からなる表形式のデータを帳票に渡すことが可能です。 つまり、SQLクエリの結果などをそのままデータソースとすることができます。

データ1行が1商品に対する見積に対応するものとします。 また、簡単のために1度の印刷では1伝票のみを出力することにします。 つまり、全ての行で得意先、見積No、見積日などの列は同じ値になります。

レポートデザイナの起動

帳票定義ファイルを作成するために、スタートメニューから[レポートデザイナ]を起動します。

スタートメニューに登録された[レポートデザイナ(.net3.5)]または[レポートデザイナ(.net4.0)]をクリックしてください。 どちらを選ぶかで、レポートデザイナが利用する.NET Frameworkのバージョンが変わります。

※どちらを利用しても機能に違いはありません。ご利用の環境で実行可能なほうを選択して下さい。

※レポートデザイナの使い方についての詳しい説明は、「レポートデザイナ」にあります。

学習ツアーについて
RapidReportのレポートデザイナには、学習ツアーという機能があります。 これは、帳票定義ファイルを作成した際の履歴を全て保存しておき、いつでも再生可能とするものです。 本チュートリアルの帳票を作成した際の履歴を記録した学習ツアーが example\tour\example1.rrtr にあります。 レポートデザイナのメニューで、[学習]>[ツアーを開く]から、学習ツアーファイルexample1.rrtrを開くと、ツアーを開始できます。 学習ツアーファイルを開いて「やり直し」ボタンをクリックしていくと、 サンプル帳票の開発手順を1ステップずつ再生できます。

帳票の構造

作業を始めるにあたり、まずはこの帳票の構造について考えます。

見積書の例

この帳票の完成イメージにおいて、ヘッダーと書かれている部分は、 与えられたデータが何行だったとしても項目のレイアウトが変わることはありません。

ボディと書かれている部分では、 データの行数に応じて明細部が繰り返し表示されるというレイアウト上の制御が必要となります。

フッターと書かれている部分はヘッダー同様にレイアウトが固定になります。

この帳票はヘッダー、ボディ、フッターの3つの部分から成り立ちます。 このように帳票の各部分を表す要素をコンテントと呼びます。

ヘッダーの定義

レポートデザイナの右上にある構成ツリーを開き、(コンテント)というノードをクリックしてください。 この選択したコンテントを、まずはヘッダーとして定義していきます。

右下のプロパティウィンドウで、[見出し]に"ヘッダー"と入力します。 これで、構成ツリー上にも"ヘッダー"という見出しが表示されます。

左側のデザインウィンドウで、□を下にドラッグしてヘッダーの領域を広げ、高さが260となるようにします。 なお、デフォルトの単位はポイント(1pt = 1/72inch, 約0.353mm)です。

デザインウィンドウで編集した結果は、プロパティウィンドウに反映されます。 今回の操作では、[サイズ] > [初期]に260と入ります (プロパティウィンドウに直接入力してもかまいません)。

タイトルの追加

続いて「御見積書」という、この帳票のタイトルを追加します。

帳票上に表示する文字や線、矩形などを要素と呼びます。 要素にはいくつかの種類があり、静的な文字列を描画するための[テキスト]、 動的な値を描画するための[フィールド]、さらに[直線]や[四角形]などがあります。

デザインウィンドウのヘッダー領域の上で右クリックし、 [要素を追加]から[テキスト]を選択し、ヘッダー上に配置します。

張り付けた要素をダブルクリックし、 表示されたテキストボックスに"御見積書"と入力します。 ここで入力したテキストは、プロパティウィンドウの[テキスト]という項目に反映されます。

続いて、フォント設定を行います。 プロパティウィンドウの[フォント]項目で[+設定]をクリックし、[フォント名]を[mincho]、[フォントサイズ]を20とします。 さらに、[均等割付]にチェックを入れます。

デフォルトではアライメントが上寄せになっています。 そこで、要素の上で[右クリック] > [アライメント編集]を選択し、 表示されたウィンドウの中央のボタンをクリックすると中央寄せにすることができます。 なお、プロパティウィンドウ上では、[水平揃え]、[垂直揃え]という項目に対応します。

タイトルの完成イメージは以下のようになります。

ロゴ画像の追加

[要素を追加] > [画像]から、ロゴ画像を表示するための要素を追加します。

プロパティウィンドウの [画像] で[…]をクリックし、画像ファイルを選択します。

デザインウィンドウで画像が表示されます。 ここで選択した画像データはBase64エンコードされて帳票定義ファイルに含まれます。

見積No/見積日の追加

続いて、見積Noと見積日を追加します。

[フィールド]という要素を用いることで、動的な値を表示することができます。 "見積No"、"見積日"と書かれた見出しには静的な値を表示するので[テキスト]を配置し、 値を表示する場所には[フィールド]を配置します。 さらに、それぞれ[垂直揃え]を[center(中央)]とし、 [水平揃え]を見出しならば[left(左)]、値ならば[right(右)]としておきます。

次に、この要素にどのような値を表示するかを定義するための式を書きます。 [フィールド]型の要素をダブルクリックすると、以下のダイアログが現れます。

帳票に与えたデータから指定した列の値を得るには、.(ドット)の後に列名を書きます。 今回は、見積No(mitsumoriNo)、見積日(mitsumoriDate)というデータ列の値を取得したいので、 それぞれ".mitsumoriNo"、".mitsumoriDate"と指定します。 ここで指定した内容は、プロパティウィンドウの[式]という項目に反映されます。

さらに、[モック]と書かれているテキストボックスには、 要素がどのように表示されるかをレポートデザイナ上で確認するための、仮の値を指定します。 見積Noについては、最大で10桁の数値が表示されるという想定とし、"d10"と指定します。 さらに、見積日については日付型の値が表示されるように"t"と指定します。

続いて、書式の設定を行います。

まず、見積Noは数値10桁でゼロ埋めを行うものとします。 プロパティウィンドウの[書式]項目の[+設定]をクリックし、 その中にある[書式文字列]に"0000000000"と入力します。

さらに、[Excel書式]という項目にも"0000000000"と入力します。 このプロパティが設定されていると、Excel(XLS/XLSX)形式で帳票を出力する場合に書式文字列としてセルに設定されます。 [Excel書式]が省略されていた場合はセルに書式文字列は設定されず、 値が[書式]の設定に従って文字列に変換された上でセルに代入されるようになります。

見積日については、[書式] > [書式文字列]に"yyyy年MM月dd日"と入力し、 [Excel書式]には"yyyy年mm月dd日"と入力します。

ここまでの作業の完成イメージは以下のようになります。

その他の要素の追加

その他の要素を追加します。

得意先の1行目には".tokuisaki1"という式を指定します。 2行目については、' 御中'という文字列を付けるために、式を"(& .tokuisaki2 ' 御中')"とします。 さらに、どちらも[フォント] > [フォント名]を[mincho]とし、[下線]にチェックを入れます。

御見積合計金額は、金額の合計値を求める式についての説明が必要となるため、 後ほど配置することにします。

全ての[テキスト]と[フィールド]の[垂直揃え]と[水平揃え]を、それぞれ適切に設定します。

なお、複数の要素を選択した上でプロパティを一括設定することもできます。 要素の複数選択を行うには、 デザインウィンドウでマウスをドラッグするか、shiftキーを押しながら要素をクリックします。

もしくは、まず1つの要素に設定を行った上で、それをctrlを押しながらドラッグすることで、 コピーしながら配置するという方法もあります。

最後に、構成ツリーのトップにある(レポート)を選択し、 プロパティウィンドウの[フォント] > [フォント名]を[mincho]とします。 これで、個別にフォント指定のされていない要素が全て明朝体になります。

プレビュー

ヘッダが完成したところで、プレビュー機能を用いて帳票の出力イメージを確認してみます。 ウィンドウの左上にある[プレビュー]ボタンをクリックします。

以下のウィンドウが開き、デザイン中の帳票がどのように出力されるかを確認することができます。

ウィンドウの下部にある表では、プレビューに使われるデータを入力・編集することができます。 このデータを「デザイン用データ」と呼びます。 入力したデザイン用データはファイルとして保存し、後から読み込んで再利用することもできます。 なお、RapidReportのインストールフォルダには、今回の例のためのサンプルデータがあらかじめ用意されています。

プレビューウィンドウのメニューで[データ] > [データを開く]から、 インストールフォルダ以下のexample\cs\example\report\example1.rrdtを選択すると、 以下のようにデータが読み込まれ、その内容でプレビューが行われます。

データを編集すると即座にプレビューに反映されるので、自由に書き換えて試してみてください。

ボディと明細の定義

構成ツリーの(グループ)上で[右クリック] > [コンテントを追加]を選択します。 追加されたコンテントを、ボディとして定義していきます。

まずは[見出し]に"ボディ"と入力します。

ボディは子オブジェクトとして明細を持っており、この明細がデータ行の数だけ繰り返されるようにします。 ボディそのものが繰り返されるわけではありません。

明細を追加するために、構成ツリー上でボディを選択して[右クリック] > [グループを追加]をクリックします。 追加されたグループを選択し、[見出し]に"明細グループ"と入力します。 さらに、[明細]プロパティにチェックを入れることで、 このグループの下にある内容は渡されたデータ行の数だけ繰り返し表示されるようになります。

続いて、明細グループの下にあるコンテントを選択し、[見出し]を"明細"とします。 さらに、高さを設定するためにプロパティの[サイズ] > [初期]に20と入力します。

明細に各要素を追加し、以下の内容にします。

品名、入数、箱数、単位、単価の[式]はそれぞれ、 ".hinmei"、".irisu"、".hakosu"、".tani"、".tanka"と指定します。

数量は、入数と箱数の積で算出されるので、[式]に"(* .irisu .hakosu)"と指定します。

金額は、数量と単価の積になるので、[式]に"(* .irisu .hakosu .tanka)"と設定すれば算出することができます。 ただし、金額の値は後ほど消費税額や合計金額の計算にも利用されるので、 カスタム列という形で定義することにします。

品名と単位の[モック]は、それぞれ"w16"と"w2"とします。 数値を表示する要素(入数、箱数、数量、単価、金額)はカンマ編集を行うために[書式] > [書式文字列]と、[Excel書式]に"#,##0"と指定し、 [モック]には"d8"と指定します。

さらに、各要素の[垂直揃え]と[水平揃え]を、それぞれ適切に設定します。

構成ツリーのトップにある(レポート)を選択し、 プロパティウィンドウで[カスタム列]の[+追加]をクリックして、以下のように記入します。

これで、"kingaku"、"zei"というデータ列が定義されます。 "zei"は消費税額を表すデータ列で、金額に税率(8%)を掛け、小数点以下を切り捨てて求めることにします。

明細内の金額には、".kingaku"という式を指定します。

プレビューを開いて、明細が表示されていることを確認してみてください。

指定した数の明細行を表示

与えられたデータが何行だったとしても、 この帳票は1ページに必ず明細を20行表示するようにします。 このような制御は、明細グループの[配置]内で[並べる最大数]を20とし、 [空行を出力]にチェックを入れることで実現できます。

さらに、品名と重なる位置に"以下余白"と書かれた[テキスト]要素を配置し、 最初の空白行でのみ表示されるように、[表示条件]に"state.blank_first"と書きます。

再度プレビューで確認をしてみてください。

フッターの定義

構成ツリー上で、(レポート)のすぐ下にある(グループ)を選択し、[右クリック] > [コンテントを追加]をクリックします。 追加されたコンテントの[見出し]を"フッター"とします。

フッターの高さを広げます。デザインウィンドウで□を下端までドラッグすると、高さは142となります。 ここで、余白やヘッダーやボディの高さが変更されても常にフッターが下端に配置されるように指定します。

デザインウィンドウで□をダブルクリックすると、灰色に変わります。 この状態にすると、[サイズ]の[初期]に0が入り、[初期逆向指定]にチェックがつきます。 これで、用紙の下端を基準として0ポイントの位置までの高さという指定ができます。

要素の追加

フッターに各要素を追加し、以下の内容にします。

合計(税抜)には、"sum.kingaku"という式を指定し、消費税(外税)には、"sum.zei"という式を指定します。 合計金額はその和となるので、"(+ sum.kingaku sum.zei)"という式を指定します。 それぞれ、カンマ編集が行われるように[書式]を設定し、[垂直揃え][水平揃え]を適切に指定します。

最後に、先ほど後回しにしていた御見積合計金額をヘッダーに配置します。 この要素の[式]も"(+ sum.kingaku sum.zei)"となります。 表示する場所がヘッダーであっても、問題なく全体の合計値を得ることができます。

さらに、御見積合計金額は、先頭に¥(円マーク)を付け、 なおかつカンマ編集をするために [書式] > [書式文字列]に "¥#,##0" と指定します。 [Excel書式]には、円マークをエスケープするために、"¥¥#,##0" と指定します。 また、他の要素よりも大きく表示されるようにするため、[フォント]>[フォント名]に[mincho]、 [フォントサイズ]に14と指定し、[太字]にチェックを入れます。

再び、プレビューで確認をしてください。

帳票定義ファイルの保存

以上でレポートデザイナによる帳票デザイン作業は終了です。

「保存」ボタンで、帳票定義ファイルを"example1.rrpt"という名前で保存します。

プログラムの作成

先ほど作成した帳票定義ファイルを用いて、実際に帳票を出力するプログラムを作成します。

言語はC#/VisualBasic/Javaのいずれかを用います。 先ほどの帳票定義ファイルは、プログラムの実行パスの場所に"report\example1.rrpt"という名前で配置されているものとします。

※ここではコード例を示すのみとし、内容の詳しい説明は行いません。帳票出力処理の詳細ついては「帳票出力の仕組み」をご覧ください。
※各言語、各出力形式ごとのサンプルコードが「最小限のコード」にまとまっています。こちらも併せてご確認ください。

C#

参照設定

C#でプログラムを作成する前に、いくつかのdllファイルを参照設定に追加する必要があります。 「プログラム開発の準備」に、どのdllを参照すべきかの説明があります。

データの定義

帳票に渡すデータは、DataTableオブジェクトか、またはDTOのリストを用いることができます。 それぞれの例を示すので、いずれかを選択して試してみてください。

最初に、DataTableオブジェクトを用いたデータ定義の例を以下に示します。

  // DataTableを利用したサンプル
  private static DataTable getDataTable()
  {
      DataTable ret = new DataTable();
      ret.Columns.Add("mitsumoriNo", typeof(Decimal));
      ret.Columns.Add("mitsumoriDate", typeof(DateTime));
      ret.Columns.Add("tokuisaki1", typeof(String));
      ret.Columns.Add("tokuisaki2", typeof(String));
      ret.Columns.Add("hinmei", typeof(String));
      ret.Columns.Add("irisu", typeof(Decimal));
      ret.Columns.Add("hakosu", typeof(Decimal));
      ret.Columns.Add("tani", typeof(String));
      ret.Columns.Add("tanka", typeof(Decimal));
      ret.Rows.Add(101, DateTime.ParseExact("2013/03/01", "yyyy/MM/dd", null),
        "株式会社 岩手商事", "北上支社",
        "ノートパソコン", 1, 10, "台", 70000);
      ret.Rows.Add(101, DateTime.ParseExact("2013/03/01", "yyyy/MM/dd", null),
        "株式会社 岩手商事", "北上支社",
        "モニター", 1, 10, "台", 20000);
      ret.Rows.Add(101, DateTime.ParseExact("2013/03/01", "yyyy/MM/dd", null),
        "株式会社 岩手商事", "北上支社",
        "プリンタ", 1, 2, "台", 25000);
      ret.Rows.Add(101, DateTime.ParseExact("2013/03/01", "yyyy/MM/dd", null),
        "岩手機器販売 株式会社", "北上店",
        "トナーカートリッジ", 2, 2, "本", 5000);
      return ret;
  }  

続いて、DTOのリストを用いた例を以下に示します。

  class ExampleDto
  {
    public String Tokuisaki1 { get; set; }
    public String Tokuisaki2 { get; set; }
    public int MitsumoriNo { get; set; }
    public DateTime MitsumoriDate { get; set; }
    public String Hinmei { get; set; }
    public int Irisu { get; set; }
    public int Hakosu { get; set; }
    public String Tani { get; set; }
    public int Tanka { get; set; }
  }
  // DTOを用いたサンプル
  private static IList getDataTable()
  {
    IList ret = new List();
    {
      ExampleDto r = new ExampleDto();
      r.Tokuisaki1 = "株式会社 岩手商事";
      r.Tokuisaki2 = "北上支店";
      r.MitsumoriNo = 101;
      r.MitsumoriDate = DateTime.ParseExact("2013/03/01", "yyyy/MM/dd", null);
      r.Hinmei = "プリンタ";
      r.Irisu = 1;
      r.Hakosu = 2;
      r.Tani = "台";
      r.Tanka = 25000;
      ret.Add(r);
    }
    ...
    return ret;
  }

帳票を出力するコード

データの準備ができたので、帳票を出力するコードを書きます。

帳票を出力するまでの詳しい説明は、 「帳票出力の仕組み」にあります。

各形式の帳票を出力するプログラムは、 「最小限のコード」にあります。

最初に行う必要があるのは帳票定義ファイルを読み込んでReportオブジェクトを作成し、 データを渡すという処理です。 その具体的なコードは以下のようになります。

  // 帳票定義ファイルを読み込みます
  Report report = new Report(Json.Read("report\\example1.rrpt"));

  // 帳票にデータを渡します
  report.Fill(new ReportDataSource(getDataTable()));

  // ページ分割を行います
  ReportPages pages = report.GetPages();

最後に作られたpagesというオブジェクトを用いて、 いくつかの形式で帳票を出力していきます。

PDF出力

PDF形式で帳票を出力するコードは以下のようになります。

  // PDF出力
  using (FileStream fs = new FileStream("output\\example1.pdf", FileMode.Create))
  {
    PdfRenderer renderer = new PdfRenderer(fs);
    // バックスラッシュ文字を円マーク文字に変換します
    renderer.Setting.ReplaceBackslashToYen = true;
    pages.Render(renderer);
  }  

Excel(XLS)出力

XLS形式で帳票を出力するコードは以下のようになります。

  // XLS出力
  using (FileStream fs = new FileStream("output\\example1.xls", FileMode.Create))
  {
      HSSFWorkbook workbook = new HSSFWorkbook();
      XlsRenderer renderer = new XlsRenderer(workbook);
      // Renderメソッドを呼ぶ前に必ずNewSheetメソッドを呼んでワークシートを作成します
      renderer.NewSheet("見積書");
      pages.Render(renderer);
      workbook.Write(fs);
  }

Excel(XLSX)出力

XLSX形式で帳票を出力するコードは以下のようになります。

  // XLSX出力
  using (FileStream fs = new FileStream("output\\example1.xlsx", FileMode.Create))
  {
      XSSFWorkbook workbook = new XSSFWorkbook();
      XlsxRenderer renderer = new XlsxRenderer(workbook);
      // Renderメソッドを呼ぶ前に必ずNewSheetメソッドを呼んでワークシートを作成します
      renderer.NewSheet("見積書");
      pages.Render(renderer);
      workbook.Write(fs);
  }

直接印刷

プリンタに直接印刷するコードは以下のようになります。

  // 直接印刷
  // ダイアログを出して印刷します
  Printer printer = new Printer(pages);
  if (printer.PrintDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
  {
    printer.PrintDocument.Print();
  }

以下のように書くと、ダイアログを出さずに印刷できます。

  // 直接印刷
  // ダイアログを出さずに印刷します
  Printer printer = new Printer(pages);
  printer.PrintDocument.Print();

プレビュー

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

  // プレビュー画面表示
  FmPrintPreview preview = new FmPrintPreview(printer);
  // プレビュー画面が開かれた時点で表示倍率を現在のウィンドウサイズに合わせます
  preview.StartUpZoomFit = true;
  preview.ShowDialog();

VisualBasic

参照設定

VisualBasicでプログラムを作成する前に、いくつかのdllファイルを参照設定に追加する必要があります。 「プログラム開発の準備」に、どのdllを参照すべきかの説明があります。

データの定義

帳票に渡すデータは、DataTableオブジェクトか、またはDTOのリストを用いることができます。 それぞれの例を示すので、いずれかを選択して試してみてください。

最初に、DataTableオブジェクトを用いたデータ定義の例を以下に示します。

  ' DataTableを利用したサンプル
  Private Function getDataTable() As DataTable
      Dim ret As New DataTable
      ret.Columns.Add("mitsumoriNo", GetType(Decimal))
      ret.Columns.Add("mitsumoriDate", GetType(Date))
      ret.Columns.Add("tokuisaki1", GetType(String))
      ret.Columns.Add("tokuisaki2", GetType(String))
      ret.Columns.Add("hinmei", GetType(String))
      ret.Columns.Add("irisu", GetType(Decimal))
      ret.Columns.Add("hakosu", GetType(Decimal))
      ret.Columns.Add("tani", GetType(String))
      ret.Columns.Add("tanka", GetType(Decimal))
      ret.Rows.Add(101, DateTime.ParseExact("2013/03/01", "yyyy/MM/dd", Nothing), _
          "株式会社 岩手商事", "北上支社", _
          "ノートパソコン", 1, 10, "台", 70000)
      ret.Rows.Add(101, DateTime.ParseExact("2013/03/01", "yyyy/MM/dd", Nothing), _
          "株式会社 岩手商事", "北上支社", _
          "モニター", 1, 10, "台", 20000)
      ret.Rows.Add(101, DateTime.ParseExact("2013/03/01", "yyyy/MM/dd", Nothing), _
          "株式会社 岩手商事", "北上支社", _
          "プリンタ", 1, 2, "台", 25000)
      ret.Rows.Add(101, DateTime.ParseExact("2013/03/01", "yyyy/MM/dd", Nothing), _
          "株式会社 岩手商事", "北上支社", _
          "トナーカートリッジ", 2, 2, "本", 5000)
      Return ret
  End Function

続いて、DTOのリストを用いた例を以下に示します。

  Public Class ExampleDto
    Public Property Tokuisaki1 As String
    Public Property Tokuisaki2 As String
    Public Property MitsumoriNo As String
    Public Property MitsumoriDate As DateTime
    Public Property Hinmei As String
    Public Property Irisu As Integer
    Public Property Hakosu As Integer
    Public Property Tani As String
    Public Property Tanka As Integer
  End Class
  ' DTOを利用したサンプル
  Private Function getDataTable() As IList
    Dim ret As New List(Of ExampleDto)
    With Nothing
      Dim r As New ExampleDto
      r.Tokuisaki1 = "株式会社 岩手商事"
      r.Tokuisaki2 = "北上支社"
      r.MitsumoriNo = 101
      r.MitsumoriDate = DateTime.ParseExact("2013/03/01", "yyyy/MM/dd", Nothing)
      r.Hinmei = "ノートパソコン"
      r.Irisu = 1
      r.Hakosu = 10
      r.Tani = "台"
      r.Tanka = 70000
      ret.Add(r)
    End With
    ...
    Return ret
  End Function

帳票を出力するコード

データの準備ができたので、帳票を出力するコードを書きます。

最初に行う必要があるのは帳票定義ファイルを読み込んでReportオブジェクトを作成し、 データを渡すという処理です。 その具体的なコードは以下のようになります。

  ' 帳票定義ファイルを読込みます
  Dim report As New Report(Json.Read("report\example1.rrpt"))

  '帳票にデータを渡します
  report.Fill(New ReportDataSource(getDataTable))

  'ページ分割を行います
  Dim pages As ReportPages = report.GetPages()

最後に作られたpagesというオブジェクトを用いて、 いくつかの形式で帳票を出力していきます。

PDF出力

PDF形式で帳票を出力するコードは以下のようになります。

  ' PDF出力
  Using fs As New FileStream("output\example1.pdf", IO.FileMode.Create)
      Dim renderer As New PdfRenderer(fs)
      ' バックスラッシュ文字を円マーク文字に変換します
      renderer.Setting.ReplaceBackslashToYen = True
      pages.Render(renderer)
  End Using  

Excel(XLS)出力

XLS形式で帳票を出力するコードは以下のようになります。

  ' XLS出力
  Using fs As New FileStream("output\example1.xls", IO.FileMode.Create)
      Dim workbook As New HSSFWorkbook
      Dim renderer As New XlsRenderer(workbook)
      ' Renderメソッドを呼ぶ前に必ずNewSheetメソッドを呼んでワークシートを作成します
      renderer.NewSheet("見積書")
      pages.Render(renderer)
      workbook.Write(fs)
  End Using

Excel(XLSX)出力

XLSX形式で帳票を出力するコードは以下のようになります。

  ' XLSX出力
  Using fs As New FileStream("output\example1.xlsx", IO.FileMode.Create)
      Dim workbook As New XSSFWorkbook
      Dim renderer As New XlsxRenderer(workbook)
      ' Renderメソッドを呼ぶ前に必ずNewSheetメソッドを呼んでワークシートを作成します
      renderer.NewSheet("見積書")
      pages.Render(renderer)
      workbook.Write(fs)
  End Using

直接印刷

プリンタに直接印刷するコードは以下のようになります。

  ' 直接印刷
  ' ダイアログを出して印刷します  
  Dim printer As New Printer(pages)
  If printer.PrintDialog.ShowDialog = DialogResult.OK Then
      printer.PrintDocument.Print()
  End If

以下のように書くと、ダイアログを出さずに印刷できます。

  ' 直接印刷
  ' ダイアログを出さずに印刷します
  Dim printer As New Printer(pages)
  printer.PrintDocument.Print()

プレビュー

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

  ' プレビュー画面表示
  Dim printer As New Printer(pages)
  Dim preview As New FmPrintPreview(printer)
  ' プレビュー画面が開かれた時点で表示倍率を現在のウィンドウサイズに合わせます
  preview.StartUpZoomFit = True
  preview.ShowDialog()  

Java

クラスパスの追加

Javaでプログラムを作成する前に、いくつかのjarファイルをクラスパスに含める必要があります。 「プログラム開発の準備」に、どのjarを含めるべきかの説明があります。

データの定義

帳票に渡すデータの形式としては、DataTableというオブジェクトか、 またはJavaBeansのリストを用いることができます。 それぞれの例を示すので、いずれかを選択して試してみてください。

最初に、DataTableオブジェクトを用いたデータ定義の例を以下に示します。

  // DataTableを利用したサンプル
  private static DataTable getDataTable() throws Exception {
      // DataTableはList<Map>を拡張したクラスで
      // 列と行からなる表データを格納することができます。
      DataTable ret = new DataTable();
      SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
      ret.setFieldNames("mitsumoriNo", "mitsumoriDate",
                        "tokuisaki1", "tokuisaki2",
                        "hinmei", "irisu", "hakosu", "tani", "tanka");
      ret.addRecord().puts(101, sdf.parse("2013/03/01"),
                        "株式会社 岩手商事", "北上支社",
                        "ノートパソコン", 1, 10, "台", 70000);
      ret.addRecord().puts(101, sdf.parse("2013/03/01"),
                        "株式会社 岩手商事", "北上支社",      
                        "モニター", 1, 10, "台", 20000);
      ret.addRecord().puts(101, sdf.parse("2013/03/01"),
                        "株式会社 岩手商事", "北上支社",      
                        "プリンタ", 1, 2, "台", 25000);
      ret.addRecord().puts(101, sdf.parse("2013/03/01"),
                        "株式会社 岩手商事", "北上支社",      
                        "トナーカートリッジ", 2, 2, "本", 5000);
      return ret;
  }

続いて、JavaBeansを用いた例を以下に示します。

  public class ExampleBean1 {

      private String tokuisaki1;
      private String tokuisaki2;
      private int mitsumoriNo;
      private Date mitsumoriDate;
      ...

      public String getTokuisaki1() {
          return tokuisaki1;
      }
      public void setTokuisaki1(String tokuisaki1) {
          this.tokuisaki1 = tokuisaki1;
      }
      public String getTokuisaki2() {
          return tokuisaki2;
      }
      public void setTokuisaki2(String tokuisaki2) {
          this.tokuisaki2 = tokuisaki2;
      }
      ...
  }  
  // JavaBeans(getterメソッド)を利用したサンプル
  private static List<ExampleBean1> getDataTable() throws Exception {
      List<ExampleBean1> ret = new ArrayList<ExampleBean1>();
      SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
      {
          ExampleBean1 r = new ExampleBean1();
          r.setTokuisaki1("株式会社 岩手商事");
          r.setTokuisaki2("北上支社");
          r.setMitsumoriNo(101);
          r.setMitsumoriDate(sdf.parse("2013/03/01"));
          r.setHinmei("ノートパソコン");
          r.setIrisu(1);
          r.setHakosu(10);
          r.setTani("台");
          r.setTanka(70000);
          ret.add(r);
      }
      ...
      return ret;
  }

getter/setterメソッドではなく、publicフィールドを持ったオブジェクトも利用できます。

  public class ExampleBean2 {

      public String tokuisaki1;
      public String tokuisaki2;
      public int mitsumoriNo;
      public Date mitsumoriDate;
      public String hinmei;
      public int irisu;
      public int hakosu;
      public String tani;
      public int tanka;

  }
  // JavaBeans(publicフィールド)を利用したサンプル
  private static List<ExampleBean2> getDataTable() throws Exception {
      List<ExampleBean2> ret = new ArrayList<ExampleBean2>();
      SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
      {
          ExampleBean2 r = new ExampleBean2();
          r.tokuisaki1 = "株式会社 岩手商事";
          r.tokuisaki2 ="北上支社";
          r.mitsumoriNo = 101;
          r.mitsumoriDate = sdf.parse("2013/03/01");
          r.hinmei = "ノートパソコン";
          r.irisu = 1;
          r.hakosu = 10;
          r.tani = "台";
          r.tanka = 70000;
          ret.add(r);
      }
      ...
      return ret;
  }

帳票を出力するコード

データの準備ができたので、帳票を出力するコードを書きます。

最初に行う必要があるのは帳票定義ファイルを読み込んでReportオブジェクトを作成し、 データを渡すという処理です。 その具体的なコードは以下のようになります。

  // 帳票定義を読込みます
  Report report = new Report(ReadUtil.readJson("report/example1.rrpt"));

  // 帳票にデータを渡します
  // ReportDataSourceにはResultSetまたはListを渡すことができます
  // Listの要素はMapまたはJavaBeansである必要があります
  // このサンプルにgetDataTableの実装を複数用意していますので、
  // いずれかのコメントアウトを外して試してみてください
  report.fill(new ReportDataSource(getDataTable()));

  // ページ分割を行います
  ReportPages pages = report.getPages();

最後に作られたpagesというオブジェクトを用いて、 いくつかの形式で帳票を出力していきます。

PDF出力

PDF形式で帳票を出力するコードは以下のようになります。

  // PDF出力
  FileOutputStream fos = new FileOutputStream("output/example1.pdf");
  try {
      PdfRenderer renderer = new PdfRenderer(fos);
      // バックスラッシュ文字を円マーク文字に変換します
      renderer.setting.replaceBackslashToYen = true;
      pages.render(renderer);
  } finally {
      fos.close();
  }  

Excel(XLS)出力

XLS形式で帳票を出力するコードは以下のようになります。

  // XLS出力
  FileOutputStream fos = new FileOutputStream("output/example1.xls");
  try {
      HSSFWorkbook workBook = new HSSFWorkbook();
      XlsRenderer renderer = new XlsRenderer(workBook);
      // Renderメソッドを呼ぶ前に必ずNewSheetメソッドを呼んでワークシートを作成します
      renderer.newSheet("見積書");
      pages.render(renderer);
      workBook.write(fos);
  } finally {
      fos.close();
  }  

Excel(XLSX)出力

XLSX形式で帳票を出力するコードは以下のようになります。

  // XLSX出力
  FileOutputStream fos = new FileOutputStream("output/example1.xlsx");
  try {
      XSSFWorkbook workBook = new XSSFWorkbook();
      XlsxRenderer renderer = new XlsxRenderer(workBook);
      // Renderメソッドを呼ぶ前に必ずNewSheetメソッドを呼んでワークシートを作成します
      renderer.newSheet("見積書");
      pages.render(renderer);
      workBook.write(fos);
  } finally {
      fos.close();
  }