作りながら考えるので初期設計と変わってきてしまっている。必要な要素の実験をしているので仕方がない。node.jsの場合との違いはJavaではライブラリを使わなくてもいいことがある。JSONからオブジェクトを作って、オブジェクトで必要なものを一括管理して、テンプレートに入れてZIP圧縮という手順にしている。
JSで一度書いたものをJavaにするだけなのにものすごく時間がかかっているのは、Javaの知識が浅いのとオブジェクト指向に慣れていないのとがある。JSでZIP圧縮がjszipのライブラリが簡単だったので、Javaはどうするかなと考えていた。JavaでEPUB圧縮するにはと検索してもあまりなかったので、EPUBチェックにEPUB圧縮のコードがあったので見てた。application/epub+zipを無圧縮でmimetypeというファイルにする必要がある。めんどくさいのが無圧縮の部分でそれ以外は、javaのzip圧縮ライブラリはいくつもあるので簡単だ。
Javaのファイルの書き出しはbyte[]でstringから書き出すという形が楽そうなのでそうした。velocityテンプレートもvmファイルからではなく、テキスト・ブロックからstringに代入したほうが楽そうだった。intellijのバグか何なのかvmファイルが保存しても勝手にロールバックして何度も書き換えが必要になっていた。
とりあえず画像とjsonから固定レイアウトのEPUBを出力し、EPUBチェックが通るようになった。あとはGUIの設計と精度を上げること。ただ今の方法だと、同じファイルを二回呼び出したりするとバグになる可能性がある。
null
uuid
timezone
画像サイズの取得
ファイルタイプ
ファイルパス
Javaでオブジェクトの確認にJSONに変換してチェックしている。
try {
String jsonAsString = objectMapper.writeValueAsString(data);
System.out.println(jsonAsString);
} catch (JsonProcessingException ex) {
throw new RuntimeException(ex);
}
JSONビュワーで確認
velocityの使い方
EPUBの圧縮方法
mokuji配列の検索
作った文字列をzipに次々入れていく感じに入れていきたいので。
関数作って一括で処理したいが、mimetypeを無圧縮でするのでmimetypeだけを別で処理した。