#epub #generate #content #builder #default #xhtml #version

epub-builder

用于生成 EPUB 文件的 Rust 库

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 文本处理

Download history 273/week @ 2024-03-14 246/week @ 2024-03-21 268/week @ 2024-03-28 252/week @ 2024-04-04 163/week @ 2024-04-11 181/week @ 2024-04-18 210/week @ 2024-04-25 189/week @ 2024-05-02 162/week @ 2024-05-09 244/week @ 2024-05-16 154/week @ 2024-05-23 172/week @ 2024-05-30 159/week @ 2024-06-06 164/week @ 2024-06-13 193/week @ 2024-06-20 103/week @ 2024-06-27

643 每月下载量
用于 8 个 Crates (7 直接)

MPL-2.0 许可证

165KB
1.5K SLoC

在 Docs.rs 上查看完整的库文档。

一个用于生成 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