JavaScript版やブラウザ版があるが使っているとEPUB化に時間がかかりすぎる気がするし、設定が保存できないのがストレスになっている。なのでこれをJavaで作れないかなと試してみる。jsの時にjsonで設定ファイルを書いていたのでJavaでもjsonデータを読み込んで処理をさせたい。また、テンプレートエンジンはejsをvelocityに書き換える。jsonパーサーにJacksonを使うという説明が多いが、org.jsonで練習してみる。
必要なもの
var epub = require('fxlepub3');
var data={
"url":"C:/Users/user/Downloads/comic/testdata/",
"output":'C:/Users/user/Downloads/comic/fxlsample/out.epub',
"title": "タイトル",
"author1": "著者名1",
"author2": "著者名2",
"index": [
["cover.jpg", "表紙"],
["00001.jpg", "目次"],
["00005.jpg", "最終ページ"]
],
"page_direction": "rtl",
"panel_view": "horizontal-rl",
//"width": 800,
//"height": 1200,
"cover_file": {},
"files": []
}
epub.gen(data)
入力するjsonデータを利用しようとすると、jsのコード量の10倍になっている。ほぼコードジェネレーターを使えばいいのだけど。このjsonで、入れ子クラスが必要でファイル数が増えた。ファイル数が増えることで全体が見通しにくくなった。
{
"url":"C:/Users/user/Downloads/comic/testdata/",
"output":"C:/Users/user/Downloads/comic/fxlsample/out.epub",
"title": "タイトル",
"author1": "著者名1",
"author2": "著者名2",
"index": [
['cover.jpg', '表紙'],
['i-003.jpg', '目次']
],
"page_direction": "rtl",
"panel_view": "horizontal-rl",
"width": 800,
"height": 1200,
"cover_file": {
file_id:"cover"
file_name:"cover.jpg"
},
"files": [
[{file_name:"i-003.jpg"}],[
{file_name"i-002.jpg"}],
]
}
多次元配列のjsonの場合はこの方法では無理っぽい。どうやらjacksonを使ったほうがよさそう。
適当に作ったオブジェクトに代入しようとすると、書き方が間違っていたらしく変換ができなかった。なのでオブジェクトを作ったうえでjson
data =mapper.readValue(jsonText, Data.class);
GSONとJacksonがあって、Jacksonのほうがいいらしい。
//テンプレートファイルの読み込み
var containerXML = fs.readFileSync(__dirname + '/templete/container.xml', 'utf-8');
var css_style = fs.readFileSync(__dirname + '/templete/fixed-layout-jp.css', 'utf-8');
var pagetemplete = fs.readFileSync(__dirname + '/templete/page.ejs', 'utf-8');
var opftemplete = fs.readFileSync(__dirname + '/templete/opf.ejs', 'utf-8');
var navtemplete = fs.readFileSync(__dirname + '/templete/nav.ejs', 'utf-8');
var toctemplete = fs.readFileSync(__dirname + '/templete/tocncx.ejs', 'utf-8');
var covertemplete = fs.readFileSync(__dirname + '/templete/cover.ejs', 'utf-8');
Javaでリソースフォルダのテキストをどう読み込むか
以前にnode.jsで固定レイアウトのEPUBが作れるfxlepub3というのを作ったが、利用者があまりいなかった。
その後、ブラウザで固定レイアウトのEPUBが作れるようにするとある程度利用者ができた。