HTML5+javascriptを使ってブラウザでEPUB3を作成するで、ブラウザでEPUBを作るのはやってみたので、今度はNode.jsでEPUBを作っていきたいと思います。まぁ、もうできているのですが、まだバグなどはいっぱい残っているだろう。
github
https://github.com/kyukyunyorituryo/fxlepub3
npm
https://www.npmjs.com/package/fxlepub3
何をしているかというと、テンプレートエンジンのejsを使ってテンプレートを書き換えて、EPUBにパッケージ化している。
画像のEPUBなので、画像を取り込んで、EPUBファイルに入れることもしている。
簡単な作りなので、テンプレートを除いて本体のコードが150行程度である。
fs = require('fs');
ejs = require('ejs');
var JSZip = require("jszip");
var filetype = require('file-type');
var sizeOf = require('image-size');
const uuidv4 = require('uuid/v4');
var uuid4 = uuidv4()
var today = new Date();
var date = today.toISOString().slice(0,19)+"Z";
読み込んだパッケージも6つで、そんなに量が多くない。
- ejsはテンプレートエンジン。
- jszipはEPUB圧縮用である。archiverを使う人もいるけどなれてる方を使う。
- file-typeは画像の拡張子や形式を調べるのに使った。
- image-sizeは画像のサイズから、固定レイアウトの指定するサイズを読み取った。
- uuidは、前に使ってたuuid.jsと違っている部分があって、「urn:uuid:」があるかないかが違っていた。
フォルダー内の画像の読み込み、テンプレートファイルの読み込み、設定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",
"cover_file": {},
"files": []
}
epub.gen(data)
npmでパッケージ化しているので、requireから読み出す。指定したフォルダーから画像を読み込んで、指定した場所にEPUBを出力する。
<% for (let i in data.files) { -%>
<item media-type="<%= data.files[i].type %>" id="<%= data.files[i].file_id %>" href="image/<%= data.files[i].file_id+"."+data.files[i].ext %>"/>
<% } -%>
テンプレートエンジンで繰り返し処理を追加するのにテンプレート内にfor文を書いている。本体よりもテンプレートファイルの方に処理が複雑になってしまった。