Génération de PDF en Rust : aperçu des bibliothèques et outils pour créer des documents PDF

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

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

Recommendations