使用Rust生成PDF文件的方法与示例
最近在学习Rust,想用它来生成PDF文件,但不知道有哪些可靠的库可以用。大家能推荐几个好用的Rust PDF生成库吗?最好能附带一些简单的代码示例,比如如何创建一个包含文字和图片的基本PDF文档。另外在性能和使用体验上,这些库各有什么优缺点?
2 回复
使用Rust生成PDF文件,推荐使用printpdf库,它简单易用且功能完善。
步骤:
- 在
Cargo.toml中添加依赖:
[dependencies]
printpdf = "0.4"
- 基础示例代码:
use printpdf::*;
fn main() -> Result<(), Box<dyn std::error::Error>> {
// 创建文档
let (doc, page1, layer1) = PdfDocument::new("PDF_Demo", Mm(210.0), Mm(297.0), "Layer 1");
let current_layer = doc.get_page(page1).get_layer(layer1);
// 设置字体
let font = doc.add_builtin_font(BuiltinFont::Helvetica)?;
// 添加文本
current_layer.use_text("Hello PDF!", 48.0, Mm(20.0), Mm(270.0), &font);
// 保存文件
doc.save(&mut std::fs::File::create("test.pdf")?)?;
Ok(())
}
说明:
- 创建A4尺寸文档(210x297mm)
- 使用Helvetica字体
- 在指定位置添加48pt大小的文本
- 支持添加图形、图片等更多功能
其他可选库还有lopdf、pdf-writer等,可根据具体需求选择。
在Rust中生成PDF文件,推荐使用 printpdf 库,它功能全面且易于使用。以下是详细方法和完整示例:
安装依赖
在 Cargo.toml 中添加:
[dependencies]
printpdf = "0.4.0"
完整示例代码
use printpdf::*;
use std::fs::File;
use std::io::BufWriter;
fn main() -> Result<(), Box<dyn std::error::Error>> {
// 创建PDF文档
let (doc, page1, layer1) = PdfDocument::new(
"PDF_Demo",
Mm(210.0), // A4宽度
Mm(297.0), // A4高度
"Layer 1",
);
let current_layer = doc.get_page(page1).get_layer(layer1);
// 设置字体
let font = doc.add_builtin_font(BuiltinFont::Helvetica)?;
// 添加文本
current_layer.use_text("Hello PDF!", 48.0, Mm(20.0), Mm(270.0), &font);
// 绘制图形
let points = vec![
(Point::new(Mm(50.0), Mm(150.0)), false),
(Point::new(Mm(150.0), Mm(150.0)), false),
(Point::new(Mm(150.0), Mm(250.0)), false),
(Point::new(Mm(50.0), Mm(250.0)), false),
];
current_layer.add_shape(Line {
points,
is_closed: true,
has_fill: true,
has_stroke: true,
is_clipping_path: false,
});
// 保存文件
doc.save(&mut BufWriter::new(File::create("demo.pdf")?))?;
println!("PDF生成成功: demo.pdf");
Ok(())
}
其他可选库
lopdf- 底层PDF操作库pdf-writer- 专注于PDF生成的轻量级库
功能说明
- 支持文本、图形、图像插入
- 可设置页面尺寸、字体、颜色
- 支持图层管理
- 生成的PDF兼容标准阅读器
运行后将在项目根目录生成 demo.pdf,包含文本和一个矩形图形。建议查看 printpdf 文档获取更多高级功能使用方法。

