PDF-Generierung in Rust: Überblick über Bibliotheken und Werkzeuge zur Erstellung von PDF-Dokumenten

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

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

Empfehlungen