3个版本 (有破坏性)
0.4.0 | 2021年5月4日 |
---|---|
0.3.0 | 2016年8月2日 |
0.2.0 | 2016年8月1日 |
#1933 in 文本处理
每月 1,238 次下载
在 resufancy 中使用
62KB
970 行
wkhtmltopdf-rs
对wkhtmltopdf的高级Rust绑定。这是一个围绕由 libwkhtmltox-sys 提供的低级绑定构建的包装器。
资源 | 链接 |
---|---|
Crates | |
文档 | Cargo文档 |
上游 | wkhtmltopdf.org |
这个crate旨在通过安全的、便利的Rust提供wkhtmltopdf的完整配置。Wkhtmltopdf有几个非直观的限制(主要由Qt引起),这使得使用C绑定很容易导致未定义的行为。对API影响很大的两个这样的限制是
- Wkhtmltopdf的初始化只能在每个进程中发生一次;反初始化使得它可以安全地重用
- PDF生成必须始终在初始化wkhtmltopdf的线程上进行
这个crate应该使得在安全代码中违反这些规则变得不可能。如果您需要并行生成PDF,您将需要启动/派生进程来做到这一点。这样的抽象将是这个crate的一个受欢迎的补充。
安装
安装 wkhtmltopdf 0.12.3。
注意:这个库使用 libs
(共享对象)和 includes
(头文件)来生成PDF,而不是使用wkhtmltopdf可执行文件。
使用方法
基本用法如下
let html = r#"<html><body><div>foo</div></body></html>"#;
let mut pdf_app = PdfApplication::new().expect("Failed to init PDF application");
let mut pdfout = pdf_app.builder()
.orientation(Orientation::Landscape)
.margin(Size::Inches(2))
.title("Awesome Foo")
.build_from_html(&html)
.expect("failed to build pdf");
pdfout.save("foo.pdf").expect("failed to save foo.pdf");
println!("generated PDF saved as: foo.pdf");
构建
只要安装了包含文件(例如 pdf.h
),那么它就是全部的cargo
cargo build
cargo test
注意:由于我们只能初始化一次 PdfApplication
,并且它是 !Send
/!Sync
,所以测试必须合并成一个单一的测试用例。因此,未来的首选将是在各种良好的示例中进行测试。
欢迎以问题报告、功能请求、反馈和/或pull request的形式做出贡献。
依赖关系
~1.1–1.7MB
~53K SLoC