26 个版本
0.7.4 | 2023 年 8 月 10 日 |
---|---|
0.7.0 | 2023 年 7 月 28 日 |
0.5.0 | 2022 年 1 月 26 日 |
0.4.8 | 2020 年 9 月 29 日 |
0.2.2 | 2017 年 3 月 20 日 |
#75 in 文本处理
643 每月下载量
用于 8 个 Crates (7 直接)
165KB
1.5K SLoC
一个用于生成 EPUB 文件的库。
此库的目的是使生成 EPUB 文件更容易:它将为您处理大部分模板代码,您只需负责填充实际内容。
使用方法
将以下内容添加到您的 Cargo.toml
文件中
[dependencies]
epub-builder = "0.6"
示例
use epub_builder::EpubBuilder;
use epub_builder::Result;
use epub_builder::ZipLibrary;
use epub_builder::EpubContent;
use epub_builder::ReferenceType;
use epub_builder::TocElement;
use std::io::Write;
fn run() -> Result<Vec<u8>> {
// Some dummy content to fill our books
let dummy_content = "Dummy content. This should be valid XHTML if you want a valid EPUB!";
let dummy_image = "Not really a PNG image";
let dummy_css = "body { background-color: pink }";
let mut output = Vec::<u8>::new();
// Create a new EpubBuilder using the zip library
EpubBuilder::new(ZipLibrary::new()?)?
// Set some metadata
.metadata("author", "Joan Doe")?
.metadata("title", "Dummy Book")?
// Set the stylesheet (create a "stylesheet.css" file in EPUB that is used by some generated files)
.stylesheet(dummy_css.as_bytes())?
// Add a image cover file
.add_cover_image("cover.png", dummy_image.as_bytes(), "image/png")?
// Add a resource that is not part of the linear document structure
.add_resource("some_image.png", dummy_image.as_bytes(), "image/png")?
// Add a cover page
.add_content(EpubContent::new("cover.xhtml", dummy_content.as_bytes())
.title("Cover")
.reftype(ReferenceType::Cover))?
// Add a title page
.add_content(EpubContent::new("title.xhtml", dummy_content.as_bytes())
.title("Title")
.reftype(ReferenceType::TitlePage))?
// Add a chapter, mark it as beginning of the "real content"
.add_content(EpubContent::new("chapter_1.xhtml", dummy_content.as_bytes())
.title("Chapter 1")
.reftype(ReferenceType::Text))?
// Add a second chapter; this one has more toc information about its internal structure
.add_content(EpubContent::new("chapter_2.xhtml", dummy_content.as_bytes())
.title("Chapter 2")
.child(TocElement::new("chapter_2.xhtml#1", "Chapter 2, section 1")))?
// Add a section. Since its level is set to 2, it will be attached to the previous chapter.
.add_content(EpubContent::new("section.xhtml", dummy_content.as_bytes())
.title("Chapter 2, section 2")
.level(2))?
// Add a chapter without a title, which will thus not appear in the TOC.
.add_content(EpubContent::new("notes.xhtml", dummy_content.as_bytes()))?
// Generate a toc inside of the document, that will be part of the linear structure.
.inline_toc()
// Finally, write the EPUB file to a writer. It could be a `Vec<u8>`, a file,
// `stdout` or whatever you like, it just needs to implement the `std::io::Write` trait.
.generate(&mut output)?;
Ok(output)
}
fn main() {
let _output = run().expect("Unable to create an epub document");
}
功能
epub-builder
的目标是使 EPUB 生成更简单。它负责压缩文件并生成以下文件
mimetype
toc.ncx
nav.xhtml
manifest.xml
content.opf
com.apple.ibooks.display-options.xml
.
它还尝试使生成正确的目录表更简单,并且可选地在文档中生成内联目录。
支持的 EPUB 版本
- 2.0.1 (默认)
- 3.0.1
缺失的功能
有各种 EPUB 功能 epub-builder
没有处理。特别是,有一些元数据可以更好地处理(例如,支持多个作者、文档中的多种语言等)。
还有许多不属于此库范围的事物:它不提供默认的 CSS、XHTML 内容的模板等。这些留给使用它的库或应用程序。
条件编译
EPUB 文件是 Zip 文件,因此我们需要压缩。默认情况下,此库提供了 Rust 压缩库和可能(或可能不)安装在您的系统上的 zip
命令的包装器。
可以使用 no-default-features
禁用这些包装器中的任何一个的编译(及其依赖项)。(如果您不启用至少一个,则此库将非常无用的)。
许可证
这是一个自由软件,在 Mozilla Public License,版本 2.0 下发布。
变更日志
请参阅变更日志文件。
依赖项
~2–11MB
~127K SLoC