rbook 0.1.5

An ebook library that supports parsing and reading the epub format.
Documentation

rbook

Crates.io Documentation

An ebook library that supports parsing and reading the epub format.

Usage

Including default features:

[dependencies]

rbook = "0.1.5"

Excluding default features:

[dependencies]

rbook = { version = "0.1.5", default-features = false }

Default features are the following:

  • reader: Enables reading of the ebook file by file
  • statistics: Enables word/character counting

Examples

Other examples can be found in the 'tests' directory.

Opening and reading an epub file:

use rbook::Ebook;

fn main() {
    // Creating an epub instance
    let epub = rbook::Epub::new("example.epub").unwrap();

    // Retrieving the title
    println!("Title = {}", epub.metadata().title().unwrap().value());

    // Creating a reader instance
    let mut reader = epub.reader();

    // Printing the contents of each page
    while let Some(content) = reader.next_page() {
        let media_type = content.get(ContentType::Type).unwrap();
        assert_eq!("application/xhtml+xml", media_type);
        println!("{}", content);
    }
}

Accessing metadata elements and attributes:

use rbook::Ebook;

fn main() {
    let epub = rbook::Epub::new("example.epub").unwrap();

    // Retrieving the first creator metadata element
    let creator = epub.metadata().creators().unwrap().first().unwrap();

    // Retrieving an attribute
    let id = creator.get_attribute("id").unwrap();

    // Retrieving a child element
    let role = creator.get_child("role").unwrap();
    let scheme = role.get_attribute("scheme").unwrap();

    assert_eq!("id", id.name());
    assert_eq!("creator01", id.value());
    assert_eq!("aut", role.value());
    assert_eq!("marc:relators", scheme.value());
}

Extracting images:

use rbook::Ebook;

fn main() {
    let epub = rbook::Epub::new("example.epub").unwrap();

    let img_elements = epub.manifest().images().unwrap();

    // Create new directory to store extracted images
    let dir = Path::new("extracted_images");
    fs::create_dir(&dir).unwrap();

    for img_element in img_elements {
        let img_href = img_element.value();

        // Retrieve image contents
        let img = epub.read_bytes_file(img_href).unwrap();

        // Retrieve file name from image href
        let file_name = Path::new(img_href).file_name().unwrap();

        // Create new file
        let mut file = File::create(dir.join(file_name)).unwrap();
        file.write_all(&img).unwrap();
    }
}

Sample ebooks

Sample ebooks in the 'tests/ebooks' directory are provided as is from IDPF under the CC-BY-SA 3.0 license.