LoginSignup
5
3

More than 5 years have passed since last update.

Node.jsでEPUB 3を作る

Posted at

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文を書いている。本体よりもテンプレートファイルの方に処理が複雑になってしまった。

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3