PDF-Generierung in Rust: Überblick über Bibliotheken und Werkzeuge

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



Rust ist eine moderne systemnahe Programmiersprache, die zunehmend für die Entwicklung leistungsstarker Serveranwendungen eingesetzt wird, unter anderem auch für die Dokumentenerstellung. In diesem Artikel betrachten wir die wichtigsten Bibliotheken zur Erstellung von PDF-Dateien in Rust, ihre Funktionen, Anwendungsbeispiele und Empfehlungen zur Auswahl.



Wichtige Bibliotheken für die Arbeit mit PDF in Rust



Das Rust-Ökosystem bietet mehrere ausgereifte Lösungen zur PDF-Generierung. Betrachten wir die gängigsten:



  • printpdf — eine low-level Bibliothek mit Unterstützung für Vektorgrafiken, Bilder und Schriftarten.
  • genpdf — eine high-level Bibliothek zur Dokumenterstellung mit einfacher API.
  • pdf_writer — ein schneller und sicherer PDF-Generator mit minimalen Abhängigkeiten.
  • wkhtmltopdf — ein Wrapper um das Dienstprogramm wkhtmltopdf zur Konvertierung von HTML in PDF.


Die Bibliothek printpdf



printpdf ist eine der beliebtesten Bibliotheken zur PDF-Generierung in Rust. Sie bietet vollständige Kontrolle über den Dokumentinhalt: Text, Linien, Rechtecke, Bilder und eingebettete Schriftarten.



Installation

[dependencies]printpdf = "0.7"


Beispiel: Erstellung eines einfachen PDFs mit Text

use printpdf::*;use std::fs::File;use std::io::BufWriter;

fn main() { // Erstellen eines A4-Dokuments let (doc, page1, layer1) = PdfDocument::new( "Beispieldokument", Mm(210.0), Mm(297.0), "Layer 1" );

// Aktuelle Schriftart abrufen (eingebaut) let font = doc.add_builtin_font(BuiltinFont::Helvetica).unwrap();

// Text zeichnen let current_layer = doc.get_page(page1).get_layer(layer1); current_layer.use_text( "Hallo, PDF-Welt aus Rust!", 24.0, Mm(20.0), Mm(270.0), &font );

// In Datei speichern let file = File::create("example.pdf").unwrap(); let writer = BufWriter::new(file); doc.save(&mut std::io::BufWriter::new(writer)).unwrap();}


Die Bibliothek genpdf



genpdf bietet eine höherwertige API, die an die Arbeit mit Textverarbeitungsprogrammen erinnert. Es unterstützt Absätze, Tabellen, Überschriften und automatischen Zeilenumbruch.



Installation

[dependencies]genpdf = "0.2"


Beispiel: Erstellung eines Dokuments mit Überschrift und Tabelle

use genpdf::{Document, SimplePageSettings};use genpdf::elements::{Paragraph, Table, TableLayout};use genpdf::fonts::FontFamily;

fn main() -> Result<(), Box> { // Schriftart laden (z.B. DejaVu Sans) let font_family = FontFamily::from_files( "/usr/share/fonts/truetype/dejavu/", "DejaVuSans", None )?;

// Dokument erstellen let mut doc = Document::new(font_family, SimplePageSettings::a4());

// Überschrift hinzufügen doc.push(Paragraph::new("Verkaufsbericht").aligned(genpdf::Alignment::Center));

// Tabelle erstellen let mut table = Table::new(TableLayout::new(vec![2, 3, 2])); 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("50.000 Rubel")); table.row() .element(Paragraph::new("Maus")) .element(Paragraph::new("50")) .element(Paragraph::new("1.500 Rubel"));

doc.push(table);

// Speichern doc.render_to_file("report.pdf")?; Ok(())}


Die Bibliothek pdf_writer



pdf_writer ist eine minimalistische und schnelle Bibliothek, die auf die low-level Arbeit mit PDF-Strukturen ausgerichtet ist. I

Empfehlungen