KDP(電子出版)のメモ 急急如律令

Amazon Kindleダイレクト・パブリッシングでの電子出版や電子書籍の作成販売について、文章やイラストの作成や編集方法について書いています。

EPUBをJavascritptで作成するときのメモ

epubのファイルを作成するときの最大の懸念だった、画像ファイルの保存はできるようになった。XMLをどのように編集するか。いちようDOMParserでパースしてから、シリアライズして戻すという方向で考えている。

XML | JavaScript プログラミング解説

 テンプレートの読み込み

EPUBのテンプレートはデジタルコミック協議会と電書協のサンプルEPUBから。改行を\nに置換して変数として取り込んだ。

 ファイルID、ユニークIDをどのように指定するかはまた今度。

日時

日時をepubで入れるがどのよう形式にするか。EPUBの中では次のようになっている。

dcterms:modified 2011-01-01T12:00:00Z

年月日T時間Zと言うかたちになっている。

ISO-8601 拡張形式 協定世界時(UTC)

qiita.com

developer.mozilla.org


ゼロパディング

連続するファイル名に頭に000などをつけて整列したときに順番に並びやすくする。ゼロパディングというらしい。

JavaScriptでゼロパディングして桁をそろえる方法

xmlの編集

XMLをどのように編集するか悩んだが、DOMParserとXMLシリアライザーでできるかどうか試してみよう。だめっぽかったら正規表現でやってもいいかな。

XML | JavaScript プログラミング解説

teratail.com

qiita.com

xlink:href等のxlinkで定義されている属性を書き換える場合はgetAttributeNS・setAttributeNSメソッドを用いる(getAttributeNS("http://www.w3.org/1999/xlink","href")).

svg要素の基本的な使い方まとめ

キンドル用のEPUBテンプレートを作る

 EPUBを作るサイトを作ろうと思ったが、ベースとなるEPUBを先に作ってみる。EPUBのバリデーションチェックはPaginaEpub-Checkerが楽かなと思って使っている。ただ、JAVAのランタイムだけじゃなくてSDKも入れないと動かない場合があるので要チェックかな。

github.com

 

metaタグの次の部分を

<meta property="rendition:layout">pre-paginated</meta>
<meta property="rendition:orientation">portrait</meta>
<meta property="rendition:spread">landscape</meta>

このようにする

<meta name="original-resolution" content="600x837" />
<meta name="primary-writing-mode" content="horizontal-rl" />
<meta name="book-type" content="comic" />
<meta content="true" name="zero-gutter" />
<meta content="true" name="zero-margin" />
<meta content="none" name="orientation-lock" />
<meta content="true" name="fixed-layout" />
<meta content="false" name="region-mag" />

キンドルでは、画像ファイルの解像度をmetaタグにoriginal-resolutionという名前で追加しないといけないようです。横×縦の順番で書く。

 

manifestタグに次の文を追加した

<item id="cimage" media-type="image/jpeg" href="images/cover.jpg" properties="cover-image" />

 これを素にキンドル用のEPUBを作ろうと思う。

 

固定レイアウトのEPUB3を作るjavascriptを作ってみる(まだ構想段階)

必要な機能として、タイトル、著者名、綴じ方向、解像度、目次、画像ファイルの読み込み、ZIP画像を考えていた。タイトルや著者名をサイト上から入力する。綴じ方向をrtlにかためておく。解像度を入力するようにするか、自動取得する。

 

 今やったところは、タイトルや著者名を入力するところと、画像ファイルの読み込み機能をつけた。つぎは取り込んだ画像ファイルをリネームして、imagesフォルダーにまとめようと思う。その後XHTML、CSS、OPFなどのテンプレートを作って追加する方法を考える。

 見開きなどの指定をUIでどのようにするかを決め兼ねている。

 

BootstrapとJsZipを組み合わせて固定レイアウトのEPUB3を作ってみようとしています。とりあえずココまでやったのをレポジトリにしてまとめた。

github.com

 

 

www.html5rocks.com

漫画のEPUBをどこの規格に合わせて作るか

epubを作るときに、どの規格に沿って作るか。自分の中での優先を考えるとidpf のEPUB validationをする。とりあえずキンドル向けに作ろうかと。

【楽天Koboライティングライフ】ヘルプ

kobo用のページもあるが電書協とデジタルコミック協議会に丸投げしている感じがある。kobo writing life自体の制限は厳し目。

 

densho.hatenablog.com

Samples | EPUB 3 Samples Project 

この中のharuko-html-jpegをベースに作るよ。

  • mimetype
  • META-INF 
  • OPS 

はじめの階層のフォルダ構成は上のようにmimetypeは拡張子なしのファイル。META-INFはフォルダーの中にcontainer.xmlが入っている。そういうもんだと思っておこう。

 OPSのフォルダー内がこれから。

 package.opfはほかではcontents.opfの場合もあるし名前を変えてもいいが、名前を変えるとcontainer.xmlの中身も変える必要がある。全体の中で一番編集しなければならないのがこのファイルだろう。本のIDとか編集した日付。言語、タイトル、含まれているファイル。などを列挙する必要がある。特に漫画の場合は、ページ自体を見開きにしたときに右にするか左にするかという設定もある。

  • タイトル
  • 言語
  • 見開き時の位置
  • ページの移動方向
  • 目次

CSSフォルダーはそのまま利用する、imagesには画像を入れてファイル名などを変更するか。

xhmlフォルダーには画像ページのxhtmltoc.ncx、toc.xhtmlがある。画像ページのhtmlではタイトルを入れたり、画像の説明を入れることがある。

toc.ncxは互換性のためにあるが、キンドルではこの目次が優先されることがある。xmlで書かれているため。

toc.xhtmlはほかではnav.xhtmlという名前の場合もある。キンドルではcover.xhtmlで表紙が必要になる。

余談として、haruko-html-jpegをkindlegenで変換しようとすると失敗するよ。

github.com

 

 

IDPF

EPUB 仕様書(EPUB 3.0, EPUB 3.0.1, EPUB 3.1)および関連文書の日本語訳

キンドルパブリッシングガイドライン

https://kindlegen.s3.amazonaws.com/AmazonKindlePublishingGuidelines_JP.pdf

電書協

電書協 EPUB 3 制作ガイド | 日本電子書籍出版社協会

kadokawa-epub.bookwalker.co.jp

www.digital-comic.jp

 

 

クライアントサイドJavaScriptでEPUBが作れるか調べてみた

 クライアントサイドJavaScriptで画像ファイルをzip圧縮はできるようなのでEPUBもできるんじゃないかなと思って調べてみることに。

 サーバサイドでEPUBを作れるサービスはよくあるが、漫画の場合はアップロード時間がかかる。ならばローカルで出来れば時間短縮になるが、他のOSでは動かないと対象は狭そう。別にjavascriptではなくてもjavaでも良さそうだが、MacだとかWindowsやスマホなどを考えるとブラウザで動ければ、大抵の端末で動くだろう。コマンドラインで操作しないだけでとっつきやすいと思う。さて、javascriptでEPUB作成は可能なのだろうか。

 ググったら、EPUBを作るjavascriptを見つけたがどうも規格が古そうだ。

d.hatena.ne.jp

 気になる問題点

  • javascriptでzip圧縮
  • フォルダの階層化
  • 画像ファイルの読み込みと保存

 調べているとJSZipでできそうかなと思った。試しに下のようなコードをJSZipのサイトのサンプルに入れるとepubみたいなファイルになる。当然中身は作っていないがファイル構造だけはできる。

var zip = new JSZip();
zip.file("mimetype", "application/epub+zip");
var meta = zip.folder("META-INF");
var container = zip.folder("OPS");
var img = zip.folder("OPS/images");
img.file("smile.gif", imgData, {base64: true});
zip.generateAsync({type:"blob"})
.then(function(content) {
// see FileSaver.js
saveAs(content, "example.epub");
});

 

stuk.github.io

 

 ローカルファイルをいったんブラウザに読み込んで、jszipを使ってアーカイブする方法を考えると。FileAPIを使って読み込ませるとそれらしくなる。こういう方向性で作ってみようと思う。

Make KMZ

 

nt-book.com