PDF-Berichte in Rust generieren: Die Bibliothek printpdf

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-Berichte in Rust mit der Bibliothek printpdf generieren



In der modernen Webentwicklung bleibt die Erstellung von PDF-Dokumenten eine gefragte Aufgabe – von der Erstellung von Rechnungen und Berichten bis zum Datenexport. Wenn Ihr Projekt in Rust geschrieben ist oder Sie es für das Backend verwenden, ist die Bibliothek printpdf ein zuverlässiges Werkzeug zur PDF-Generierung. In diesem Artikel werden wir die Möglichkeiten von printpdf untersuchen, Codebeispiele zeigen und besprechen, wie man es in ein Bildungsprojekt integriert.



Was ist printpdf?



printpdf ist eine reine Rust-Bibliothek zur Erstellung von PDF-Dokumenten ohne externe Abhängigkeiten. Sie ermöglicht:

  • Erstellung mehrseitiger Dokumente mit beliebigem Inhalt
  • Hinzufügen von Text mit verschiedenen Schriftarten (einschließlich TrueType und OpenType)
  • Zeichnen von Linien, Rechtecken, Ellipsen und komplexen Pfaden
  • Einbetten von Bildern (JPEG, PNG)
  • Arbeiten mit Tabellen und Rastern
  • Verwaltung von Farbräumen (RGB, CMYK, Graustufen)


Der Hauptvorteil ist die vollständige Autonomie: Es ist keine Installation von LaTeX, wkhtmltopdf oder anderen Systemen erforderlich. Dies macht printpdf zur idealen Wahl für die Bildungswebsite pythonlib.ru, bei der einfache Bereitstellung und Reproduzierbarkeit der Beispiele wichtig sind.



Installation und erstes Dokument



Fügen Sie die Abhängigkeit in Cargo.toml hinzu:



[dependencies]printpdf = "0.7"


Erstellen wir ein einfaches PDF mit Text:



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

fn main() { // Dokument im A4-Format erstellen let (doc, page1, layer1) = PdfDocument::new( "Mein erstes PDF", Mm(210.0), Mm(297.0), "Layer 1" );

// Standardschriftart abrufen let font = doc.add_builtin_font(BuiltinFont::Helvetica).unwrap();

// Text hinzufügen let current_layer = doc.get_page(page1).get_layer(layer1); current_layer.use_text( "Hallo, PythonLib!", 24.0, Mm(10.0), Mm(280.0), &font );

// Datei speichern let file = File::create("hello.pdf").unwrap(); let writer = BufWriter::new(file); doc.save(&mut writer).unwrap();

println!("PDF erstellt: hello.pdf");}


Dieser Code erstellt ein einseitiges PDF mit einer Beschriftung. Beachten Sie: use_text akzeptiert Koordinaten in Millimetern und die Schriftgröße in Punkt.



Arbeiten mit Grafiken und Farben



printpdf unterstützt das Zeichnen von Primitiven. Erstellen wir einen Bericht mit einer Linie und einem gefüllten Rechteck:



use printpdf::*;

fn create_report() -> (PdfDocumentReference, PdfPageIndex, PdfLayerIndex) { let (doc, page, layer) = PdfDocument::new( "Bericht", Mm(210.0), Mm(297.0), "Data" );

let layer = doc.get_page(page).get_layer(layer);

// Rote Linie zeichnen let points = vec![ (Point::new(Mm(20.0), Mm(250.0)), false), (Point::new(Mm(190.0), Mm(250.0)), false), ]; let line = Line { points, is_closed: false, }; layer.set_color(Color::Rgb(Rgb::new(1.0, 0.0, 0.0))); layer.add_line(line);

// Gefülltes blaues Rechteck let rect = Polygon { vertices: vec![ (Point::new(Mm(50.0), Mm(200.0)), false), (Point::new(Mm(150.0), Mm(200.0)), false), (Point::new(Mm(150.0), Mm(180.0)), false), (Point::new(Mm(50.0), Mm(180.0)), false), ], is_closed: true, }; layer.set_color(Color::Rgb(Rgb::new(0.0, 0.0, 1.0))); layer.add_polygon(rect);

(doc, page, layer)}


Farben werden im Bereich 0.0–1.0 angegeben. Für CMYK verwenden Sie Color::Cmyk(Cmyk::new(0.0, 1.0, 0.0, 0.0)).



Einbetten von Bildern



Fügen wir ein Logo zum Bericht hinzu:



use printpdf::*;use std::fs::Fi                    

Empfehlungen