Generierung von PDF-Berichten in Rust: Überblick über Bibliotheken und praktische Beispiele
Rust ist eine moderne systemnahe Programmiersprache, die in der Webentwicklung immer beliebter wird, auch für die Erstellung von Serveranwendungen und Dokumentengenerierungstools. Wenn Sie PDF-Berichte in Rust erstellen müssen, sind Sie hier genau richtig. In diesem Artikel betrachten wir die wichtigsten Bibliotheken für die Arbeit mit PDF, ihre Funktionen und zeigen funktionierende Codebeispiele.
Warum PDF in Rust generieren?
PDF ist ein universelles Format für den Austausch von Dokumenten, Berichten und Rechnungen. Rust bietet:
- Hohe Leistung und geringen Speicherverbrauch.
- Sichere Speicherverwaltung ohne Garbage Collector.
- Einfache Integration mit Web-Frameworks (Actix, Rocket, Axum).
- Plattformunabhängigkeit (Windows, Linux, macOS).
Wichtige Bibliotheken für PDF in Rust
1. printpdf — Low-Level-Arbeit mit PDF
printpdf ist die beliebteste Bibliothek zum Erstellen von PDF-Dokumenten "von Grund auf". Sie ermöglicht das Zeichnen von Linien, Text, Bildern und Tabellen mit pixelgenauer Kontrolle. Geeignet für komplexe Berichte mit individuellem Layout.
Installation:
[dependencies]printpdf = "0.7"Beispiel: Einfaches PDF mit Text
use printpdf::*;use std::fs::File;
fn main() { let (doc, page1, layer1) = PdfDocument::new( "Mein erster Bericht", 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("Hallo, Welt!", 24.0, Mm(20.0), Mm(280.0), &font);
doc.save(&mut File::create("output.pdf").unwrap()).unwrap();}2. genpdf — High-Level-Berichtsgenerierung
genpdf baut auf printpdf auf und bietet eine benutzerfreundliche API zum Erstellen von Dokumenten mit Tabellen, Überschriften, Absätzen und Stilen. Ideal für Berichte, bei denen die Struktur wichtiger ist als die manuelle Positionierung.
Installation:
[dependencies]genpdf = "0.3"Beispiel: Bericht mit Tabelle
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("Verkaufsbericht");
let mut table = Table::new(TableLayout::new(vec![2, 3, 3])); table.row() .element(Paragraph::new("Produkt")) .element(Paragraph::new("Menge")) .element(Paragraph::new("Preis"));
table.row() .element(Paragraph::new("Laptop")) .element(Paragraph::new("10")) .element(Paragraph::new("1200$"));
doc.push(table); doc.render_to_file("report.pdf").unwrap();}3. wkhtmltopdf — HTML zu PDF über WebKit
Wenn Sie Berichte lieber in HTML/CSS gestalten, verwenden Sie den Wrapper um das Dienstprogramm wkhtmltopdf. Es konvertiert HTML-Vorlagen in PDF und unterstützt Stile, Bilder und JavaScript.
Installation:
[dependencies]wkhtmltopdf = "0.4"Beispiel: HTML-Konvertierung
use wkhtmltopdf::*;
fn main() { let html = r#" <h1>Monatsbericht</h1> <p>Verkäufe: <strong>150 000 ₽</strong></p> <table border="1"> <tr><td>Januar</td><td>50 000</td></tr> <tr><td>Februar</td><td>100 000</td></tr&g Auch in der Bibliothek
Internationalisierung (i18n) in Swift: NSLocalizedString und String Catalog
HTML-Parsing in Swift (iOS/macOS): Bibliotheken SwiftSoup und Fuzi
Caching in Go (Golang): Redis und alternative Tools
Standardbibliothek von C# (.NET): vollständiger Überblick
Contacts Swift: Komplette Anleitung mit Beispielen