Génération de PDF en Rust : aperçu des bibliothèques et outils
Rust est un langage de programmation système moderne, de plus en plus utilisé pour créer des applications serveur hautes performances, y compris pour la génération de documents. Dans cet article, nous examinerons les principales bibliothèques pour créer des fichiers PDF en Rust, leurs fonctionnalités, des exemples d'utilisation et des recommandations pour faire votre choix.
Principales bibliothèques pour travailler avec les PDF en Rust
L'écosystème Rust propose plusieurs solutions matures pour la génération de PDF. Voici les plus populaires :
- printpdf — une bibliothèque de bas niveau prenant en charge les graphiques vectoriels, les images et les polices.
- genpdf — une bibliothèque de haut niveau pour créer des documents avec une API simple.
- pdf_writer — un générateur PDF rapide et sécurisé avec un minimum de dépendances.
- wkhtmltopdf — une interface pour l'utilitaire wkhtmltopdf permettant de convertir du HTML en PDF.
Bibliothèque printpdf
printpdf est l'une des bibliothèques les plus populaires pour la génération de PDF en Rust. Elle offre un contrôle total sur le contenu du document : texte, lignes, rectangles, images et polices intégrées.
Installation
[dependencies]printpdf = "0.7"Exemple : création d'un PDF simple avec du texte
use printpdf::*;use std::fs::File;use std::io::BufWriter;
fn main() { // Création d'un document au format A4 let (doc, page1, layer1) = PdfDocument::new( "Exemple de document", Mm(210.0), Mm(297.0), "Layer 1" );
// Obtention de la police actuelle (intégrée) let font = doc.add_builtin_font(BuiltinFont::Helvetica).unwrap();
// Dessin du texte let current_layer = doc.get_page(page1).get_layer(layer1); current_layer.use_text( "Bonjour, monde PDF depuis Rust !", 24.0, Mm(20.0), Mm(270.0), &font );
// Sauvegarde dans un fichier let file = File::create("example.pdf").unwrap(); let writer = BufWriter::new(file); doc.save(&mut std::io::BufWriter::new(writer)).unwrap();}Bibliothèque genpdf
genpdf fournit une API de plus haut niveau, rappelant le travail avec des traitements de texte. Elle prend en charge les paragraphes, les tableaux, les titres et le retour à la ligne automatique.
Installation
[dependencies]genpdf = "0.2"Exemple : création d'un document avec un titre et un tableau
use genpdf::{Document, SimplePageSettings};use genpdf::elements::{Paragraph, Table, TableLayout};use genpdf::fonts::FontFamily;
fn main() -> Result<(), Box> { // Chargement de la police (par exemple, DejaVu Sans) let font_family = FontFamily::from_files( "/usr/share/fonts/truetype/dejavu/", "DejaVuSans", None )?;
// Création du document let mut doc = Document::new(font_family, SimplePageSettings::a4());
// Ajout d'un titre doc.push(Paragraph::new("Rapport de ventes").aligned(genpdf::Alignment::Center));
// Création d'un tableau let mut table = Table::new(TableLayout::new(vec![2, 3, 2])); table.row() .element(Paragraph::new("Produit")) .element(Paragraph::new("Quantité")) .element(Paragraph::new("Prix")); table.row() .element(Paragraph::new("Ordinateur portable")) .element(Paragraph::new("10")) .element(Paragraph::new("50 000 RUB")); table.row() .element(Paragraph::new("Souris")) .element(Paragraph::new("50")) .element(Paragraph::new("1 500 RUB"));
doc.push(table);
// Sauvegarde doc.render_to_file("report.pdf")?; Ok(())} Bibliothèque pdf_writer
pdf_writer est une bibliothèque minimaliste et rapide, orientée vers le travail de bas niveau avec les structures PDF. Elle
Aussi dans la bibliothèque
Travailler avec les archives ZIP en C# (.NET) : guide complet
Test en Kotlin : frameworks et outils pour un code de qualité
Internationalisation (i18n) en JavaScript (Node.js) : la bibliothèque i18next
Parsing HTML en Kotlin : jsoup, ktor, khtml et autres outils