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")
コメントをお書きください