Generierung von PDF-Berichten in Rust: Bibliotheken und praktische Beispiele

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

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

Empfehlungen