Rust中的PDF生成:库概览与代码示例

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

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

开始课程

Rust中的PDF生成:库概览与实践示例



Rust是一种系统编程语言,越来越多地被用于创建高性能的服务器应用程序、Web服务和命令行工具。开发此类项目时,一个常见任务是生成PDF文档:报告、发票、证书或简单的格式化文本文件。在本文中,我们将介绍Rust中用于处理PDF的主要库、它们的功能、代码示例以及选择标准。



Rust中用于PDF生成的流行库



目前,在Rust生态系统中,可以重点介绍三个得到社区积极支持和使用的库:



  • printpdf — 一个底层库,用于创建PDF文档,可完全控制内容。支持文本、图像、矢量图形、表格和字体嵌入。
  • genpdf — 一个基于printpdf构建的更高层库。提供了处理文本、段落、表格和样式的便捷抽象。
  • pdf_writer — 另一个底层库,专注于极简主义和性能。允许直接编写PDF文件,但需要深入理解PDF格式。


printpdf库



printpdf 是Rust中最流行的PDF生成库之一。它提供了用于处理图形基元、文本和字体的API。主要功能:

  • 创建多页文档;
  • 嵌入TrueType/OpenType字体;
  • 绘制线条、矩形、圆形和其他形状;
  • 插入图像(PNG、JPEG);
  • 处理颜色和透明度;
  • 支持Unicode和西里尔字母。


使用printpdf创建包含文本的简单PDF示例:



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

fn main() { // 创建A4格式文档 let (doc, page1, layer1) = PdfDocument::new( "Rust上的PDF示例", Mm(210.0), Mm(297.0), "Layer 1", );

// 获取当前字体(内置Helvetica) let font = doc.add_builtin_font(BuiltinFont::Helvetica).unwrap();

// 使用图层进行绘制 let layer = doc.get_page(page1).get_layer(layer1);

// 添加文本 layer.use_text("你好,世界!来自Rust的PDF", 24.0, Mm(50.0), Mm(250.0), &font);

// 保存文件 let file = File::create("hello.pdf").unwrap(); let writer = BufWriter::new(file); doc.save(&mut std::io::BufWriter::new(writer)).unwrap();}


genpdf库



genpdf 是printpdf的一个封装,提供了更高级的API。它非常适合创建具有简单格式的文档:标题、段落、列表、表格。主要优势:

  • 自动管理分页;
  • 支持样式(粗体、斜体、下划线);
  • 内置支持带单元格和边框的表格;
  • 添加元素的简单接口。


使用genpdf创建包含表格的PDF示例:



use genpdf::*;use genpdf::elements::*;use std::fs::File;

fn main() { // 创建文档 let mut doc = Document::new("Liberation Serif") .expect("加载字体失败");

// 设置默认样式 doc.set_title("销售报告");

// 添加段落 doc.push(Paragraph::new("各月销售额:"));

// 创建表格 let mut table = Table::new(vec![2, 3, 2]); table.set_cell_border_style(BorderStyle::Solid); table.push_row(vec![ "月份".to_string(), "收入,卢布".to_stri

推荐