PDF to Text
Extract text content from PDF documents with word and character counts.
Geprüft von Aygul Dovletova · Zuletzt geprüft
Drop a PDF file here or click to upload
Extract text content from PDF pages
Wie man Text aus einer PDF extrahiert
- Eine PDF auf den Upload-Bereich ziehen oder auf das gestrichelte Feld klicken, um zu durchsuchen. Die Datei wird in einen ArrayBuffer geladen und an PDF.js übergeben.
- Einen Moment warten. Der Extraktor durchläuft jede Seite und zieht Textelemente aus jedem Inhaltsstrom; für ein typisches 20-seitiges Geschäftsdokument dauert das deutlich unter einer Sekunde.
- Die Ausgabe im rechten Textbereich lesen. Seiten werden durch eine Leerzeile und eine "--- Seite N ---"-Markierung getrennt, sodass du siehst, wo jede Seite beginnt.
- Kopieren oder herunterladen. Verwende die Zwischenablage-Schaltfläche für die schnelle Wiederverwendung in einem anderen Tab, oder die Download-Schaltfläche, um eine
.txt-Datei als UTF-8 kodiert zu speichern, die sich in jedem Editor sauber öffnet.
Wie die Textschicht-Extraktion funktioniert
Dieses Tool lädt deine Datei mit pdfjs-dist, dem Parser, der den integrierten PDF-Viewer von Firefox antreibt. Für jede Seite ruft es page.getTextContent() auf, das den Inhaltsstrom durchläuft und jeden "Tj"-, "TJ"-, "'"- und "-Operator sammelt (die in ISO 32000-2 Klausel 9.4 definierten PDF-Textzeige-Operatoren). Jeder Operator erzeugt ein Textelement mit seiner Glyph-Zeichenkette, dem Schriftartenwörterbuch, mit dem es gemalt wurde, und seiner Transformationsmatrix. Der Extraktor fügt diese Elemente in Lesereihenfolge zusammen und errät Wort- und Zeilenumbrüche aus den Abständen zwischen Elementrahmen. Dies ist eine Textschicht-Extraktion: der Text muss bereits als kodierte Zeichen im Inhaltsstrom vorhanden sein. Wenn das Dokument ein gescanntes Bild ohne eingebetteten Text ist, gibt es nichts zu extrahieren; du benötigst OCR, das dieses Tool nicht durchführt.
Wann Textextraktion das Richtige ist
- Den Text eines Vertrags in ein NLP-Diff-Tool ziehen, um zwei Versionen wortweise zu vergleichen.
- Den Text einer Forschungsarbeit in einen Referenzmanager oder eine Zusammenfassungs-Pipeline einspeisen.
- Ein langes Zitat aus einer Lehrbach-PDF in ein Dokument kopieren, wo das Auswahlverhalten in deinem Reader unangenehm ist.
- Besprechungsprotokolle aus einem Jahrzehnte alten internen PDF-Archiv in ein Wiki exportieren, das nur Klartext akzeptiert.
- Einen schnellen grep über einen hundert-seitigen RFC ausführen, um Vorkommen eines bestimmten Begriffs zu zählen, bevor eine Zusammenfassung geschrieben wird.
- Eine Datenschutzrichtlinie auf bestimmte Formulierungen prüfen (Aufbewahrungsdauer, Datenweitergabe-Klauseln), die Compliance schnell finden muss.
Warum Extraktion manchmal fehlschlägt
Der häufigste Fehlschlag ist eine gescannte PDF: eine Datei, die wie Text aussieht, aber eine Folge von Bild-XObjects ohne Zeichencodes ist. Die Extraktion gibt leere oder fast leere Ausgabe zurück. Die Lösung ist OCR: ocrmypdf input.pdf output.pdf fügt eine unsichtbare Textschicht unter den Bildern hinzu, und das erneute Ausführen dieses Tools auf dem Ergebnis produziert echten Text. Weitere Probleme: benutzerdefinierte Schriftartkodierungen, die Glyph-Codes nicht auf Unicode abbilden, produzieren unlesbaren Output (häufig bei alten CAD-Exporten); mehrspaltige Seiten können verschachtelt herauskommen, weil PDF.js in Stream-Reihenfolge liest; Ligaturen wie "fi" können als einzelne Glyphe erscheinen; und Tabellen verlieren ihre Zellenstruktur und kommen als Ströme von ausgerichtetem Leerzeichen heraus.
Wie Text in einer PDF lebt
Eine PDF speichert Text als Folge von Markierungsoperatoren im Inhaltsstrom jeder Seite. Der Operator Tj malt eine Zeichenkette mit der aktuell aktiven Schriftart; der Operator Tf wählt diese Schriftart; Td und Tm positionieren die Textmatrix. Die Byte-Zeichenketten innerhalb von Tj sind Glyph-Codes, kein Unicode; ihre Zurückbildung auf Unicode-Zeichen erfordert eine ToUnicode-CMap im Schriftartenwörterbuch gemäß ISO 32000-2 Klausel 9.10. Gut erstellte PDFs betten diese CMap ein und die Extraktion liefert sauberes Unicode. Schlecht erstellte PDFs lassen sie weg oder verwenden implizite Zuordnungen, die PDF.js erraten muss. PDF/A (ISO 19005) schreibt vor, dass jede Schriftart eingebettet und jedes Zeichen einem Unicode-Code-Punkt zugeordnet werden muss, genau damit Archivdokumente Jahrzehnte später noch extrahiert werden können; das ist der Grund, warum Akademiker und Gerichte, die PDF/A vorschreiben, bei langfristigen Dateien sauberere Extraktionsergebnisse erzielen.
Alternativen zur browserseitigen Extraktion
Für digital-native PDFs ist pdftotext input.pdf - aus der Poppler-Suite das Befehlszeilen-Äquivalent und verarbeitet Unicode sauber. mutool draw -F txt input.pdf von MuPDF erhält manchmal die Lesereihenfolge bei mehrspaltigen Layouts besser, wo pdftotext scheitert. Für gescannte Dokumente ist die kanonische Pipeline ocrmypdf --language deu --force-ocr input.pdf output.pdf, gefolgt von pdftotext output.pdf -; dies bettet eine Textschicht ein, sodass jede zukünftige Extraktion funktioniert. Pythons pdfminer.six fügt programmgesteuerte Steuerung hinzu, die sich für die Tabellenextraktion auszahlt. Das Browser-Tool gewinnt bei der einmaligen Extraktion ohne Installation; für jede wiederkehrende Stapelverarbeitung wechsle zu pdftotext oder pdfminer.six in einem Skript.
Häufig gestellte Fragen
Warum ist der extrahierte Text bei meinem gescannten Dokument leer?
Weil eine gescannte PDF Bilder von Text enthält, keine Text-Zeichen. Im Inhaltsstrom gibt es nichts für PDF.js herauszuziehen; die "Seiten" sind nur große Bild-XObjects. Führe zunächst ocrmypdf auf der Datei aus, um eine unsichtbare, durchsuchbare Textschicht unter den Bildern hinzuzufügen, und extrahiere dann erneut. Dies ist eine Eigenschaft der Art, wie die Datei erstellt wurde, keine Einschränkung dieses Tools.
Führt dieses Tool OCR durch?
Nein, und das ist eine bewusste Entscheidung. OCR im Browser erfordert entweder einen großen WebAssembly-Tesseract-Build oder einen Server-Roundtrip, beides mit realen Kompromissen. Die empfohlene Pipeline für gescannte Dokumente ist ocrmypdf auf deinem Rechner, das eine durchsuchbare PDF erstellt, die jeder Extraktor (einschliesslich dieses) dann korrekt verarbeitet. Wir trennen die Textschicht-Extraktion und den OCR-Schritt, um jedes Tool schnell und ehrlich bezüglich seiner Funktion zu halten.
Bleibt die Formatierung bei der Extraktion erhalten?
Nur auf gröbster Ebene. Absatzumbrüche überleben grob, wenn die PDF vertikale Leeräume zwischen Blöcken verwendet; Spalten, Tabellen, Fett- und Kursivschrift sowie die Ueberschriftenhierarchie nicht. Die Ausgabe ist einfacher UTF-8-Text mit Seitenmarkierungen, die an jeder Seitengrenze eingefügt werden. Wenn du strukturierte Extraktion benötigst (Tabellen als Tabellen, Überschriften als Überschriften), verwende eine layout-bewusste Python-Bibliothek wie pdfplumber oder einen kommerziellen Extraktor wie ABBYY FineReader.
Kann es nicht-lateinische Schriften wie Chinesisch, Arabisch oder Kyrillisch verarbeiten?
Ja, solange das Quelldokument ordentliche Unicode-Zuordnungen für seine Schriftarten einbettet. Moderne PDFs, die von Word, Google Docs, InDesign oder LaTeX generiert wurden, erzeugen sauberes Unicode für jede Schrift. Ältere Dokumente, die benutzerdefinierte Glyph-Indizes ohne eine ToUnicode-CMap verwenden, produzieren unlesbaren Output unabhängig von der Sprache. Rechts-nach-links-Schriften wie Arabisch und Hebräisch werden in logischer Zeichenreihenfolge extrahiert; die bidirektionale Formgebung ist eine Viewer-Angelegenheit, keine Extraktions-Angelegenheit.
Warum kommt Text aus einer zweispaltigen PDF verschachtelt heraus?
PDF.js liest Textelemente in der Reihenfolge, in der sie im Inhaltsstrom erscheinen, was die Reihenfolge ist, in der der PDF-Ersteller sie zunächst geschrieben hat. Einige Ersteller schreiben Spalte eins von Anfang bis Ende, dann Spalte zwei; andere verschachteln Zeile für Zeile. Der Extraktor kann das Spaltenlayout nicht leicht erraten, ohne einen geometrischen Durchlauf, der das Tool für den häufigen einspaltigen Fall erheblich verlangsamen würde. Für kritische zweispaltige Extraktion verwende <code>mutool draw -F txt</code> oder pdfminer.six mit aktivierter Layout-Analyse.
Wird die Datei auf irgendeinen Server hochgeladen?
Nein. pdfjs-dist wird in den Tab geladen und läuft vollständig auf dem Client gegen den ArrayBuffer deiner Datei. Es gibt keinen Fetch-Endpunkt, der Dateiinhalt empfängt, keinen Backend-Parser und kein Service-Worker- Abfangen. Du kannst es prüfen, indem du nach dem Laden der Seite die Verbindung zum Netzwerk trennst; die Extraktion funktioniert weiterhin. Das übliche Analytics-Skript auf der Website erfasst Seitenaufrufe, keine Datei-Bytes.
Was bedeuten die "--- Seite N ---"-Markierungen in der Ausgabe?
Sie sind Seitentrennungs-Trennzeichen, die vom Extraktor eingefügt werden, damit du extrahierten Text der Quelle zuordnen kannst. Jede Seite wird unabhängig durch getTextContent verarbeitet, und der Text einer Seite endet dort, wo die Markierung für die nächste Seite beginnt. Wenn du die Ausgabe mit einem Skript nachbearbeitest, kannst du auf dem Regex <code>/--- Seite \\d+ ---/</code> aufteilen, um seitenweise zu iterieren.
Kann ich Text aus passwortgeschützten PDFs extrahieren?
Nicht in dieser Benutzeroberfläche. PDF.js kann einen Passwort-Parameter an getDocument übergeben, aber diese Seite fordert keines an, sodass der Extraktor verschlüsselte Dateien beim Laden ablehnt. Entschlüssle zuerst mit dem PDF-Entsperren-Tool (sobald das Verschlüsselungsmodul verfügbar ist) oder mit <code>qpdf --decrypt --password=DEINPASSWORT input.pdf output.pdf</code> lokal, und führe dann die Extraktion auf der Klartextkopie durch.
Warum erscheinen Ligaturen wie "fi" und "fl" als einzelnes Zeichen?
Wenn eine Schriftart die Ligatur als einzelne Glyphe mit einem einzelnen Glyph-Code einbettet und das Schriftartenwörterbuch diese Glyphe nicht auf die Zwei-Zeichen-Unicode-Sequenz zurückbildet, sieht der Extraktor, was die PDF tatsächlich speichert: ein Zeichen. Gut erstellte moderne PDFs enthalten eine ToUnicode-CMap, die "fi" auf "fi" ausdehnt, und diese werden korrekt extrahiert. Wenn deine Ausgabe voller Ligatur-Glyphen ist, führe sie durch einen Nachbearbeitungs-Prozess, der Unicode normalisiert (NFKC), um sie zu zerlegen.
Wie schneidet das Tool im Vergleich zu pdftotext ab?
pdftotext vom Poppler-Projekt ist das bewährte CLI-Äquivalent und ist normalerweise etwas besser bei der Lesereihenfolge für komplexe Layouts, weil es einen geometrischen Sortier-Durchlauf durchführt, den PDF.js nicht vollständig repliziert. Es ist auch viel schneller bei der Stapelverarbeitung. Dieses Browser-Tool gewinnt bei der Einzeldatei-Nutzung ohne Installation und in Situationen, in denen die Datei den Rechner nicht verlassen darf. Für jede wiederkehrende oder programmgesteuerte Extraktion verwende pdftotext in einem Shell-Skript oder Python-Wrapper.
Mehr PDF Tools
Image to PDF
Combine multiple JPG and PNG images into a single PDF document.
Open toolPDF Compressor
Compress PDFs with Ghostscript image downsampling. Pick a quality preset. Files auto-deleted after 15 minutes.
Open toolPDF Merge (Server-Side)
Merge up to 20 PDFs into a single document on our EU servers using qpdf. Files auto-deleted after 15 minutes. Handles large or password-cleared inputs the in-browser merger cannot.
Open toolPDF Merger
Merge multiple PDF files into a single document with drag-and-drop reordering.
Open toolPDF Page Reorder
Rearrange pages in a PDF document with a visual drag-and-drop interface.
Open toolPDF Password Protect
Add AES-256 password protection to PDF files via qpdf. Files auto-deleted after 15 minutes.
Open tool