KitaitiMakoto edited this page Nov 5, 2012 · 9 revisions
Clone this wiki locally

EPUB Parser gem parses EPUB 3 book loosely.


gem install epub-parser


As a command-line tool

epubinfo path/to/book.epub

To see help:

epubinfo -h

As a library

Use EPUB::Parser.parse at first:

require 'epub/parser'

book = EPUB::Parser.parse '/path/to/book.epub'

This book object can yield page by spine's order(spine defines the order to read that the author determines):

book.each_page_on_spine do |page|
  # do something...

page above is a EPUB::Publication::Package::Manifest::Item object and you can call #href to see where is the page file:

book.each_page_on_spine do |page|
  file = page.href # => path/to/page/in/zip/archive
  html = Zip::Archive.open('/path/to/book.epub') {|zip|

And Item provides syntax suger #read for above:

html = page.read
doc = Nokogiri.HTML html
# do something with Nokogiri as always

For several utilities of Item, see Item page.

By the way, although book above is a EPUB::Book object, all features are provided by EPUB module. Therefore YourBook class can include the features of EPUB:

require 'epub'

class YourBook < ActiveRecord::Base
    include EPUB

book = EPUB::Parser.parse(
  :class => YourBook # *************** pass YourBook class
book.instance_of? YourBook # => true
book.required = 'value for required field'
book.each_page_on_spine do |epage|
  page = YouBookPage.create(
    :some_attr    => 'some attr',
    :content      => epage.read,
    :another_attr => 'another attr'
  book.pages << page

You are also able to find YourBook object for the first:

book = YourBook.find params[:id]
ret = EPUB::Parser.parse(
  :book => book # ******************* pass your book instance
) # => book
ret == book # => true; this API is not good I feel... Welcome suggestion!
# do something with your book

More documents comming soon..., hopefully :)


  • libxml2 and libxslt for Nokogiri gem


This library is still in work. Only a few features are implemented and APIs might be changed in the future. Note that.

Currently implemented:


This library is distributed under the term of the MIT Licence. See MIT-LICENSE file for more info.