AdvanceSoftware Tech Blog

アドバンスソフトウェア株式会社の技術ブログ

AS-Report for Javaでグラフを追加した帳票を作成する

AS-Report for Javaでは、テンプレートExcelファイルに配置されたグラフの情報を取得する機能(※xlsx形式のみ対応)があります。これにより、取得したグラフの情報から、サードパーティー製のライブラリ等を使用してグラフイメージを生成し、プレビュー、印刷、PDFファイルにグラフイメージを追加することが可能です。
この記事では、プレビュー、印刷、PDFファイルにグラフを追加する方法について解説していきます。

AS-Report for Javaではグラフ情報の取得及び、プレビュー、印刷、PDFファイルへのグラフイメージの挿入機能についてのみ提供、サポートします。このため、サードパーティー製のライブラリ等を使用したグラフイメージの生成はユーザー独自に実装して頂く必要があります。

なお、JFreeChartを使用したグラフイメージ生成クラスのサンプル(ChartCreator.java)を製品に収録しております。

環境

  • Windows 11
  • Eclipse 2022
  • JDK 8
  • AS-Report for Java
  • JFreeChart(※弊社で動作確認済みの外部ライブラリ

使用するテンプレートExcelファイル

今回は、以下のようなExcelファイルを用意しました。

テンプレートExcelファイル
テンプレートExcelファイル

動的 Web プロジェクトの作成

初めに動的 Web プロジェクトを作成していきます。
Eclispeを起動し、上部メニューの[ファイル] > [新規] > [動的 Web プロジェクト]を選択し、
[新規動的 Web プロジェクト]ウインドウを開きます。

動的 Web プロジェクトの作成
動的 Web プロジェクトの作成
以下の項目を設定し、右下の[完了]をクリックします。
プロジェクト名:asrjsample
ターゲット・ランタイム:Tomcat8 (Java8)
新規動的 Web プロジェクト
新規動的 Web プロジェクト

サーブレットの作成

上部メニューの[ファイル] > [新規] > [その他]を選択しウィザードを開き、[Web] > [サーブレット]を選択して右下の[次へ]をクリックします。

サーブレットの作成
サーブレットの作成
以下の項目を設定し、右下の[完了]をクリックします。
クラス名:GraphServlet
サーブレット作成
サーブレット作成
GraphServlet.javaが作成されます。
GraphServlet.java
GraphServlet.java

JSP ファイルの作成

上部メニューの[ファイル] > [新規] > [その他]を選択しウィザードを開き、[Web] > [JSP ファイル]を選択して右下の[次へ]をクリックします。

JSP ファイル
JSP ファイル

[WEB-INF]フォルダを選択し、ファイル名を"index.jsp"に設定して右下の完了をクリックします。

新規 JSP ファイル
新規 JSP ファイル

index.jspファイルが作成されます。

index.jsp
index.jsp

AS-Reportの使用準備

jarファイルの追加

以下のようにlibフォルダにAS-Report for Javaのjarファイルを格納します。
なお、jarファイルは下記から取得してください。
"AS-Report for Javaインストール先フォルダ\AS-ReportJ\bin\asreport-1.X.X.jar"

jarファイルの格納
jarファイルの格納
また、製品購入前のユーザー様でも体験版をダウンロード頂くことで同様にjarファイルをお使い頂けます。(※一部制限あり
AS-Report for Java体験版はこちら(無償)

スクリプトファイルの追加

webappフォルダ配下にAS-Report for Javaスクリプトファイルを配置します。
なお、スクリプトファイルは下記から取得してください。
"AS-Report for Javaインストール先フォルダ\AS-ReportJ\bin\Scripts"

スクリプトファイル
スクリプトファイル

JFreeChartの使用準備

今回はJFreeChartを使用してグラフイメージを生成するのでJFreeChartのjarファイルもlibフォルダに格納します。
なお、下記の製品フォルダにJFreeChartのjarファイルが格納されています。
"AS-Report for Javaインストール先フォルダ\AS-ReportJ\samples\web\standard\WebContent\WEB-INF\lib\jcommon-1.0.23.jar"
"AS-Report for Javaインストール先フォルダ\AS-ReportJ\samples\web\standard\WebContent\WEB-INF\lib\jfreechart-1.0.19.jar"

JFreeChart
JFreeChart

テンプレートExcelファイルの格納

WEB-INFフォルダ配下にdataフォルダを作成し、テンプレートExcelファイルを格納します。

テンプレートExcelファイルの配置
テンプレートExcelファイルの配置

グラフイメージを追加した帳票の作成

グラフイメージを挿入した帳票作成のコードを実装していきます。

グラフイメージの生成について

グラフイメージの生成はユーザー独自に実装して頂く必要がありますが、下記の製品フォルダにJFreeChartを使用したグラフイメージ生成クラス(ChartCreator.java)のサンプルが格納されているため、今回はそちらを使用します。

"AS-Report for Javaインストール先フォルダ\AS-ReportJ\samples\web\standard\src\model\ChartCreator.java"

ChartCreator.javaをプロジェクトに追加します。

ChartCreator.java
ChartCreator.java
ChartCreator.javaを追加後、パッケージの指定でエラーがでるため、パッケージの指定を削除します。
エラー
エラー

index.jspへコードの実装

index.jspへコードを実装します。

index.jspコード
index.jspコード

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>AS-Report for Java Sample</title>
<script type="text/javascript"
    src="<%=request.getContextPath()%>/Scripts/jquery-3.7.1.min.js"></script>
<script type="text/javascript"
    src="<%=request.getContextPath()%>/Scripts/gunzip.min.js"></script>
<script type="text/javascript"
    src="<%=request.getContextPath()%>/Scripts/asreport.viewer.1.0.0.js"></script>
</head>
<body>
    <!--帳票ドキュメント格納用の DIV 要素(id="documentcontainer")を用意。スクリプトレットで帳票ドキュメントを挿入-->
    <div id="documentcontainer" style="display: none;">
        <%=(String) request.getAttribute("svgzdocument")%>
    </div>

    <!--ビューア配置用の DIV 要素(id="viewercontainer")を用意。widthheight でサイズ指定-->
    <div id="viewercontainer" style="width: 100%; height: 850px;"></div>

    <!--ビューアの表示とプレビュー実行-->
    <script type="text/javascript">
       $(function() {
            // ビューアを id 名 [viewercontainer] の DIV 要素に表示
            viewer = new CellReport.Viewer('viewercontainer');
            // id 名 [documentcontainer] の DIV 要素に格納された帳票ドキュメントを読み込む
            viewer.report('documentcontainer');
        });
   </script>
</body>
</html>

GraphServlet.javaへコードの実装

GraphServlet.javaへコードを実装します。

GraphServlet.javaコード
GraphServlet.javaコード

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import jp.co.adv.asreport.CellReport;
import jp.co.adv.asreport.enums.SvgSaveType;
import jp.co.adv.xl.chart.ChartData;

/**
 * Servlet implementation class GraphServlet
 */
@WebServlet("/GraphServlet")
public class GraphServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
    * @see HttpServlet#HttpServlet()
    */
    public GraphServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
    * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
    */
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        CellReport cellReport = new CellReport();
        ServletContext context = this.getServletContext();
        cellReport.setFileName(context.getRealPath("/WEB-INF/data/Template.xlsx"));
        cellReport.getReport().start();
        cellReport.getReport().file();
        cellReport.getPage().start("グラフ", "1-9999");
        // 設定されたグラフの数を取得します。
        int chartCount = cellReport.getChartCount();
        for (int i = 0; i < chartCount; i++) {
            // グラフ情報を取得します。
            ChartData chartData = cellReport.getChartData(i);
            ChartCreator chartCreator = new ChartCreator();
            // B8 セルに作成したチャートイメージを設定します。
            cellReport.getCell("B8").getCanvas().addChart(chartCreator.getChartImage(chartData), chartData);
        }
        cellReport.getPage().end();
        cellReport.getReport().end();
        request.setAttribute("svgzdocument", cellReport.getReport().getSvgz(SvgSaveType.IncludeExcelPdf));
        RequestDispatcher requestDispatcher = request.getRequestDispatcher("/WEB-INF/index.jsp");
        requestDispatcher.forward(request, response);
    }

    /**
    * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
    */
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);
    }

}

プロジェクトの実行

プロジェクトを実行し、(http://localhost:****/asrjsample/GraphServlet)へアクセスします。 グラフが追加された帳票のプレビューが確認できます。

プレビュー
プレビュー

印刷、PDFファイルの出力

・印刷Microsoft XPS Document Writer使用)
プレビュー左上の印刷ボタンから印刷を行えます。

印刷
印刷

・PDFファイル
プレビュー左上のファイルアイコンをクリックしてPDFファイル出力を行えます。

PDFファイル
PDFファイル

対応するグラフの種類

  • 折れ線グラフ
  • 集合縦棒グラフ
  • 集合横棒グラフ
  • 円グラフ
  • ドーナツグラフ
  • 面グラフ
  • レーダーチャート
  • 散布図

さいごに

AS-Report for Javaでグラフを追加した帳票を作成する方法について解説してきました。
今回は以上になります。ありがとうございました。
AS-Report for Java製品ページはこちら
AS-Report for Java体験版はこちら(無償)

© 2022 Advance Software Co., Ltd. All Rights Reserved.