使用Rust生成PDF文件的方法与示例

想用Rust生成PDF文件,请问有哪些好用的库推荐?能否提供一个简单的代码示例,展示如何创建包含文字和图片的PDF文档?最好能说明一下不同库的性能和功能特点,比如是否支持中文、表格等高级功能。

2 回复

使用Rust生成PDF文件,推荐使用 printpdf 库,它简单易用且功能丰富。以下是一个基础示例:

  1. Cargo.toml 中添加依赖:
[dependencies]
printpdf = "0.4"
  1. 代码示例:
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 还支持绘制图形、添加图片等功能。其他可选库还有 lopdfpdf-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(())
}

功能说明

  1. 创建文档:指定名称和页面尺寸(支持毫米、点等单位)
  2. 文本操作
    • 支持内置字体(Helvetica/Times-Roman等)
    • 可设置文字大小和位置
  3. 图形绘制
    • 支持多边形、圆形等基本形状
    • 可设置填充颜色和描边样式
  4. 图像支持:可添加JPEG/PNG图像(需额外处理)

其他可选库

  • pdf-writer:底层PDF构造库
  • lopdf:支持读写操作的PDF库

运行后会生成包含文本和彩色三角形的PDF文件。建议通过 cargo add printpdf 直接添加依赖,具体参数可参考库文档调整。

回到顶部