Skip to content

Bestes Rust-PDF-Crate 2026

PDF Oxide direkt gegen die bekanntesten Rust-PDF-Crates: lopdf, printpdf, pdf-rs und pdf_extract. Jedes Crate bedient eine andere Abstraktionsebene und andere Anwendungsfälle — diese Seite hilft Ihnen, das richtige für Ihr Projekt zu finden.

Zusammenfassung

PDF Oxide lopdf printpdf pdf-rs pdf_extract
API-Ebene High-Level Low-Level Mid-Level (Erstellung) Low-Level (Lesen) Mid-Level (Lesen)
PDFs lesen Ja Ja Nein Ja Ja
PDFs schreiben Ja Ja Ja Nein Nein
Textextraktion Ja (High-Level) Manuell Nein Manuell Ja (grundlegend)
Bildextraktion Ja (High-Level) Manuell Nein Manuell Nein
Formularfelder Lesen + Schreiben Manuell Nein Nur Lesen Nein
PDF-Erstellung Ja Ja Ja Nein Nein
Markdown-/HTML-Eingabe Ja Nein Nein Nein Nein
Bestehende PDFs bearbeiten Ja Ja (Low-Level) Nein Nein Nein
Annotationen Lesen + Schreiben Manuell Nein Nur Lesen Nein
Verschlüsselung Lesen + Schreiben Nein Nein Nein Nein
PDF/A-Validierung Ja Nein Nein Nein Nein
Rendering Ja (tiny-skia) Nein Nein Teilweise Nein
Python-Bindings Ja Nein Nein Nein Nein
Lizenz MIT MIT MIT MIT Apache-2.0

Alle Bibliotheken sind permissiv lizenziert. Die Unterschiede liegen im Umfang und der Abstraktionsebene.

Leistungsvergleich

Vollständiger Korpus-Benchmark (3.830 PDFs)

Getestet auf dem vollständigen Korpus von 3.830 PDFs — drei unabhängige, öffentlich verfügbare Testsuiten, die PDF-Spezifikationskonformität (veraPDF, 2.907 Dateien), reale Browser-Rendering-Grenzfälle (Mozilla pdf.js, 897 Dateien) und Sicherheits-/Robustheitsstress-Tests einschließlich fehlerhafter Strukturen und durch Fuzzing generierter Korruption (DARPA SafeDocs, 26 Dateien) abdecken. Siehe vollständige Korpusdetails.

Bibliothek Durchschnitt p99 Erfolgsrate Textextraktion Anmerkungen
PDF Oxide 0,8ms 9ms 100% Integriert, produktionsreif Unicode, CJK, Lesereihenfolge
oxidize_pdf 13,5ms 11ms 99,1% Grundlegend 48s maximaler Ausreißer
unpdf 2,8ms 10ms 95,1% Grundlegend 185 Fehler im gesamten Korpus
pdf_extract 4,08ms 37ms 91,5% Grundlegend Fehlt bei komplexen Layouts
lopdf 0,3ms 2ms 80,2% Keine integrierte Extraktion Scheitert bei 20% der PDFs

lopdf ist schneller bei den PDFs, die es parsen kann — aber es scheitert bei 20% des Korpus und bietet keine Textextraktion. Sie müssten Schriftdekodierung, CMap-Auflösung und Abstandsanalyse selbst implementieren.

pdf_extract bietet grundlegende Textextraktion, hat aber eine Erfolgsrate von 91,5% und hat Schwierigkeiten mit komplexen Layouts, CJK-Text und getaggten PDFs. oxidize_pdf hat eine anständige Zuverlässigkeit (99,1%), ist aber 17× langsamer als pdf_oxide bei der durchschnittlichen Extraktionszeit, mit einem 48-Sekunden-Worst-Case-Ausreißer. unpdf verarbeitet den gesamten Korpus, scheitert aber bei 185 PDFs.

PDF Oxide ist das einzige Rust-Crate, das 100% Zuverlässigkeit mit produktionsreifer Textextraktion kombiniert.

API-Design-Vergleich

PDF Oxide: High-Level, aufgabenorientiert

PDF Oxide bietet speziell entwickelte Methoden für häufige Aufgaben. Sie arbeiten mit Text, Bildern und Formularfeldern — nicht mit PDF-Objekten und Wörterbüchern.

use pdf_oxide::PdfDocument;

let mut doc = PdfDocument::open("report.pdf")?;

// Textextraktion -- ein Aufruf
let text = doc.extract_text(0)?;
println!("{}", text);

// Formatierte Spans mit Schrift-Metadaten
let spans = doc.extract_spans(0)?;
for span in &spans {
    println!("'{}' font={} size={:.1}pt", span.text, span.font_name, span.font_size);
}

// Bildextraktion
let images = doc.extract_images(0)?;
for img in &images {
    println!("{}x{} {:?}", img.width, img.height, img.format);
}

// Formularfelder
let fields = doc.extract_form_fields()?;
for field in &fields {
    println!("{}: {:?}", field.name, field.value);
}

Die PDF-Erstellung ist ebenso unkompliziert:

use pdf_oxide::api::Pdf;

// Aus Markdown
let pdf = Pdf::from_markdown("# Report\n\n| A | B |\n|---|---|\n| 1 | 2 |")?;
pdf.save("report.pdf")?;

// Aus HTML
let pdf = Pdf::from_html("<h1>Report</h1><p>Content here.</p>")?;
pdf.save("report.pdf")?;

lopdf: Low-Level-Objektmanipulation

lopdf gibt Ihnen direkten Zugriff auf PDF-Objekte, Streams und die Querverweistabelle. Sie müssen die PDF-Spezifikation verstehen, um es effektiv zu nutzen. Es gibt keine integrierte Textextraktion — Sie navigieren durch Wörterbücher und dekodieren Streams selbst.

use lopdf::Document;

let doc = Document::load("report.pdf")?;

// Seitenwörterbuch abrufen
let page_id = doc.page_iter().next().unwrap();
let page = doc.get_dictionary(page_id)?;

// Content-Stream abrufen -- manuelle Arbeit
let contents = page.get("Contents")?;
let stream = doc.get_object(contents.as_reference()?)?;

// Um Text zu extrahieren, müssen Sie:
// 1. Die Content-Stream-Operatoren parsen
// 2. Schriftreferenzen aus /Resources auflösen
// 3. CMap/ToUnicode-Zuordnungen dekodieren
// 4. Textmatrix-Transformationen anwenden
// 5. Kodierungsunterschiede behandeln
//
// lopdf bietet nichts davon -- es ist reiner Objektzugriff
println!("Page has {} objects", doc.objects.len());

lopdf ist das richtige Werkzeug, wenn Sie PDF-Strukturen direkt manipulieren müssen: Dokumente zusammenführen, Objekt-Streams neu schreiben oder spezialisierte PDF-Prozessoren bauen.

printpdf: Nur PDF-Erstellung

printpdf ist eine Bibliothek ausschließlich für die Erstellung. Sie kann keine bestehenden PDFs lesen oder parsen. Sie bietet eine typisierte API zum Erstellen von PDF-Dokumenten von Grund auf mit Text, Bildern und Vektorgrafiken.

use printpdf::*;

let (doc, page1, layer1) = PdfDocument::new(
    "Report", Mm(210.0), Mm(297.0), "Layer 1"
);

let current_layer = doc.get_page(page1).get_layer(layer1);

// Text hinzufügen -- erfordert manuelles Laden der Schrift
let font = doc.add_builtin_font(BuiltinFont::Helvetica)?;
current_layer.use_text("Hello World", 24.0, Mm(10.0), Mm(280.0), &font);

// Speichern
doc.save(&mut std::io::BufWriter::new(
    std::fs::File::create("output.pdf")?,
))?;

// Kann keine bestehenden PDFs lesen
// Kann keinen Text, keine Bilder oder Formularfelder extrahieren

printpdf ist das richtige Werkzeug, wenn Sie nur neue PDFs generieren möchten und eine saubere, fokussierte Erstellungs-API wünschen.

pdf-rs: Low-Level-PDF-Lesen

pdf-rs parst die PDF-Struktur in Rust-Typen, bietet aber nur minimale High-Level-Funktionalität. Sie erhalten typisierten Zugriff auf PDF-Objekte, müssen aber Textdekodierung, Schriftauflösung und Content-Stream-Parsing selbst handhaben.

use pdf::file::FileOptions;

let file = FileOptions::cached().open("report.pdf")?;

// Auf Seitenobjekte zugreifen
let page = file.get_page(0)?;
let media_box = page.media_box()?;
println!("Page size: {:?}", media_box);

// Content-Stream-Zugriff -- Low-Level
if let Some(ref contents) = page.contents {
    // Gibt rohe Operationen zurück -- Sie müssen sie interpretieren
    // Keine integrierte Textassemblierung, Schriftdekodierung oder Layoutanalyse
}

// Kann PDFs nicht schreiben oder modifizieren

pdf-rs ist das richtige Werkzeug, wenn Sie einen typsicheren PDF-Parser für Analyse, Validierung oder den Aufbau einer eigenen Rendering-Pipeline benötigen.

Funktionsvergleich nach Aufgabe

Textextraktion

Bibliothek Integriert Qualität Erforderlicher Aufwand
PDF Oxide Ja Produktionsreif (Unicode, CJK, Lesereihenfolge) Ein Methodenaufruf
pdf_extract Ja Grundlegend (fehlt bei komplexen Layouts) Ein Methodenaufruf
lopdf Nein N/A Hunderte Zeilen eigener Code
printpdf Nein N/A Nicht möglich (nur Schreiben)
pdf-rs Nein N/A Erheblicher eigener Code erforderlich

PDF Oxide übernimmt CMap/ToUnicode-Dekodierung, schriftmetrikbasierte Abstände, Strukturbaum-Lesereihenfolge und Ligaturrekonstruktion. Die Implementierung gleichwertiger Funktionalität auf Basis von lopdf oder pdf-rs erfordert Tausende Zeilen Code und tiefgreifendes Wissen über die PDF-Spezifikation.

PDF-Erstellung

Bibliothek Ansatz Markdown-/HTML-Eingabe Tabellen Barcodes
PDF Oxide High-Level + Low-Level Ja Ja Ja
lopdf Rohe Objektkonstruktion Nein Nein Nein
printpdf Typisierte Layer-API Nein Nein Nein
pdf-rs N/A (nur Lesen) N/A N/A N/A

Verschlüsselung

Bibliothek Verschlüsselte lesen Verschlüsselte schreiben Algorithmen
PDF Oxide Ja Ja RC4-40, RC4-128, AES-128, AES-256
lopdf Nein Nein
printpdf Nein Nein
pdf-rs Teilweise Nein Nur RC4

Konformität

Bibliothek PDF/A PDF/X PDF/UA
PDF Oxide Validieren + Konvertieren Validieren Validieren
lopdf Nein Nein Nein
printpdf Teilweise (PDF/A-1b-Ausgabe) Nein Nein
pdf-rs Nein Nein Nein

Abhängigkeiten

Bibliothek Abhängigkeiten Kompilierzeit Binärgröße
PDF Oxide ~40 (Kern) ~30s ~4 MB
lopdf ~15 ~10s ~1 MB
printpdf ~20 ~15s ~2 MB
pdf-rs ~25 ~20s ~2 MB

PDF Oxide hat mehr Abhängigkeiten, da es Schrift-Parsing, Bilddekodierung, Content-Stream-Interpretation und Verschlüsselung enthält — Funktionen, die die anderen Bibliotheken dem Benutzer überlassen oder ganz weglassen. Mit allen optionalen Features (rendering, barcodes, office) steigt die Anzahl auf ~100.

Bibliotheken kombinieren

Da alle permissiv lizenziert sind, können Sie sie in einem einzigen Projekt kombinieren:

[dependencies]
pdf_oxide = "0.3"
lopdf = "0.32"        # Optional: Roher Objektzugriff für Sonderfälle

Gängige Muster:

  • PDF Oxide + lopdf: Verwenden Sie PDF Oxide für Extraktion und Erstellung, greifen Sie auf lopdf zurück für Sonderfälle, die rohe Objektmanipulation erfordern.
  • PDF Oxide + printpdf: Verwenden Sie PDF Oxide zum Lesen und printpdf für spezialisierte Erstellungs-Workflows.

Anwendungsfall-Matrix

„Ich muss Text aus PDFs extrahieren"

Crate Geeignet? Anmerkungen
PDF Oxide Ja Beste Extraktionsqualität, 100% Erfolgsrate, Lesereihenfolge, Schrift-Metadaten
pdf_extract Teilweise Grundlegende Extraktion, 91,5% Erfolgsrate
lopdf Nein Keine Textextraktion
printpdf Nein Kann keine PDFs lesen
pdf-rs Teilweise Grundlegendes Parsing, keine High-Level-Textextraktion

„Ich muss PDFs erstellen"

Crate Geeignet? Anmerkungen
PDF Oxide Ja High-Level (Markdown/HTML) und Low-Level-APIs
lopdf Teilweise Low-Level-Objektkonstruktion
printpdf Ja Saubere Erstellungs-API, kein Lesen
pdf-rs Nein Nur Lesen

„Ich muss bestehende PDFs bearbeiten"

Crate Geeignet? Anmerkungen
PDF Oxide Ja DOM-artige Bearbeitung, Annotationen, Formulare
lopdf Teilweise Low-Level-Objektmanipulation
printpdf Nein Kann keine PDFs lesen
pdf-rs Nein Nur Lesen

„Ich brauche den vollständigen Lebenszyklus (Extrahieren + Erstellen + Bearbeiten)"

Crate Geeignet? Anmerkungen
PDF Oxide Ja Einziges Crate, das alle drei abdeckt
lopdf + printpdf Teilweise Zwei Crates, keine Textextraktion
pdf-rs + printpdf Teilweise Zwei Crates, keine Bearbeitung

Wann welches verwenden

Wählen Sie PDF Oxide, wenn Sie mehr als eine PDF-Fähigkeit benötigen (Extraktion + Erstellung oder Extraktion + Bearbeitung) und eine einzige, gut getestete Abhängigkeit mit 100% Zuverlässigkeit wünschen.

Wählen Sie lopdf, wenn Sie Low-Level-PDF-Strukturmanipulation benötigen und sich mit der PDF-Spezifikation direkt wohlfühlen. Gut für Zusammenführen, Aufteilen und Batch-PDF-Verarbeitung.

Wählen Sie printpdf, wenn Sie nur PDFs erstellen und nie lesen müssen. Die sauberste API für Bericht- und Dokumentengenerierung.

Wählen Sie pdf-rs, wenn Sie einen spezifikationskonformen Parser für PDF-Analyse benötigen oder Ihre eigene Rendering-Pipeline aufbauen.

Wählen Sie pdf_extract, wenn Sie grundlegende Textextraktion benötigen und keine hohe Zuverlässigkeit oder Unterstützung komplexer Layouts erfordern.

Verwandte Seiten