#pdf #layout #pdf-document #text-layout #pdf-file #text #text-rendering

rckive-genpdf

用纯Rust编写的用户友好的PDF生成器

1个不稳定版本

0.4.0 2022年12月14日

#1674 in 文本处理

Download history 2/week @ 2024-05-28

65 每月下载量

EUPL-1.2

1MB
3.5K SLoC

rckive-genpdf-rs

这是由 genpdf-rs 分支出来的,由 RCKIVE 维护。

用纯Rust编写的用户友好的PDF生成器。

文档

genpdf 是一个基于 printpdfrusttype 的高级别PDF生成器。它负责页面布局和文本对齐,并将文档树渲染成PDF文档。所有的依赖项都是用Rust编写的,因此你不需要任何预安装的库或工具。

// Load a font from the file system
let font_family = genpdf::fonts::from_files("./fonts", "LiberationSans", None)
    .expect("Failed to load font family");
// Create a document and set the default font family
let mut doc = genpdf::Document::new(font_family);
// Change the default settings
doc.set_title("Demo document");
// Customize the pages
let mut decorator = genpdf::SimplePageDecorator::new();
decorator.set_margins(10);
doc.set_page_decorator(decorator);
// Add one or more elements
doc.push(genpdf::elements::Paragraph::new("This is a demo document."));
// Render the document and write it to a file
doc.render_to_file("output.pdf").expect("Failed to write PDF file");

要查看包含所有支持的元素的完整示例,请参阅 examples/demo.rs 文件。

功能

  • 纯Rust的PDF生成
  • 支持设置字体家族、样式和大小,以及文本颜色和文本效果(粗体或斜体)的文本渲染,并具有字距调整
  • 在单词边界处进行文本换行和可选的分词
  • 按顺序或以表格形式布局元素
  • 对形状的基本支持
  • 页面页眉和自定义页面装饰
  • 嵌入图像(缩放、位置、旋转)。

Cargo功能

此crate具有以下Cargo功能(默认不激活)

  • images:通过 image crate 添加对嵌入图像的支持。
  • hyphenation:通过 hyphenation crate 添加对分词的支持。

替代方案

  • printpdfgenpdf 使用的底层PDF库。它提供了对生成的文档的更多控制,但你必须注意所有细节,例如计算渲染文本的宽度和高度、排列元素并将它们分布在多页上。
  • latex 可以从 Rust 生成 LaTeX 文档。生成 PDF 文件需要安装 LaTeX。另外,用户输入的转义是一个复杂的问题,该库不支持。
  • tectonic 是基于 XeTeX 的 TeX 引擎。它部分用 C 语言编写,有一些非 Rust 依赖。
  • wkhtmltopdf 使用 wkhtmltox 库从 HTML 生成 PDF 文档。它需要一个预先安装的库,不支持自定义元素。

最低支持的 Rust 版本

该库至少支持 Rust 1.45.0 或更高版本。

贡献

欢迎对此项目做出贡献!请在 Github 上提交拉取请求。

如果您在寻找一个良好的起点,请查看 genpdf-rs 问题跟踪器中带有标签“good first issue”且状态为“open”的问题。

联系方式

有关错误报告或功能请求,请检查 Github 问题板,如果您的现有问题不存在,请创建一个新问题。有关问题,请查看 Github 讨论区

许可证

此存储库根据 EUPL-1.2 或更高版本许可,除非以下所述代码与上游存储库中的代码未更改。

此代码是从以下位置分叉的:[https://git.sr.ht/~ireas/genpdf-rs](https://git.sr.ht/~ireas/genpdf-rs)。所有未更改的代码根据 Apache-2.0 和 MIT 许可,文档根据 CC-0 许可,如原始存储库的 README 中所述。

在撰写本文档时,自分叉以来尚未从原始存储库进行合并。这意味着找到分叉前代码的主要方法是使用 Git:git checkout 38dd11e8

依赖项

~21MB
~157K SLoC