Génération de PDF en Rust : aperçu des bibliothèques et outils
Le langage Rust, connu pour ses performances et sa sécurité, propose plusieurs bibliothèques puissantes pour créer des documents PDF. Contrairement à Python, où dominent reportlab et fpdf, l'écosystème Rust offre des solutions légères mais fonctionnelles. Dans cet article, nous examinerons trois bibliothèques clés : printpdf, genpdf et pdf-writer, et aborderons également les approches de bas niveau.
1. printpdf — une bibliothèque basique mais flexible
printpdf est l'une des bibliothèques les plus populaires pour la génération de PDF en Rust. Elle offre un accès de bas niveau à la structure du PDF, permettant de créer des documents avec un positionnement arbitraire des éléments. La bibliothèque prend en charge l'intégration de polices, le travail avec des images et les primitives graphiques de base.
Exemple d'utilisation :
use printpdf::*;use std::fs::File;use std::io::BufWriter;
fn main() { let (doc, page1, layer1) = PdfDocument::new("PDF Document", Mm(210.0), Mm(297.0), "Layer 1");
let font = doc.add_builtin_font(BuiltinFont::Helvetica).unwrap();
// Ajout de texte doc.use_text("Bonjour, le monde !", 24.0, Mm(20.0), Mm(280.0), &font);
// Dessin d'une ligne 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)));
// Sauvegarde let file = File::create("example.pdf").unwrap(); doc.save(&mut BufWriter::new(file)).unwrap();}Avantages :
- Contrôle total sur la structure du PDF
- Prise en charge de l'intégration des polices TrueType
- Travail avec des images (PNG, JPEG)
- Prise en charge des graphiques SVG (via
printpdf-svg)
Inconvénients :
- Pas de mise en page automatique du texte
- Nécessité de gérer manuellement le positionnement
- Absence de prise en charge des tableaux et des mises en page multipages
2. genpdf — pour les documents simples avec mise en page
genpdf est une bibliothèque de plus haut niveau qui automatise le processus de mise en page. Elle est idéale pour créer des rapports, des lettres et d'autres documents à structure simple. La bibliothèque prend en charge le retour à la ligne, l'alignement du texte et les éléments de conception de base.
Exemple de création d'un document simple :
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("Exemple de document");
// Ajout d'éléments doc.push(Paragraph::new("Titre").bold()); doc.push(Break::new(5.0)); doc.push(Paragraph::new("Texte principal avec retour à la ligne automatique. " .to_string() + "La bibliothèque genpdf calcule elle-même les positions."));
// Sauvegarde doc.render_to_file("output.pdf")?; Ok(())} Avantages :
- Mise en page automatique du texte
- Prise en charge des retours à la ligne et de l'alignement
- API simple pour ajouter des éléments
- Possibilité de créer des documents multipages
Inconvénients :
- Prise en charge limitée des graphiques
- Pas de prise en charge intégrée des tableaux
- Moins de contrôle sur le positionnement
3. pdf-writer — performances de bas niveau
pdf-writer est une bibliothèque minimaliste pour l'écriture directe d'objets PDF. O
Aussi dans la bibliothèque
Configuration des applications PHP : bibliothèques et outils pour un paramétrage flexible
Métriques Prometheus en Kotlin : intégration avec Micrometer et Ktor
Sérialisation d'objets dans Node.js : JSON, Buffer et Protobuf
SQLite pour C++ : guide complet avec exemples