rbook

An ebook library that supports parsing and reading the epub format.
Usage
Including default features:
[dependencies]
rbook = "0.4.0"
Excluding default features and selection:
[dependencies]
rbook = { version = "0.4.0", default-features = false, features = ["multi-thread"] }
Default features are the following:
reader: Enables reading of the ebook file by file.
statistics: Enables word/character counting.
Non-default optional features:
multi-thread: Enables support for multithreaded environments.
Examples
Other examples can be found in the 'tests' directory.
Opening and reading an epub file:
use rbook::Ebook;
fn main() {
let epub = rbook::Epub::new("example.epub").unwrap();
assert_eq!("Jane and John", epub.metadata().title().unwrap().value());
let mut reader = epub.reader();
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();
let creator = epub.metadata().creators().first().unwrap();
assert_eq!("John Doe", creator.value());
let id = creator.get_attribute("id").unwrap();
assert_eq!("creator01", id);
let role = creator.get_child("role").unwrap();
assert_eq!("aut", role.value());
let scheme = role.get_attribute("scheme").unwrap();
assert_eq!("marc:relators", scheme);
}
Alternative way of accessing elements:
use rbook::Ebook;
use rbook::xml::Find;
fn main() {
let epub = rbook::Epub::new("example.epub").unwrap();
let title = epub.metadata().find_value("title").unwrap();
assert_eq!("Jane and John", title);
let creator = epub.metadata().find_value("creator").unwrap();
assert_eq!("John Doe", creator);
let role = epub.metadata().find_value("creator > role").unwrap();
assert_eq!("aut", role);
let file_as = epub.metadata().find_value("creator > file-as").unwrap();
assert_eq!("Doe, John", file_as);
}
Extracting images:
use rbook::Ebook;
use std::fs::{self, File};
use std::path::Path;
fn main() {
let epub = rbook::Epub::new("example.epub").unwrap();
let img_elements = epub.manifest().images();
let dir = Path::new("extracted_images");
fs::create_dir(&dir).unwrap();
for img_element in img_elements {
let img_href = img_element.value();
let img = epub.read_bytes_file(img_href).unwrap();
let file_name = Path::new(img_href).file_name().unwrap();
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.