[レシピ] Javaで Field Reports を使用する方法

Java Bridge を用いることで,JavaをはじめとしたJVM上の言語からも Field Reports を利用することができます。

 

今回は,JavaとJVM上に実装されたLisp系言語であるClojureを用いて,単票形式の見積書を作成してみました。

 

なおJava Bridgeでは,レンダリングパラメータとして文字列形式のJSONのみ受け付けます。JSON文字列の作成には,各JVM言語用のJSONライブラリが必要となります。

Java から利用する場合

ここでは,JSONライブラリとしてJSONICを使用しました。

 

HashMapをJSONのobject型(辞書型)に,ArrayListをarray型に対応付けてレンダリングパラメータの元となるデータ構造を組み立てています。

 

JSONICではJavaのオブジェクトをJSONのobject型に対応付けることもできますので,実アプリケーション開発時にはO/Rマッパーから取得したオブジェクトを少ない手間でJSONに変換することができるものと思われます。

import java.util.ArrayList;
import java.util.HashMap;    
import net.arnx.jsonic.JSON;  
import jp.co.field_works.Reports;
import jp.co.field_works.ReportsException;

public class mitumori {  
    public static void main(String[] args) throws ReportsException {
        // レンダリング・パラメータの作成
        HashMap param = new HashMap();  
        param.put("template", "./mitumori.pdf");
        HashMap context = new HashMap();
        context.put("date", "平成23年7月11日");
        context.put("number", "10R0001");
        context.put("to", "△△△惣菜株式会社");
        context.put("title", "肉じゃがの材料");
        context.put("delivery_date", "平成23年7月31日");
        context.put("delivery_place", "貴社指定場所");
        context.put("payment_terms", "銀行振込");
        context.put("expiration_date", "発行から3ヶ月以内");
        HashMap icon = new HashMap();
        icon.put("icon", "./stamp.png");
        context.put("stamp1", icon);
        ArrayList table = new ArrayList();
        table.add(new String[]{"1", "N001", "牛肉(切り落とし)", "200g", "250円", "500円"});
        table.add(new String[]{"2", "Y001", "じゃがいも(乱切り)", "3個", "30円", "90円"});
        table.add(new String[]{"3", "Y002", "にんじん(乱切り)", "1本", "40円", "40円"});
        table.add(new String[]{"4", "Y003", "たまねぎ(くし切り)", "1個", "50円", "50円"});
        table.add(new String[]{"5", "Y004", "しらたき", "1袋", "80円", "80円"});
        table.add(new String[]{"6", "Y005", "いんげん", "1袋", "40円", "40円"});
        context.put("table", table);
        context.put("sub_total", "800円");
        context.put("tax", "40円");
        context.put("total", "840円");
        param.put("context", context);
        final String json = JSON.encode(param);
        System.out.println(json);
        // レンダリング実行
        Reports.setLogLevel(3);
        Reports.render(json, "out.pdf");

    }  
}  

Clojureからの利用

Clojureの準標準ライブラリであるclojure-contribを使って,Clojureネイティブの辞書・リスト型データをJSONに変換しています。

(use 'clojure.contrib.json)
(import '(jp.co.field_works Reports))

(def param {
    :template "./mitumori.pdf",
    :context {
        :date "平成23年7月11日",
        :number "10R0001",
        :to "△△△惣菜株式会社",
        :title "肉じゃがの材料",
        :delivery_date "平成23年7月31日",
        :delivery_place "貴社指定場所",
        :payment_terms "銀行振込",
        :expiration_date "発行から3ヶ月以内",
        :stamp1 {:icon "./stamp.png"},
        :table [
            ["1" "N001" "牛肉(切り落とし)" "200g" "250円" "500円"]
            ["2" "Y001" "じゃがいも(乱切り)" "3個" "30円" "90円"]
            ["3" "Y002" "にんじん(乱切り)" "1本" "40円" "40円"]
            ["4" "Y003" "たまねぎ(くし切り)" "1個" "50円" "50円"]
            ["5" "Y004" "しらたき" "1袋" "80円" "80円"]
            ["6" "Y005" "いんげん" "1袋" "40円" "40円"]
        ]
        :sub_total "800円",
        :tax "40円",
        :total "840円"}})

(Reports/setLogLevel 4)
(Reports/render (json-str param) "./out.pdf")