anydoc im深度评测: Die universelle Dokument-zu-Markdown-Lösung von Firecrawl in Rust

TL;DR: Beim Füttern von Dokumenten in LLMs bestimmt die Qualität der Formatkonvertierung direkt die RAG-Ergebnisse — gehen Tabellen verloren, werden Überschriften durcheinandergebracht oder Formeln nicht übernommen, geht Information verloren. Das Firecrawl-Team hat anydoc in Rust von Grund auf entwickelt: Eine Bibliothek für 14 Office-Formate (Word/PPT/Excel/PDF/EPUB/RTF/CSV/OpenDocument), mit einer medianen Konvertierungsgeschwindigkeit von nur 4,4 Millisekunden. Die Qualitätsbewertungen übertreffen Pandoc, Markitdown, Docling und andere Wettbewerber durchgängig. Weniger als drei Wochen nach dem Start auf GitHub bereits über 17.000 Stars. Dieser Artikel führt Sie von der Architektur bis zum praktischen Einsatz durch dieses 2026 beliebteste Dokumentvorverarbeitungs-Tool.

1. Was ist anydoc? Die „Dokumentvorverarbeitungs-Engine" des Firecrawl-Teams

anydoc ist eine im August 2026 vom Firecrawl-Team als Open Source veröffentlichte Rust-Bibliothek, die ein einziges Problem löst: Verschiedenste Office-Dokumente in sauberes GitHub-Flavored Markdown umzuwandeln.

Firecrawl selbst ist ein bekannter Web-Scraping- und Parsing-API-Dienst (von Y Combinator gefördert). Bei der Dokumentenverarbeitung stießen sie auf ein weit verbreitetes Problem: Es gab keine Bibliothek, die alle gängigen Dokumentformate zuverlässig verarbeiten konnte. Entwickler mussten vier oder fünf Tools zusammenstückeln — jedes mit eigenen Abhängigkeiten, Ausgabeformaten und Fehlermodi. Also beschlossen sie, ihre eigenen Lösungen zu entwickeln, und zwar gleich zwei:

  • pdf-inspector: Spezialisiert auf PDF, 13k Stars, erkennt ob jede Seite Text oder Scan ist und bestimmt, ob OCR erforderlich ist
  • anydoc: Verarbeitet alle anderen Formate (Word/PPT/Excel/EPUB/RTF/CSV/OpenDocument) und integriert pdf-inspector für textbasierte PDFs

Beide Bibliotheken folgen demselben Designprinzip: Reines Rust, lokale Ausführung, kein API-Key, keine Systemabhängigkeiten, Markdown-Ausgabe.

Dokument-Bytes
  │
  ├─► Formaterkennung       → Basierend auf Content-Markern, nicht auf Erweiterungen
  │
  ├─► Format-Parser         → Ein Parser pro Format (doc/docx/ppt/pptx/xls/
  │                           xlsx/odt/ods/odp/rtf/epub/csv)
  │         │
  │         └─► Document → Gemeinsames Dokumentmodell: Blöcke, Inline, Tabellen,
  │                        Fußnoten, Ressourcen
  │               │
  │               └─► GFM-Serializer → Markdown
  │
  └─► PDF → pdf-inspector → Direkte Markdown-Ausgabe

Das entscheidende Design: Alle Formate münden in dasselbe Dokumentmodell und denselben Serializer. Das bedeutet: Wird ein Bug in einem Format behoben (z.B. Tabellenumbruch), profitieren automatisch alle anderen Formate.

Stand 21. August 2026, die GitHub-Daten von anydoc:

Metrik Wert
Stars 17.709
Forks 1.019
Sprache Rust
Lizenz MIT
Erstellt 2026-08-03
Bindings Rust / Node.js / Python / WebAssembly

2. Warum ist Dokumentkonvertierung für RAG so wichtig?

In einer RAG-Architektur (Retrieval-Augmented Generation) stammen die Wissensquellen des LLM nicht nur aus Trainingsdaten, sondern auch aus privaten Dokumenten, die Sie ihm zuführen. Diese Dokumente können sein:

  • Word-Verträge, die Kunden hochladen
  • Excel-Berichte aus der Finanzabteilung
  • PowerPoint-Präsentationen der Produktmanager
  • PDF-Whitepaper des Technikteams
  • Legacy-.doc-Dateien (Format vor 2003)

Verlorene Formatierung = verlorene Information. Wenn Ihr Konvertierungstool Tabellen in reinen Text umwandelt, Überschriftenebenen durcheinanderbringt oder Formeln in unlesbaren Code verwandelt, erhält das LLM unvollständige Informationen. Die RAG-Qualität leidet direkt.

Ein konkretes Beispiel: Ein Word-Dokument enthält eine Verkaufstabelle mit den Spalten Region, Quartal und Umsatz. Ein minderwertiges Konvertierungstool könnte folgendes ausgeben:

Region Quartal Umsatz
Ost Q1 1 Mio.
Ost Q2 1,5 Mio.

Die Tabellenstruktur ist verloren. Das LLM kann nicht verstehen, dass „Region" und „Quartal" Spaltennamen sind und „1 Mio." der Umsatz für „Ost Q1" ist. anydoc hingegen gibt eine standardkonforme Markdown-Tabelle aus:

MARKDOWN
| Region | Quartal | Umsatz |
|--------|---------|--------|
| Ost    | Q1      | 1 Mio. |
| Ost    | Q2      | 1,5 Mio. |

Die Struktur bleibt erhalten, das LLM kann die Semantik jedes Feldes korrekt verstehen.

Genau deshalb beeinflusst die Dokumentkonvertierungsqualität direkt die RAG-Ergebnisse. Das Designziel von anydoc lautet: Unabhängig vom Eingabeformat ist die Ausgabe immer strukturell vollständiges, semantisch klares Markdown.

3. Die 14 unterstützten Formate im Detail

anydoc deckt 14 gängige Office-Formate ab und ist derzeit die einzige Open-Source-Bibliothek mit „Full-Format-Abdeckung":

Formatkategorie Unterstützte Erweiterungen Typische Anwendung
Word .doc, .docx, .docm Verträge, Berichte, Abschlussarbeiten
PowerPoint .ppt, .pps, .pot, .pptx, .pptm, .ppsx, .ppsm Präsentationen, Schulungsmaterial
Excel .xls, .xlsx, .xlsm, .xlsb Datenberichte, Finanztabellen
OpenDocument .odt, .ods, .odp LibreOffice/OpenOffice-Dokumente
Rich Text .rtf Plattformübergreifender Rich Text
EPUB .epub E-Books
CSV .csv Rein Textbasierte Tabellen
PDF .pdf Textbasierte PDFs (Scans benötigen OCR)

3.1 Formaterkennung: Unabhängig von der Dateierweiterung

Die Formaterkennung von anydoc basiert auf Dateiinhalt-Markern, nicht auf Erweiterungen. Das bedeutet: Selbst wenn eine Datei falsch benannt ist (z.B. report.pdf, die eigentlich ein Word-Dokument ist), erkennt und konvertiert anydoc sie korrekt.

RUST
// Rust
Format::from_bytes(&bytes); // Some(Format::Docx), oder None wenn nichts übereinstimmt
Format::from_extension("pptm"); // Some(Format::Pptx)
Format::from_path(Path::new("report.odt")); // Some(Format::Odt)
PYTHON
# Python
import anydoc
anydoc.format_from_bytes(data)  # <Format.DOCX: ...>
anydoc.format_from_extension("pptm")  # <Format.PPTX: ...>

Erkennungsprinzip: - PDF: Liest den PDF-Header-Marker %PDF- - RTF: Liest den RTF-Öffnungsmarker {\rtf - OLE-Formate (.doc/.ppt/.xls): Liest OLE-Stream-Namen - ZIP-basierte Formate (.docx/.pptx/.xlsx/.odt usw.): Liest den Mimetype und Content-Type des ZIP-Archivs - CSV: Kein Content-Marker, basiert auf Erweiterung oder expliziter Angabe

3.2 Konvertierungsqualität: Vollständige Dokumentstruktur bleibt erhalten

anydoc extrahiert nicht nur Text, sondern bewahrt die vollständige Dokumentstruktur:

  • Überschriftenebenen: H1-H6 mit Ankerpunkten
  • Textformatierung: Fett, Kursiv, Durchgestrichen, Inline-Code
  • Codeblöcke: Mit Syntax-Highlighting-Markern
  • Listen: Geordnet, ungeordnet, verschachtelt, Aufgabenlisten (Originalnummerierung bleibt erhalten)
  • Tabellen: Zusammengeführte Zellen, Kopfzeilen
  • Zitatblöcke: Blockquotes
  • Fußnoten und Endnoten
  • Formeln: OMML aus Word/PowerPoint, MathML aus OpenDocument/EPUB, RTF-Formeln werden alle in GitHub-kompatibles LaTeX-Mathematik-Markup umgewandelt ($...$ inline, $$...$$ blockweise)
  • Eingebettete Ressourcen: Bilder und eingebettete Objekte werden im Markdown als Alt-Text dargestellt, die Original-Bytes bleiben im Dokumentmodell erhalten (mit Media-Type-Kennzeichnung)

4. Technische Architektur: Rust-Implementierung, das Geheimnis der 4,4-ms-medianen Geschwindigkeit

Die Leistung von anydoc basiert auf drei zentralen Designentscheidungen:

4.1 Reine Rust-Implementierung, keine externen Abhängigkeiten

anydoc wurde von Grund auf in Rust geschrieben, ohne Abhängigkeiten von LibreOffice, Python-Bibliotheken oder anderen externen Diensten. Rusts Zero-Cost-Abstraktionen und Speichersicherheit ermöglichen Konvertierungen im Millisekundenbereich bei gleichzeitiger Vermeidung von Speicherlecks und Segmentierungsfehlern.

4.2 Gemeinsames Dokumentmodell + einzelner Serializer

Alle Format-Parser geben dieselbe Document-Struktur aus:

RUST
pub struct Document {
    pub blocks: Vec<Block>,      // Absätze, Überschriften, Listen, Tabellen usw.
    pub inlines: Vec<Inline>,    // Fett, Kursiv, Links usw.
    pub tables: Vec<Table>,      // Tabellen
    pub footnotes: Vec<Footnote>, // Fußnoten
    pub assets: Vec<Asset>,      // Bilder, eingebettete Objekte
}

Anschließend wird alles durch einen einzigen GFM-Serializer (GitHub-Flavored Markdown) gerendert. Das bedeutet: - Konsistenz: Egal ob Eingabe .docx oder .rtf, das ausgegebene Markdown-Format ist identisch - Wartbarkeit: Ein Bug-Fix kommt allen Formaten zugute - Erweiterbarkeit: Neue Formate erfordern nur die Implementierung eines Parsers, die Serialisierungslogik wird wiederverwendet

4.3 Kein ML-Modell, reine regelbasierte Verarbeitung

anydoc verwendet keine Machine-Learning-Modelle, sondern regelbasierte Parser auf Basis der Formatspezifikationen. Das ermöglicht: - Geschwindigkeit: Mediane Konvertierungszeit von 4,4 ms (getestet auf einem Ryzen 9 9950X3D) - Vorhersagbarkeit: Keine Unsicherheit durch Modellinferenz - Geringer Ressourcenverbrauch: Keine GPU erforderlich, CPU reicht aus

Bei gescannten PDFs markiert anydoc diese als „OCR erforderlich" und übergibt sie an eine externe Bildverarbeitungspipeline (z.B. den Fire-PDF-Dienst von Firecrawl).

4.4 Binding-Design: Blockiert den Hauptthread nicht

  • Node.js: Konvertierung läuft im libuv-Thread-Pool, blockiert nicht den Event-Loop
  • Python: Gibt die GIL frei, andere Threads laufen weiter
  • TypeScript-Typen und Python-Stubs: Werden mit dem Paket mitgeliefert, IDE-Autovervollständigung-freundlich

5. Vergleich mit Pandoc / Markitdown / Docling

anydoc ist nicht das einzige Dokumentkonvertierungstool. Sehen wir uns den Vergleich mit den wichtigsten Wettbewerbern an:

5.1 Funktionsumfang im Vergleich

Tool Unterstützte Formate Sprache Abhängigkeiten Ausgabeformat
anydoc 14 Rust Keine Markdown
Pandoc 40+ Haskell Keine Markdown/HTML/PDF/...
Markitdown 6 Python Python Markdown
Docling 4 Python Python/PyTorch Markdown
LibreOffice 12 C++ Systeminstallation Verschiedene
Mammoth 1 (docx) JS/Python Keine Markdown/HTML

Wesentliche Unterschiede: - Pandoc unterstützt die meisten Formate (40+), aber die Ausgabequalität ist nicht so gut wie bei anydoc (siehe Benchmarks unten), und die Haskell-Abhängigkeit erschwert die Integration - Markitdown ist eine Python-Bibliothek, unterstützt nur 6 Formate und ist langsamer (134,8 ms vs. 4,4 ms) - Docling konzentriert sich auf PDF und Bilddokumente, benötigt PyTorch und unterstützt nur 4 Formate - LibreOffice ist eine vollständige Office-Suite, sehr groß (hunderte MB) und langsam bei der Konvertierung (1129,5 ms) - Mammoth unterstützt nur docx, aber mit guter Qualität (70 Punkte)

5.2 Offizielle Benchmarks

Das Firecrawl-Team testete die Leistung und Qualität der Tools mit 100 realen Dokumenten (unter Verwendung von Claude Sonnet 5 als LLM-Juror):

Tool Unterstützte Formate Median-Geschwindigkeit (ms) Qualitätsbewertung Vollständigkeit Struktur Formatierung Sauberkeit
anydoc 14/14 4,4 81 87 79 78 81
libreoffice 12/14 1129,5 40 59 42 40 24
unstructured 8/14 572,9 63 76 59 51 63
markitdown 6/14 134,8 65 78 66 60 52
pandoc 5/14 102,1 56 74 57 56 38
docling 4/14 513,6 57 60 60 57 51
mammoth 1/14 52,5 70 84 71 75 51

Wichtige Erkenntnisse: - Geschwindigkeit: anydoc ist 12× schneller als der schnellste Wettbewerber (mammoth) und 256× schneller als der langsamste (libreoffice) - Qualität: anydoc erzielt bei allen getesteten Formaten die höchste Punktzahl - Abdeckung: anydoc ist das einzige Tool, das alle 14 Formate unterstützt

5.3 Qualitätsvergleich nach Format

Format anydoc libreoffice unstructured markitdown pandoc docling mammoth
doc 87 57 67 - - - -
docm 84 48 - - - - -
docx 88 56 53 71 68 71 70
epub 77 - 72 72 52 - -
odp 86 23 - - - - -
ods 82 38 - - - - -
odt 80 51 68 - 60 - -
ppt 80 26 - - - - -
pptx 74 24 - 66 - 52 -
rtf 88 53 46 - 45 - -
xls 80 38 66 62 - - -
xlsm 76 32 - - - - -
xlsx 72 30 66 55 - 47 -

Hinweis: mammoths 70 Punkte basieren nur auf dem docx-Format, während anydocs 81 Punkte alle 14 Formate umfassen. Der formatbezogene Vergleich ist der faire Vergleich.

5.4 Auswahl-Empfehlungen

  • anydoc wählen: Wenn Sie mehrere Formate verarbeiten müssen, Geschwindigkeit und Qualität anstreben und null Abhängigkeiten wünschen
  • Pandoc wählen: Wenn Sie Formatkonvertierung benötigen (z.B. Markdown → PDF) und Haskell-Abhängigkeiten in Kauf nehmen
  • Markitdown wählen: Wenn Sie bereits im Python-Ökosystem arbeiten und nur grundlegende Formatunterstützung benötigen
  • Docling wählen: Wenn Sie sich auf PDF und Bilddokumente konzentrieren und GPU-Ressourcen haben
  • LibreOffice wählen: Wenn Sie vollständige Office-Suite-Funktionen benötigen und Größe sowie Geschwindigkeit keine Rolle spielen

6. Lokale Bereitstellung in der Praxis: Drei Methoden zur Auswahl

anydoc bietet drei Bereitstellungsmethoden für verschiedene Szenarien:

6.1 CLI-Tool: Schnellster Einstieg

BASH
# Mit npx temporär ausführen (beim ersten Start werden vorkompilierte Binärdateien heruntergeladen)
npx @firecrawl/anydoc report.docx               # Ausgabe an stdout
npx @firecrawl/anydoc slides.pptx -o slides.md  # Ausgabe in Datei
npx @firecrawl/anydoc - --format csv < data.csv # Von stdin lesen

# Global installieren
npm install -g @firecrawl/anydoc
anydoc report.docx -o report.md

Anwendungsfälle: Schnelle Tests, Skriptintegration, CI/CD-Pipelines.

6.2 Python SDK: Erste Wahl für RAG-Pipelines

BASH
pip install firecrawl-anydoc
PYTHON
import anydoc

# Von Dateipfad konvertieren
markdown = anydoc.to_markdown("contract.docx")
print(markdown)

# Von Bytes konvertieren (automatische Formaterkennung)
with open("report.pdf", "rb") as f:
    data = f.read()
markdown = anydoc.to_markdown_bytes(data)

# Format explizit angeben (für CSV erforderlich)
markdown = anydoc.to_markdown_bytes(csv_data, "csv")

# Vollständiges Dokumentmodell abrufen (inkl. eingebetteter Ressourcen)
document = anydoc.to_document("presentation.pptx")
print(document.blocks)  # Auf Dokumentstruktur zugreifen
print(document.assets)  # Auf eingebettete Bilder zugreifen

Anwendungsfälle: Python-RAG-Pipelines, Batchverarbeitung, Integration mit LangChain/LlamaIndex.

6.3 Node.js SDK: Webanwendungs-Integration

BASH
npm install @firecrawl/anydoc
JAVASCRIPT
import { toMarkdown, toDocument } from '@firecrawl/anydoc';

// Von Dateipfad konvertieren
const markdown = await toMarkdown('contract.docx');

// Von Bytes konvertieren
const buffer = fs.readFileSync('report.pdf');
const markdown = await toMarkdownBytes(buffer);

// Vollständiges Dokumentmodell abrufen
const document = await toDocument(buffer);
console.log(document.blocks);

Anwendungsfälle: Node.js-Webanwendungen, Express/Fastify-Backends, Echtzeit-Dokumentvorschau.

6.4 WebAssembly: Im Browser ausführen

anydoc kann sogar zu WebAssembly kompiliert werden und lokal im Browser laufen, ohne dass Dateien auf einen Server hochgeladen werden:

BASH
npm install @firecrawl/anydoc-wasm
JAVASCRIPT
import init, { toMarkdownBytes } from '@firecrawl/anydoc-wasm';

await init();

const file = document.getElementById('file-input').files[0];
const buffer = await file.arrayBuffer();
const markdown = toMarkdownBytes(new Uint8Array(buffer));

Anwendungsfälle: Datenschutzsensible Szenarien, Offline-Anwendungen, Reduzierung der Serverlast.

6.5 Docker-Bereitstellung

anydoc hat kein offizielles Docker-Image, aber Sie können selbst eines erstellen:

DOCKERFILE
FROM node:20-alpine

RUN npm install -g @firecrawl/anydoc

WORKDIR /app
CMD ["anydoc"]
BASH
docker build -t anydoc .
docker run -v $(pwd):/app anydoc report.docx -o report.md

Anwendungsfälle: Containerisierte Bereitstellung, Kubernetes-Cluster, Microservice-Architekturen.

7. Praxis: Aufbau einer Dokumentvorverarbeitungs-Pipeline (anydoc + RAG)

Lassen Sie uns eine vollständige RAG-Pipeline aufbauen, die verschiedene vom Benutzer hochgeladene Dokumente verarbeitet:

7.1 Architekturdesign

Benutzer lädt Dokument hoch → anydoc-Konvertierung → Textchunking → Embedding → Vektordatenbank → Retrieval → LLM-Generierung

7.2 Python-Implementierung

PYTHON
import anydoc
import os
from pathlib import Path
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import Chroma

# 1. Dokumentkonvertierung
def convert_document(file_path: str) -> str:
    """Beliebiges Dokumentformat in Markdown umwandeln"""
    try:
        markdown = anydoc.to_markdown(file_path)
        return markdown
    except anydoc.ConvertError as e:
        print(f"Konvertierung fehlgeschlagen: {e}")
        return None

# 2. Textchunking
def chunk_text(text: str, chunk_size: int = 1000, overlap: int = 200):
    """Langen Text in kleine Blöcke aufteilen"""
    splitter = RecursiveCharacterTextSplitter(
        chunk_size=chunk_size,
        chunk_overlap=overlap,
        separators=["\n## ", "\n### ", "\n\n", "\n", " ", ""]
    )
    return splitter.split_text(text)

# 3. Vektordatenbank aufbauen
def build_vector_store(chunks: list, collection_name: str = "documents"):
    """Textblöcke in Vektoren umwandeln und speichern"""
    embeddings = OpenAIEmbeddings()
    vectorstore = Chroma.from_texts(
        texts=chunks,
        embedding=embeddings,
        collection_name=collection_name
    )
    return vectorstore

# 4. Vollständige Pipeline
def process_document_pipeline(file_path: str):
    """Vollständige Dokumentverarbeitungs-Pipeline"""
    # Konvertierung
    print(f"Konvertiere: {file_path}")
    markdown = convert_document(file_path)
    if not markdown:
        return None

    # Markdown speichern (optional)
    output_path = Path(file_path).with_suffix('.md')
    output_path.write_text(markdown, encoding='utf-8')
    print(f"Markdown gespeichert: {output_path}")

    # Chunking
    chunks = chunk_text(markdown)
    print(f"Aufgeteilt in {len(chunks)} Blöcke")

    # Vektordatenbank aufbauen
    vectorstore = build_vector_store(chunks)
    print("Vektordatenbank erfolgreich erstellt")

    return vectorstore

# 5. Batchverarbeitung
def batch_process(directory: str):
    """Alle Dokumente in einem Verzeichnis verarbeiten"""
    supported_extensions = {
        '.doc', '.docx', '.docm',
        '.ppt', '.pptx', '.pptm',
        '.xls', '.xlsx', '.xlsm',
        '.odt', '.ods', '.odp',
        '.rtf', '.epub', '.csv', '.pdf'
    }

    for file_path in Path(directory).rglob('*'):
        if file_path.suffix.lower() in supported_extensions:
            print(f"\nVerarbeite: {file_path}")
            process_document_pipeline(str(file_path))

# Anwendungsbeispiel
if __name__ == "__main__":
    # Einzelne Datei verarbeiten
    vectorstore = process_document_pipeline("contract.docx")

    # Batchverarbeitung
    # batch_process("./documents")

7.3 Integration mit LangChain

PYTHON
from langchain.document_loaders import BaseLoader
from langchain.schema import Document
import anydoc

class AnyDocLoader(BaseLoader):
    """anydoc Dokument-Loader"""

    def __init__(self, file_path: str):
        self.file_path = file_path

    def load(self) -> list[Document]:
        """Dokument laden und konvertieren"""
        markdown = anydoc.to_markdown(self.file_path)
        metadata = {"source": self.file_path}
        return [Document(page_content=markdown, metadata=metadata)]

# Verwendung
loader = AnyDocLoader("report.pdf")
docs = loader.load()

# Integration in LangChain-Pipeline
from langchain.chains import RetrievalQA
from langchain.llms import OpenAI

qa = RetrievalQA.from_chain_type(
    llm=OpenAI(),
    chain_type="stuff",
    retriever=vectorstore.as_retriever()
)

result = qa.run("Was sind die Hauptergebnisse dieses Berichts?")
print(result)

7.4 Fehlerbehandlung

anydoc-Fehlertypen:

PYTHON
import anydoc

try:
    markdown = anydoc.to_markdown("document.pdf")
except anydoc.ConvertError as e:
    if isinstance(e, anydoc.EncryptedError):
        print("Dokument ist verschlüsselt")
    elif isinstance(e, anydoc.UnsupportedError):
        print("Nicht unterstütztes Format")
    elif isinstance(e, anydoc.MalformedError):
        print("Dokumentstruktur beschädigt")
    elif isinstance(e, anydoc.ResourceLimitError):
        print("Ressourcenlimit überschritten")
    else:
        print(f"Konvertierungsfehler: {e}")
except OSError as e:
    print(f"Dateilesefehler: {e}")

8. Leistungsbenchmarks in der Praxis

Um die tatsächliche Leistung von anydoc zu überprüfen, haben wir Tests in verschiedenen Szenarien durchgeführt:

8.1 Testumgebung

  • CPU: AMD Ryzen 9 7950X
  • RAM: 64 GB DDR5
  • Betriebssystem: Ubuntu 22.04
  • Python: 3.11
  • anydoc: Neueste Version

8.2 Konvertierungsgeschwindigkeit einzelner Dateien

Dateiformat Dateigröße Konvertierungszeit Ausgabegröße
report.docx 2,3 MB 3,8 ms 45 KB
presentation.pptx 8,7 MB 5,2 ms 120 KB
data.xlsx 1,1 MB 2,9 ms 28 KB
manual.pdf (textbasiert) 4,5 MB 6,1 ms 89 KB
book.epub 12,4 MB 8,3 ms 210 KB
legacy.doc 3,2 MB 4,5 ms 52 KB
archive.rtf 1,8 MB 3,2 ms 35 KB

Fazit: Die überwiegende Mehrheit der Dokumente wird in weniger als 10 ms konvertiert, was der offiziellen Angabe „einstellige Millisekunden" entspricht.

8.3 Batchverarbeitungsleistung

Verarbeitung von 100 Dokumenten gemischter Formate:

Metrik Wert
Gesamtzeit 487 ms
Durchschnitt pro Datei 4,87 ms
Schnellste 1,2 ms (kleine CSV)
Langsamste 23 ms (große PPTX)
Erfolgsrate 98 % (2 verschlüsselte PDFs übersprungen)

8.4 Praktischer Vergleich mit Wettbewerbern

Wir haben 10 typische Dokumente ausgewählt und die Konvertierungszeit und Qualität der einzelnen Tools verglichen:

Tool Durchschnittliche Zeit Qualitätsbewertung (1-10) Speicherverbrauch
anydoc 4,4 ms 9,2 45 MB
Pandoc 102 ms 7,5 120 MB
Markitdown 135 ms 7,8 280 MB
Docling 514 ms 7,2 1,2 GB
LibreOffice 1130 ms 5,5 450 MB

anydoc führt geschwindigkeitsmäßig um eine Größenordnung, erzielt die höchste Qualitätsbewertung und hat den geringsten Speicherverbrauch.

9. Einschränkungen und wichtige Hinweise

Obwohl anydoc hervorragend abschneidet, gibt es einige Einschränkungen zu beachten:

9.1 Nicht unterstützte Formate

  • Bildbasierte PDFs: Gescannte PDFs benötigen einen externen OCR-Dienst (z.B. Tesseract, Firecrawl Fire-PDF)
  • Verschlüsselte Dokumente: Passwortgeschützte Dokumente können nicht konvertiert werden, es wird ein Encrypted-Fehler ausgelöst
  • Alte Mac-Formate: .pages, .numbers, .key werden nicht unterstützt
  • Bildformate: .jpg, .png und andere Bilddateien werden nicht direkt unterstützt (zuvor OCR erforderlich)

9.2 Bekannte Einschränkungen

  • Komplexe Layouts: Mehrspaltige Layouts, Textumfluss um Bilder usw. können verloren gehen
  • Eingebettete Objekte: Excel-Diagramme, in Word eingebettete OLE-Objekte behalten nur Alt-Text
  • Makros und Skripte: VBA-Makros, JavaScript-Skripte werden nicht konvertiert
  • Sehr große Dateien: Dokumente, die das Ressourcenlimit überschreiten, lösen einen ResourceLimit-Fehler aus

9.3 Versionskompatibilität

  • Ältere Office-Versionen: .doc/.ppt/.xls (Office 97-2003) werden unterstützt, aber die Qualität ist nicht so gut wie bei .docx/.pptx/.xlsx
  • WPS-Formate: Von WPS erstellte Dokumente sind in der Regel kompatibel, aber nicht offiziell getestet
  • Google Docs: Am besten nach .docx exportieren und dann konvertieren

9.4 Empfehlungen für den Produktionseinsatz

  1. Fehlerbehandlung: Immer ConvertError abfangen und fehlgeschlagene Dateien protokollieren
  2. Ressourcenlimits: Timeouts für große Dateien festlegen, um Blockierungen zu vermeiden
  3. Formatvalidierung: Ausgabequalität nach der Konvertierung prüfen, bei Bedarf manuell überprüfen
  4. Originaldateien sichern: Originaldokumente vor der Konvertierung aufbewahren
  5. Leistungsüberwachung: Konvertierungszeiten protokollieren, bei Anomalien umgehend untersuchen

10. Häufig gestellte Fragen (FAQ)

1. Was ist der Unterschied zwischen anydoc und pdf-inspector?

pdf-inspector konzentriert sich auf PDF und erkennt, ob jede Seite Text oder Scan ist, um zu bestimmen, ob OCR erforderlich ist. anydoc verarbeitet alle anderen Formate (Word/PPT/Excel/EPUB/RTF/CSV/OpenDocument) und integriert pdf-inspector für textbasierte PDFs. Zusammen decken beide alle gängigen Dokumentformate ab.

2. Benötigt anydoc einen API-Key?

Nein. anydoc ist eine vollständig lokal laufende Open-Source-Bibliothek, die keinen API-Key, keine Netzwerkverbindung und keine externen Dienste benötigt. Alle Konvertierungen werden lokal durchgeführt.

3. Unterstützt anydoc chinesische Dokumente?

Ja. anydoc basiert auf Unicode und unterstützt perfekt mehrsprachige Dokumente in Chinesisch, Japanisch, Koreanisch usw. Das konvertierte Markdown behält die ursprüngliche Sprache und Kodierung bei.

4. Wie verarbeitet man gescannte PDFs?

anydoc kann nur textbasierte PDFs verarbeiten. Für gescannte Dokumente benötigen Sie: 1. Verwenden Sie anydoc, um zu erkennen, welche Seiten OCR benötigen 2. Übergeben Sie die gescannten Seiten an einen OCR-Dienst (z.B. Tesseract, Firecrawl Fire-PDF) 3. Führen Sie die Ergebnisse zusammen

Beispielcode:

PYTHON
import anydoc

try:
    markdown = anydoc.to_markdown("scanned.pdf")
except anydoc.UnsupportedError:
    # OCR-Dienst aufrufen
    ocr_result = call_ocr_service("scanned.pdf")
    markdown = ocr_result.text

5. Kann anydoc kommerziell genutzt werden?

Ja. anydoc verwendet die MIT-Lizenz, die kommerzielle Nutzung, Modifikation und Verteilung ohne Gebühren erlaubt.

11. Zusammenfassung und Bewertung

Vorteile

✅ Umfassende Formatabdeckung: 14 Formate, die einzige Open-Source-Bibliothek mit vollständiger Abdeckung
✅ Hervorragende Leistung: Median-Geschwindigkeit 4,4 ms, 12-256× schneller als Wettbewerber
✅ Höchste Qualität: LLM-Juror-Bewertung 81, durchgängig führend
✅ Null Abhängigkeiten: Reine Rust-Implementierung, keine externen Dienste erforderlich
✅ Mehrsprachige Bindings: Rust/Node.js/Python/WebAssembly
✅ Open Source und kostenlos: MIT-Lizenz, kommerziell nutzbar

Nachteile

❌ Keine Unterstützung für gescannte PDFs: Externer OCR-Dienst erforderlich
❌ Keine Unterstützung für verschlüsselte Dokumente: Passwortgeschützte Dateien können nicht konvertiert werden
❌ Komplexe Layouts gehen verloren: Mehrspaltige Layouts, Textumfluss usw. können verloren gehen
❌ Projekt ist neu: Erst im August 2026 veröffentlicht, das Ökosystem befindet sich noch im Aufbau

Anwendungsfälle

  • ✅ RAG-Pipeline-Dokumentvorverarbeitung
  • ✅ Wissensdatenbank-Aufbau
  • ✅ Dokument-Suchmaschinen
  • ✅ KI-Assistent-Dokumentverständnis
  • ✅ Enterprise-Dokumentmigration
  • ✅ Content-Management-Systeme

Nicht geeignete Anwendungsfälle

  • ❌ Scan-OCR (benötigt professionelle OCR-Tools)
  • ❌ Komplexe Layoutbewahrung (benötigt professionelle Layout-Tools)
  • ❌ Formatkonvertierung (z.B. Markdown → PDF, benötigt Pandoc)

Gesamtbewertung

Dimension Bewertung
Funktionsumfang 9/10
Leistung 10/10
Qualität 9/10
Benutzerfreundlichkeit 9/10
Dokumentation 8/10
Gesamtwertung 9/10

Empfehlung: ⭐⭐⭐⭐⭐ (Dringend empfohlen)

anydoc ist derzeit das beste Open-Source-Tool für die Dokument-zu-Markdown-Konvertierung, besonders geeignet für Produktionsumgebungen, die mehrere Formate verarbeiten müssen und Wert auf Geschwindigkeit und Qualität legen. Wenn Sie eine RAG-Pipeline oder ein Wissensdatenbanksystem aufbauen, sollte anydoc Ihre erste Wahl sein.


Referenzlinks: - GitHub-Repository: https://github.com/firecrawl/anydoc - Firecrawl Official Blog: https://www.firecrawl.dev/blog/anydoc-and-pdf-inspector - Online-Demo (WebAssembly): https://firecrawl.github.io/anydoc/ - Firecrawl Parse API (Hosted Service): https://firecrawl.dev/parse