使用Rust生成PDF文件的方法与示例
想用Rust生成PDF文件,请问有哪些好用的库推荐?能否提供一个简单的代码示例,展示如何创建包含文字和图片的PDF文档?最好能说明一下不同库的性能和功能特点,比如是否支持中文、表格等高级功能。
2 回复
使用Rust生成PDF文件,推荐使用 printpdf 库,它简单易用且功能丰富。以下是一个基础示例:
- 在
Cargo.toml中添加依赖:
[dependencies]
printpdf = "0.4"
- 代码示例:
use printpdf::*;
use std::fs::File;
use std::io::BufWriter;
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::TimesRoman)?;
// 添加文本
current_layer.use_text("Hello PDF!", 48.0, Mm(20.0), Mm(270.0), &font);
// 保存文件
doc.save(&mut BufWriter::new(File::create("test.pdf")?))?;
Ok(())
}
这个示例创建了一个A4尺寸的PDF,添加了"Hello PDF!"文本。printpdf 还支持绘制图形、添加图片等功能。其他可选库还有 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(100.0), Mm(100.0)), false),
(Point::new(Mm(100.0), Mm(200.0)), false),
(Point::new(Mm(200.0), Mm(200.0)), false),
];
current_layer.add_shape(Shape::Polyline {
points,
closed: true,
fill: Some(Color::Rgb(Rgb::new(0.8, 0.3, 0.2, None))),
stroke: Some(Line {
color: Color::Rgb(Rgb::new(0.0, 0.0, 0.0, None)),
width: Mm(1.0),
}),
});
// 保存文件
doc.save(&mut BufWriter::new(File::create("test.pdf")?))?;
Ok(())
}
功能说明
- 创建文档:指定名称和页面尺寸(支持毫米、点等单位)
- 文本操作:
- 支持内置字体(Helvetica/Times-Roman等)
- 可设置文字大小和位置
- 图形绘制:
- 支持多边形、圆形等基本形状
- 可设置填充颜色和描边样式
- 图像支持:可添加JPEG/PNG图像(需额外处理)
其他可选库
pdf-writer:底层PDF构造库lopdf:支持读写操作的PDF库
运行后会生成包含文本和彩色三角形的PDF文件。建议通过 cargo add printpdf 直接添加依赖,具体参数可参考库文档调整。

