Rust中的PDF生成:用于创建PDF文档的库和工具概览

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

Rust中的PDF生成:库和工具概览



以高性能和安全性著称的Rust语言,提供了几个强大的库用于创建PDF文档。与Python中reportlab和fpdf占主导地位不同,Rust生态系统提供了轻量级但功能丰富的解决方案。在本文中,我们将介绍三个关键库:printpdf、genpdf和pdf-writer,并涉及一些底层方法。



1. printpdf — 基础但灵活的库



printpdf是Rust中最流行的PDF生成库之一。它提供对PDF结构的底层访问,允许创建具有任意元素定位的文档。该库支持字体嵌入、图像处理以及基本图形原语。



使用示例:



use printpdf::*;use std::fs::File;use std::io::BufWriter;

fn main() { let (doc, page1, layer1) = PdfDocument::new("PDF文档", Mm(210.0), Mm(297.0), "Layer 1");

let font = doc.add_builtin_font(BuiltinFont::Helvetica).unwrap();

// 添加文本 doc.use_text("你好,世界!", 24.0, Mm(20.0), Mm(280.0), &font);

// 绘制线条 let layer = doc.get_page(page1).get_layer(layer1); layer.set_color(Color::Rgb(Rgb::new(0.0, 0.0, 0.0), None)); layer.add_line(Point::new(Mm(20.0), Mm(270.0)), Point::new(Mm(100.0), Mm(270.0)));

// 保存 let file = File::create("example.pdf").unwrap(); doc.save(&mut BufWriter::new(file)).unwrap();}


优点:

  • 完全控制PDF结构
  • 支持嵌入TrueType字体
  • 支持图像处理(PNG、JPEG)
  • 支持SVG图形(通过printpdf-svg)


缺点:

  • 没有自动文本排版
  • 需要手动管理定位
  • 不支持表格和多页布局


2. genpdf — 用于带排版的简单文档



genpdf是一个更高级的库,可以自动处理排版过程。它非常适合创建报告、信件和其他结构简单的文档。该库支持换行、文本对齐和基本设计元素。



创建简单文档的示例:



use genpdf::{Document, SimplePageSettings};use genpdf::elements::{Paragraph, Break, Image};use genpdf::fonts::FontFamily;

fn main() -> Result<(), Box> { let font_family = FontFamily::from_files( "fonts/", "LiberationSans", None )?;

let mut doc = Document::new(font_family); doc.set_title("文档示例");

// 添加元素 doc.push(Paragraph::new("标题").bold()); doc.push(Break::new(5.0)); doc.push(Paragraph::new("带有自动换行的正文。".to_string() + "genpdf库会自动计算位置。"));

// 保存 doc.render_to_file("output.pdf")?; Ok(())}


优点:

  • 自动文本排版
  • 支持换行和对齐
  • 简单的API用于添加元素
  • 支持创建多页文档


缺点:

  • 图形支持有限
  • 没有内置表格支持
  • 对定位的控制较少


3. pdf-writer — 底层高性能



pdf-writer是一个极简的库,用于直接写入PDF对象。它

推荐