docparser-epub
EPUB2 / EPUB3 后端:container.xml → OPF(metadata / manifest / spine)→ 逐 spine 文档解析,
每章保留结构化块(标题 / 段落 / 列表 / 引用 / 代码 / 表格),而不是压平成一段文本。
安装
用法
走统一引擎(推荐,epub 由扩展名 + ZIP magic 路由):
use ;
let mut reg = new;
register_defaults;
register_defaults;
let doc = new.parse?;
for page in &doc.pages
只想要书的结构化结果(元数据 + 分章块):
let book = read_epub?;
println!;
for ch in &book.chapters
书库/缩略图场景只取封面与书名(不读正文):
let = epub_cover_href;
结构解析规则
| 项 | 规则 |
|---|---|
| OPF 定位 | META-INF/container.xml → 首个 rootfile@full-path |
| 元数据 | dc:title(首个)/ dc:creator(全部)/ dc:language / dc:publisher / dc:date 中的四位年份 |
| 章节顺序 | spine/itemref 顺序即阅读顺序;.ncx 条目跳过 |
| 章节标题 | EPUB3 nav(properties="nav")→ EPUB2 toc.ncx → 文档内首个标题 → 第N章 |
| 分章 | 单文档内多个标题时按层级自适应切节(h2 → h3 → h4;单节 > 8000 字才往深一层) |
| 封面 | properties="cover-image" → <meta name="cover"> 指向的 manifest 条目 |
| 元数据出口 | doc.meta.extra 的 epub.title / epub.authors / epub.language / epub.publisher / epub.year / epub.cover_href |
已知边界
- DRM 不解密:带
META-INF/encryption.xml的加密书会在读取正文时报corrupt。 - 图片/字体/样式资源不解包,只记录封面路径。
- href 不做 percent-decoding(与 Python 参考实现一致)。
- 与 Python 的差异:Python 每章只给一段纯文本,这里保留块结构;空白处理沿用 HTML 插件的「只去首尾」。
许可
MIT OR Apache-2.0