使用 Rust 生成 PDF 报告:库与实战示例

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

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

开始课程

使用 Rust 生成 PDF 报告:库概览与实战示例



Rust 是一种现代系统编程语言,在 Web 开发中越来越受欢迎,包括用于构建服务器端应用程序和文档生成工具。如果您需要使用 Rust 生成 PDF 报告,那么您来对地方了。在本文中,我们将介绍用于处理 PDF 的主要库、它们的功能,并提供可运行的代码示例。



为什么用 Rust 生成 PDF?

PDF 是用于交换文档、报告和发票的通用格式。Rust 提供:

  • 高性能和低内存消耗。
  • 无垃圾回收器的内存安全。
  • 易于与 Web 框架(Actix、Rocket、Axum)集成。
  • 跨平台支持(Windows、Linux、macOS)。


Rust 中用于 PDF 的主要库



1. printpdf — 底层 PDF 操作

printpdf 是最流行的从零开始创建 PDF 文档的库。它允许您绘制线条、文本、图像和表格,控制每一个像素。适用于具有自定义布局的复杂报告。



安装:

[dependencies]printpdf = "0.7"


示例:包含文本的简单 PDF

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

fn main() { let (doc, page1, layer1) = PdfDocument::new( "我的第一份报告", Mm(210.0), Mm(297.0), "Layer 1", );

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

let current_layer = doc.get_page(page1).get_layer(layer1); current_layer.use_text("你好,世界!", 24.0, Mm(20.0), Mm(280.0), &font);

doc.save(&mut File::create("output.pdf").unwrap()).unwrap();}


2. genpdf — 高级报告生成

genpdf 构建在 printpdf 之上,提供了一个便捷的 API 来创建包含表格、标题、段落和样式的文档。非常适合注重结构而非手动定位的报告。



安装:

[dependencies]genpdf = "0.3"


示例:包含表格的报告

use genpdf::{Document, SimplePageSettings};use genpdf::elements::{Paragraph, Table, TableLayout};use genpdf::fonts::FontFamily;

fn main() { let font_family = FontFamily::from_files( "/usr/share/fonts/truetype/dejavu/", "DejaVuSans", None, ).unwrap();

let mut doc = Document::new(font_family); doc.set_title("销售报告");

let mut table = Table::new(TableLayout::new(vec![2, 3, 3])); table.row() .element(Paragraph::new("商品")) .element(Paragraph::new("数量")) .element(Paragraph::new("价格"));

table.row() .element(Paragraph::new("笔记本电脑")) .element(Paragraph::new("10")) .element(Paragraph::new("1200$"));

doc.push(table); doc.render_to_file("report.pdf").unwrap();}


3. wkhtmltopdf — 通过 WebKit 将 HTML 转为 PDF

如果您更喜欢使用 HTML/CSS 来设计报告,可以使用 wkhtmltopdf 工具的封装。它支持样式、图像和 JavaScript,将 HTML 模板转换为 PDF。



安装:

[dependencies]wkhtmltopdf = "0.4"


示例:转换 HTML

use wkhtmltopdf::*;

fn main() { let html = r#" <h1>月度报告</h1> <p>销售额:<strong>150 000 ₽</strong></p> <table border="1"> <tr><td>一月</td><td>50 000</td></tr> <tr><td>二月</td><td>100 000</td></tr&g

推荐