PDF-Generierung in Rust: Überblick über Bibliotheken und Werkzeuge
Die Sprache Rust, bekannt für ihre Leistung und Sicherheit, bietet mehrere leistungsstarke Bibliotheken zur Erstellung von PDF-Dokumenten. Im Gegensatz zu Python, wo reportlab und fpdf dominieren, bietet das Rust-Ökosystem leichte, aber funktionale Lösungen. In diesem Artikel betrachten wir drei Schlüsselbibliotheken: printpdf, genpdf und pdf-writer, und gehen auch auf Low-Level-Ansätze ein.
1. printpdf — grundlegende, aber flexible Bibliothek
printpdf ist eine der beliebtesten Bibliotheken zur PDF-Generierung in Rust. Sie bietet Low-Level-Zugriff auf die PDF-Struktur und ermöglicht die Erstellung von Dokumenten mit beliebiger Positionierung von Elementen. Die Bibliothek unterstützt die Einbettung von Schriftarten, die Arbeit mit Bildern und grundlegende Grafikprimitive.
Anwendungsbeispiel:
use printpdf::*;use std::fs::File;use std::io::BufWriter;
fn main() { let (doc, page1, layer1) = PdfDocument::new("PDF Dokument", Mm(210.0), Mm(297.0), "Layer 1");
let font = doc.add_builtin_font(BuiltinFont::Helvetica).unwrap();
// Text hinzufügen doc.use_text("Hallo, Welt!", 24.0, Mm(20.0), Mm(280.0), &font);
// Linie zeichnen 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)));
// Speichern let file = File::create("example.pdf").unwrap(); doc.save(&mut BufWriter::new(file)).unwrap();}Vorteile:
- Vollständige Kontrolle über die PDF-Struktur
- Unterstützung für die Einbettung von TrueType-Schriftarten
- Arbeit mit Bildern (PNG, JPEG)
- Unterstützung für SVG-Grafiken (über
printpdf-svg)
Nachteile:
- Kein automatischer Textumbruch
- Manuelle Verwaltung der Positionierung erforderlich
- Keine Unterstützung für Tabellen und mehrseitige Layouts
2. genpdf — für einfache Dokumente mit Layout
genpdf ist eine höherwertige Bibliothek, die den Layoutprozess automatisiert. Sie ist ideal für die Erstellung von Berichten, Briefen und anderen Dokumenten mit einfacher Struktur. Die Bibliothek unterstützt Zeilenumbrüche, Textausrichtung und grundlegende Designelemente.
Beispiel zur Erstellung eines einfachen Dokuments:
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("Beispiel Dokument");
// Elemente hinzufügen doc.push(Paragraph::new("Überschrift").bold()); doc.push(Break::new(5.0)); doc.push(Paragraph::new("Haupttext mit automatischem Zeilenumbruch. " .to_string() + "Die Bibliothek genpdf berechnet die Positionen selbst."));
// Speichern doc.render_to_file("output.pdf")?; Ok(())} Vorteile:
- Automatischer Textumbruch
- Unterstützung für Umbrüche und Ausrichtung
- Einfache API zum Hinzufügen von Elementen
- Möglichkeit zur Erstellung mehrseitiger Dokumente
Nachteile:
- Eingeschränkte Grafikunterstützung
- Keine integrierte Tabellenunterstützung
- Weniger Kontrolle über die Positionierung
3. pdf-writer — Low-Level-Leistung
pdf-writer ist eine minimalistische Bibliothek zum direkten Schreiben von PDF-Objekten. O
Auch in der Bibliothek
Arbeiten mit ZIP-Archiven in TypeScript: Bibliothek JSZip und Hilfsprogramme
Arbeiten mit CSV in Rust: Die csv-Bibliothek und Datenverarbeitung
Java Aufgabenplaner: Quartz Scheduler – vollständige Anleitung
Aufgabenwarteschlangen für Swift: Vollständiger Leitfaden zu GCD und Operation Queues
gRPC für Java: Bibliotheken, Einrichtung und Anwendungsbeispiele