17个稳定版本

2.1.2 2024年5月2日
2.1.1 2023年6月26日
2.0.0 2022年12月29日
1.2.4 2022年11月2日
0.1.2 2017年1月20日

#203文件系统

Download history 450/week @ 2024-05-02 302/week @ 2024-05-09 262/week @ 2024-05-16 207/week @ 2024-05-23 189/week @ 2024-05-30 154/week @ 2024-06-06 154/week @ 2024-06-13 256/week @ 2024-06-20 139/week @ 2024-06-27 231/week @ 2024-07-04 151/week @ 2024-07-11 153/week @ 2024-07-18 152/week @ 2024-07-25 185/week @ 2024-08-01 248/week @ 2024-08-08 136/week @ 2024-08-15

745 每月下载次数
12 个crates中使用 (11 直接)

GPL-3.0 许可证

1MB
723

epub-rs

Rust库,用于支持epub文件的阅读。

安装

将其添加到您的 Cargo.toml

[dependencies]
epub = "1.2.2"

MSRV

最低支持的Rust版本是1.42.0。


lib.rs:

EPUB库lib,用于读取和导航epub文件内容

示例

打开

use epub::doc::EpubDoc;
let doc = EpubDoc::new("test.epub");
assert!(doc.is_ok());
let doc = doc.unwrap();

获取文档元数据

元数据是一个 HashMap,存储epub中定义的所有元数据

let title = doc.mdata("title");
assert_eq!(title.unwrap(), "Todo es mío");

访问资源

在resources变量中存储epub中定义的每个资源,按id索引,包含完整内部路径和mimetype。它是一个 HashMap<a: String, (b: String, c: String)>,其中 a 是资源id, b 是资源完整路径, c 是资源mimetype

assert_eq!(23, doc.resources.len());
let tpage = doc.resources.get("titlepage.xhtml");
assert_eq!(tpage.unwrap().0, Path::new("OEBPS/Text/titlepage.xhtml"));
assert_eq!(tpage.unwrap().1, "application/xhtml+xml");

使用spine导航

spine是一个 Vec<String>,存储epub spine作为资源id

assert_eq!(17, doc.spine.len());
assert_eq!("titlepage.xhtml", doc.spine[0]);

使用文档内部状态导航

use epub::doc::EpubDoc;
let doc = EpubDoc::new("test.epub");
let mut doc = doc.unwrap();
assert_eq!(0, doc.get_current_page());
assert_eq!("application/xhtml+xml", doc.get_current_mime().unwrap());

doc.go_next();
assert_eq!("000.xhtml", doc.get_current_id().unwrap());
doc.go_next();
assert_eq!("001.xhtml", doc.get_current_id().unwrap());
doc.go_prev();
assert_eq!("000.xhtml", doc.get_current_id().unwrap());

doc.set_current_page(2);
assert_eq!("001.xhtml", doc.get_current_id().unwrap());
assert_eq!(2, doc.get_current_page());
assert!(!doc.set_current_page(50));

// doc.get_current() will return a Vec<u8> with the current page content
// doc.get_current_str() will return a String with the current page content

获取封面

use std::fs;
use std::io::Write;
use epub::doc::EpubDoc;

let doc = EpubDoc::new("test.epub");
assert!(doc.is_ok());
let mut doc = doc.unwrap();

let cover_data = doc.get_cover().unwrap();

let f = fs::File::create("/tmp/cover.png");
assert!(f.is_ok());
let mut f = f.unwrap();
let resp = f.write_all(&cover_data);

依赖项

~5–7MB
~122K SLoC