PDF-Generierung in Rust: Überblick über Bibliotheken und praktische Beispiele
Rust ist eine Systemprogrammiersprache, die zunehmend für die Erstellung leistungsstarker Serveranwendungen, Webdienste und Kommandozeilentools verwendet wird. Eine häufige Aufgabe bei der Entwicklung solcher Projekte ist die Generierung von PDF-Dokumenten: Berichte, Rechnungen, Zertifikate oder einfach formatierte Textdateien. In diesem Artikel betrachten wir die wichtigsten Bibliotheken für die Arbeit mit PDF in Rust, ihre Funktionen, Codebeispiele und Auswahlkriterien.
Beliebte Bibliotheken zur PDF-Generierung auf Rust
Derzeit lassen sich im Rust-Ökosystem drei Hauptbibliotheken identifizieren, die aktiv unterstützt und von der Community genutzt werden:
- printpdf — eine Low-Level-Bibliothek zur Erstellung von PDF-Dokumenten mit vollständiger Kontrolle über den Inhalt. Unterstützt Text, Bilder, Vektorgrafiken, Tabellen und die Einbettung von Schriftarten.
- genpdf — eine höherwertige Bibliothek, die auf printpdf aufbaut. Bietet praktische Abstraktionen für die Arbeit mit Text, Absätzen, Tabellen und Stilen.
- pdf_writer — eine weitere Low-Level-Bibliothek, die sich auf Minimalismus und Leistung konzentriert. Ermöglicht das direkte Schreiben von PDF-Dateien, erfordert jedoch ein tiefes Verständnis des PDF-Formats.
Die Bibliothek printpdf
printpdf ist eine der beliebtesten Bibliotheken zur PDF-Generierung auf Rust. Sie bietet eine API für die Arbeit mit grafischen Primitiven, Text und Schriftarten. Hauptfunktionen:
- Erstellung mehrseitiger Dokumente;
- Einbettung von TrueType/OpenType-Schriftarten;
- Zeichnen von Linien, Rechtecken, Kreisen und anderen Formen;
- Einfügen von Bildern (PNG, JPEG);
- Arbeit mit Farben und Transparenz;
- Unterstützung von Unicode und Kyrillisch.
Beispiel für die Erstellung eines einfachen PDFs mit Text unter Verwendung von printpdf:
use printpdf::*;use std::fs::File;use std::io::BufWriter;
fn main() { // Dokument im A4-Format erstellen let (doc, page1, layer1) = PdfDocument::new( "Beispiel PDF auf Rust", Mm(210.0), Mm(297.0), "Layer 1", );
// Aktuelle Schriftart abrufen (eingebautes Helvetica) let font = doc.add_builtin_font(BuiltinFont::Helvetica).unwrap();
// Ebene zum Zeichnen verwenden let layer = doc.get_page(page1).get_layer(layer1);
// Text hinzufügen layer.use_text("Hallo Welt! PDF aus Rust", 24.0, Mm(50.0), Mm(250.0), &font);
// Datei speichern let file = File::create("hello.pdf").unwrap(); let writer = BufWriter::new(file); doc.save(&mut std::io::BufWriter::new(writer)).unwrap();}Die Bibliothek genpdf
genpdf ist ein Wrapper um printpdf, der eine höherwertige API bereitstellt. Sie ist ideal für die Erstellung von Dokumenten mit einfacher Formatierung: Überschriften, Absätze, Listen, Tabellen. Hauptvorteile:
- Automatische Verwaltung von Seitenumbrüchen;
- Unterstützung von Stilen (fett, kursiv, unterstrichen);
- Integrierte Unterstützung für Tabellen mit Zellen und Rahmen;
- Einfache Schnittstelle zum Hinzufügen von Elementen.
Beispiel für die Erstellung eines PDFs mit einer Tabelle unter Verwendung von genpdf:
use genpdf::*;use genpdf::elements::*;use std::fs::File;
fn main() { // Dokument erstellen let mut doc = Document::new("Liberation Serif") .expect("Fehler beim Laden der Schriftart");
// Standardstil konfigurieren doc.set_title("Verkaufsbericht");
// Absatz hinzufügen doc.push(Paragraph::new("Verkäufe nach Monaten:"));
// Tabelle erstellen let mut table = Table::new(vec![2, 3, 2]); table.set_cell_border_style(BorderStyle::Solid); table.push_row(vec![ "Monat".to_string(), "Umsatz, Rubel".to_stri Auch in der Bibliothek
Async/Await für Swift: Das komplette Leitfaden mit Beispielen
Redis-Client für C++: Verbindung, Installation und Anwendungsbeispiele
ORM für TypeScript: Vergleich von TypeORM, Prisma und MikroORM