AdvanceSoftware Tech Blog

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

ExcelCreator for JavaでExcelファイルに値を差し込んでPDFファイルとして保存する

弊社製品のExcelCreator for Javaでは、Excelファイルを基にしてPDFファイルが出力できます。
本記事ではレイアウト済みのExcelファイルをテンプレートとして使用し、値の挿入のみでPDFファイルを出力するコンソールアプリを作成します。

この記事通りに進めていけばPDFファイル出力の動作が確認できます。

環境

PDFファイルの完成イメージ

当記事では最終的に以下のようなPDFファイルを出力します。

基となるExcelファイルは以下のようなレイアウトです。
このExcelファイルに値を挿入した結果をPDFファイルとして出力します。

コンソールアプリの作成

まずはコンソールアプリを作ります。

Javaプロジェクトの作成

Eclipseを起動し、任意の名前で新しいワークスペースを作ります。
今回は「../sample」としました。

[起動] ボタンをクリックするとワークスペースが作成され、Eclipseのメインウインドウが開きます。

上部メニューの [ファイル] > [新規] > [Java プロジェクト] を選択すると [新規 Java プロジェクト] ウインドウが開きます。

開いたウインドウで以下の項目を編集し、[完了] ボタンをクリックします。

プロジェクト名:ecsample
実行環境 JRE の使用:JavaSE-1.8

エントリーポイントの作成

上部メニューの [ファイル] > [新規] > [クラス] を選択すると [新規 Java クラス] ウインドウが開きます。

開いたウインドウで以下の項目を編集し、[完了] ボタンをクリックします。

名前:App
どのメソッド・スタブを作成しますか?:public static void main(String[] args) のみチェックを入れる

以下の内容でApp.javaが作成されます。

main メソッド内に以下のコードを記述し、アプリケーションを実行します。
正常な場合、コンソールに "Hello Java" が出力されます。

System.out.println("Hello Java");

ExcelCreatorの使用準備

ExcelCreator for Javaを使用してExcelファイルを出力するところまで作成します。

jarファイルの参照

jarファイルを格納するlibフォルダを作成します。
上部メニューの [ファイル] > [新規] > [フォルダ] を選択すると [新規フォルダー] ウインドウが開きます。

開いたウインドウで以下の項目を編集し、[完了] ボタンをクリックします。

フォルダー名:lib

先程作成したlibフォルダにExcelCreator for Javaのjarファイルを格納します。

jarファイルはExcelCreator for Javaのzipファイル展開後、「XlsCrtJ\bin」配下にある「excelcreator-1.1.0.1721.jar」を使用します。(体験版の場合「excelcreator-trial-1.1.0.1721.jar」)
※製品バージョンは執筆時点で最新のものを使用しています。
※体験版は以下のページからダウンロードできます。
https://www.adv.co.jp/download/download-confrm.php?skey=59&ftype=D

次に配置したjarファイルのクラスパスを通します。

パッケージエクスプローラー上のプロジェクトフォルダ「ecsample」を右クリックし、最下部にある [プロパティ―] を選択すると [ecsample のプロパティ―] ウインドウが開きます。開いたウインドウの左側のメニューから [Java のビルド・パス] を選択すると以下のような画面になります。

[ライブラリー] > [JAR の追加] をクリックし、先程libフォルダ内に格納したExcelCreatorのjarファイルを選択して [OK] ボタンをクリックします。

ここまでの作業でパッケージエクスプローラーの [参照ライブラリー] にjarファイルが表示されることを確認します。

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

libフォルダを作成したときと同じ手順で、新たにresourcesフォルダを作成してテンプレートのExcelファイルを格納します。

テンプレートとして使用するExcelファイルは、ExcelCreator for Java収録のサンプルで使用されているものを流用します。jarファイル参照の際に展開したExcelCreator for Javaのフォルダ内から、以下のファイルをコピーしてください。

  • XlsCrtJ\samples\client\data\templateoverlay.xlsx

ここまででExcelCreatorを使用するための下準備が整いました。

Excelファイルの出力

App.javaにコードを追記して、Excelファイルが出力されることを確認します。

package ecsample;

import jp.co.adv.excelcreator.creator.XlsxCreator;

public class App {

    public static void main(String[] args) {
        XlsxCreator creator = new XlsxCreator();
        // openBookメソッドでテンプレートのExcelファイルを指定します。
        creator.openBook("out.xlsx", "resources/templateoverlay.xlsx");
        
        // セルを指定して値を挿入します。
        creator.getCell("B4").setValue("ExcelCreator for Java");
        creator.getCell("H4").setValue(10);
        creator.getCell("K4").setValue(40000);
        creator.getCell("O4").setFunc("=H4*K4", null);
        
        creator.getCell("B5").setValue("VB-Report 11");
        creator.getCell("H5").setValue(8);
        creator.getCell("K5").setValue(85000);
        creator.getCell("O5").setFunc("=H5*K5", null);
        
        creator.getCell("B6").setValue("ExcelWebForm");
        creator.getCell("H6").setValue(5);
        creator.getCell("K6").setValue(70000);
        creator.getCell("O6").setFunc("=H6*K6", null);
        
        creator.getCell("O10").setFunc("=SUM(O4:R8)", null);
        creator.getCell("O11").setFunc("=O10*0.08", null);
        creator.getCell("O12").setFunc("=O10+O11", null);

        // 編集したExcelファイルを保存します。
        creator.closeBook(true);
        
        System.out.println("出力完了");
    }

}

実行するとプロジェクトフォルダ直下に「out.xlsx」が作成されます。

プログラムから設定した数式やExcel関数の計算は製品側で行っておらず、Excelでファイルを開いた際に自動で計算が行われますが、使用しているExcelのバージョンによっては自動計算が行われない場合があります。

この場合、setFullCalcOnLoadメソッドにtrueを設定することで、自動計算を強制するフラグをExcelファイル内に設定します。

// closeBook メソッドより前で呼び出す
creator.setFullCalcOnLoad(true);
creator.closeBook(true);

PDFファイルの出力

PDFファイルを出力するためには、closeBookメソッドに引数を追加します。

// 修正前
creator.closeBook(true);
// 修正後
creator.closeBook(true, "out.pdf", false);

修正後のオーバーロードの引数は以下の通りです。

引数 説明
第1引数 true:変更内容を保存する
false:変更内容を破棄し、ファイル出力を行わない
第2引数 出力するPDFファイルのパス
第3引数 true:作成したExcelファイルを破棄する(PDFファイルのみ出力される)
false:作成したExcelファイルを破棄しない(Excelファイル / PDFファイル両方が出力される)

実行すると以下のようなPDFファイルが出力されます。

PDFファイル出力のオプション

PDFファイルの出力はできましたが、まだ合計金額などが正しく表示できていません。正しく表示できていない箇所はExcelの数式や関数を使用している箇所です。
PDFファイル出力時のオプションを設定することで数式や関数の計算結果を反映させることが可能になります。

ここでは、数式の再計算オプションの他、使用できるオプションをいくつかご紹介します。

数式の再計算

setReCalcValueメソッドにtrueを渡すことで、Excelファイルに設定された数式や関数を再計算してPDFファイルに反映します。

creator.openBook("out.xlsx", "resources/templateoverlay.xlsx");

// ~Excelファイルの編集処理

creator.setReCalcValue(true);
creator.closeBook(true, "out.pdf", false);

文書のプロパティ

PDFファイルの文書プロパティを設定できます。
ExcelCreator for Java で設定できる文書プロパティは以下の通りです。

文書プロパティ 対応メソッド
タイトル setTitle(String)
サブタイトル setSubject(String)
作成者 setAuthor(String)
アプリケーション setApplication(String)
PDF 変換 setProducer(String)
creator.openBook("out.xlsx", "resources/templateoverlay.xlsx");

// ~Excelファイルの編集処理

creator.getPdf().setTitle("タイトル");
creator.getPdf().setSubject("サブタイトル");
creator.getPdf().setAuthor("作成者");
creator.getPdf().setApplication("アプリケーション");
creator.getPdf().setProducer("PDF 変換");

creator.closeBook(true, "out.pdf", false);

フォント埋め込み

setEmbedFontsメソッドで埋め込むフォント名を指定することでPDFファイルにフォントを埋め込むことが可能です。
フォントを埋め込むことで対象フォントがインストールされていない環境でも表示に差異が出なくなります。

creator.openBook("out.xlsx", "resources/templateoverlay.xlsx");

// ~Excelファイルの編集処理

creator.getPdf().setEmbedFonts(new String[] { "*" });
creator.closeBook(true, "out.pdf", false);

さいごに

ExcelCreator for JavaでPDFファイルを出力する方法を解説してきました。

この記事で作成したサンプルは以下のリンクからダウンロードできます。
※ExcelCreator for Javaのjarファイルは体験版(excelcreator-trial-1.1.0.1721.jar)に置き換えています。

https://www.adv.co.jp/download/blog/output-pdf-excelcreatorjava/ecsample.zip

また、以下のオンラインデモで当製品の機能を一通り確認できます。

http://aws.adv.co.jp/demo/excelcreatorjava/

今回は以上です。ありがとうございました。

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