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

最近在学习Rust语言,想用它来生成PDF文档,但不知道有哪些可用的库和方法。请问有没有比较成熟的Rust库可以推荐?最好能提供一些简单的代码示例,比如如何创建PDF文件、添加文字和图片等基本操作。另外,在实际项目中生成PDF时需要注意哪些性能或兼容性问题?

2 回复

推荐使用 printpdf 库。示例代码如下:

use printpdf::*;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let (doc, page1, layer1) = PdfDocument::new("PDF_Document_title", Mm(210.0), Mm(297.0), "Layer 1");
    let font = doc.add_builtin_font(BuiltinFont::TimesRoman)?;
    
    let text = "Hello PDF!";
    layer1.use_text(text, 14.0, Mm(20.0), Mm(270.0), &font);
    
    doc.save(&mut std::fs::File::create("test.pdf")?)?;
    Ok(())
}

需要先在 Cargo.toml 中添加依赖:

[dependencies]
printpdf = "0.4.0"

运行后会生成包含“Hello PDF!”文本的PDF文件。


在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_Document_title",
        Mm(210.0),  // A4宽度
        Mm(297.0),  // A4高度
        "Layer1"
    );

    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);

    // 绘制图形
    current_layer.set_outline_color(Color::Rgb(Rgb::new(1.0, 0.0, 0.0, None)));
    current_layer.set_line_width(3.0);
    
    // 画矩形
    let points = vec![
        (Point::new(Mm(50.0), Mm(50.0)), false),
        (Point::new(Mm(50.0), Mm(150.0)), false),
        (Point::new(Mm(150.0), Mm(150.0)), false),
        (Point::new(Mm(150.0), Mm(50.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("test.pdf")?))?;
    Ok(())
}

关键功能说明

  1. 创建文档:使用 PdfDocument::new 指定标题和页面尺寸
  2. 文本操作
    • 通过 add_builtin_font 添加字体
    • 使用 use_text 添加文本(参数:文字、字号、X坐标、Y坐标、字体引用)
  3. 图形绘制
    • 设置颜色和线宽
    • 使用 add_shape 绘制形状
  4. 坐标系统:以毫米(Mm)为单位,原点在页面左下角

运行结果

执行后将生成包含文本和红色矩形框的PDF文件。

其他推荐库

  • lopdf:底层PDF操作库
  • pdf-writer:轻量级PDF生成器
  • wkhtmltopdf:通过WebKit引擎转换HTML为PDF

此方法适合生成简单到中等复杂度的PDF文档,如需高级功能可结合多个库使用。

回到顶部