(2010/5/5 : githubにあげました)

EPUB生成のライブラリをrubyで作ってみました。ブツはこちら。http://github.com/skoji/gepub

  • コンテンツ指定のファイルは/content.opfに固定
  • identifierのschemeはURLに固定
  • identifierの名前はBookIDに固定

などなどいろいろ決め打ちにしています。

利用例はこんなです。

require 'rubygems'
require 'gepub'
require 'fileutils'
epubdir = "testepub" # epubのコンテンツを置くディレクトリ
title = "samplepub"  # epubのファイル名
FileUtils.rm_rf(epubdir)
FileUtils.mkdir(epubdir)
# epub メタデータ作成
epub = GEPUB::Generator.new(title)
epub.author="the author"
epub.publisher="the publisher"
epub.date = "2010-05-03"
epub.identifier = "/migrated-b/testepub/2010-05-03" # identifierはURLのみ
# サンプルのコンテンツ生成。通常は、別途作成しているはず。
[ 'coverpage', 'chapter1', 'chapter2' ].each {
|name|
File.open(epubdir + "/#{name}.html", 'w') {
|file|
file << <<EOF
<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja">
<head>
<title>sample #{name} </title>
</head>
<body>
<h1>#{name}</h1>
<p>here comes the contents for #{name}</p>
</body>
</html>
EOF
}
}
# "coverpage"は表紙を想定。従って目次のデータには入れない。
# spineに入れた順にリーダでは表示される。
epub.addManifest('cover', "coverpage.html", 'application/xhtml+xml')
epub.spine.push('cover')
epub.addManifest('chap1', "chapter1.html", 'application/xhtml+xml')
epub.spine.push('chap1')
epub.addNav('chap1', 'Chapter 1', "chapter1.html")
epub.addManifest('chap2', "chapter2.html", 'application/xhtml+xml')
epub.spine.push('chap2')
epub.addNav('chap1', 'Chapter 2', "chapter2.html")
# この他にcssとかイメージがあれば、それもManifestへ追加する。
# cssやイメージはspineやaddNavへの追加は不要。
# container.xml/contents.opf/toc.ncxなどのファイルを生成
epub.create(epubdir)
# 生成したディレクトリから、epubファイル作成
epub.create_epub(epubdir, ".")

サンプル書いて気付きましたが、EPUB::Creatorというクラスの役割がぶれてるなあ。