1个不稳定版本
0.4.0 | 2022年12月14日 |
---|
#1674 in 文本处理
65 每月下载量
1MB
3.5K SLoC
rckive-genpdf-rs
用纯Rust编写的用户友好的PDF生成器。
genpdf
是一个基于 printpdf
和 rusttype
的高级别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 添加对分词的支持。
替代方案
printpdf
是genpdf
使用的底层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