← Alle Tools
🔤

PDF OCR online — Gescannte PDFs in durchsuchbaren Text umwandeln

Text in gescannten PDF-Dateien und Bildern erkennen. Leistungsstarkes lokales OCR-Tool für durchsuchbare PDFs.

+PDF oder Foto hochladenoder Dateien hierher ziehen🚀 OCR kostenlos starten

So funktioniert es

01

Gescanntes PDF hochladen

Öffnen Sie ein gescanntes PDF oder Dokumentfoto direkt im Browser.

02

OCR-Werkzeug auswählen

Klicken Sie 🖌 auf einer Seitenkarte und wählen Sie das ✏️ OCR-Werkzeug.

03

Textbereich einzeichnen

Zeichnen Sie ein Rechteck um den Text oder die Tabelle und klicken Sie „Erkennen".

04

Bearbeiten und speichern

Erkannter Text erscheint als bearbeitbare Ebene auf der Seite.

Warum pdfredX

🔒

Volle Privatsphäre

Dateien verlassen Ihren Browser nicht. Kein Upload auf externe Server.

Lokale Verarbeitung

Alle Berechnungen erfolgen lokal — schnell, sicher und kostenlos.

🆓

Keine Registrierung

Einfach Browser öffnen und loslegen. Keine Konten erforderlich.

📱

Alle Geräte

PC, Tablet und Smartphone — ohne Installation.

Verwandte Artikel

Bereichs-OCR für PDF: Text auf einem Scan erkennen und ersetzen — direkt im Browser
Sie haben einen gescannten Vertrag, eine Rechnung oder eine Bescheinigung und müssen eine einzige Zeile ändern. Das ganze Dokument neu abzutippen ist unnötig. Markieren Sie den Bereich mit dem gewünschten Text, warten Sie die Erkennung ab und bearbeiten Sie das Ergebnis direkt auf der Seite. Die Datei verlässt dabei Ihren Browser nicht.

Sie haben einen gescannten Vertrag, eine Rechnung oder eine Bescheinigung und müssen eine einzige Zeile ändern. Das ganze Dokument neu abzutippen ist unnötig. Markieren Sie den Bereich mit dem gewünschten Text, warten Sie die Erkennung ab und bearbeiten Sie das Ergebnis direkt auf der Seite. Die Datei verlässt dabei Ihren Browser nicht.


Schritt 01. Datei öffnen

Öffnen Sie pdfredX und ziehen Sie ein PDF oder ein Scan-Foto in den Upload-Bereich. JPEG, PNG, HEIC, WebP und mehrseitige PDFs werden akzeptiert. Ist das Dokument bereits geöffnet, klicken Sie auf die Karte der gewünschten Seite.

Der Browser wandelt die Seite über PDF.js in ein Canvas-Bild um. Das geschieht lokal — kein Upload auf einen Server.


Schritt 02. OCR-Werkzeug wählen und Bereich markieren

Wählen Sie im Seiten-Editor das OCR-Werkzeug — der Cursor wird zum Fadenkreuz. Ziehen Sie ein Rechteck um den gewünschten Text: eine Zeile, einen Absatz oder einen ganzen Block. Je enger der Rahmen, desto weniger Fremdzeichen landen im Ergebnis.

Nach dem Loslassen der Maustaste erscheint die Schaltfläche Erkennen. Klicken Sie sie an.


Schritt 03. Text prüfen und bearbeiten

Tesseract.js verarbeitet den markierten Bereich direkt im Browser. Der Fortschritt ist in der Statusleiste sichtbar. Nach wenigen Sekunden erscheinen auf der Seite zwei Elemente:

  • Ein schwarzes Rechteck — verdeckt den ursprünglichen Text (die Maske)
  • Eine bearbeitbare Textebene — die erkannten Zeilen über der Maske

Klicken Sie auf den Text und bearbeiten Sie ihn direkt auf der Seite. Größe, Position und Stil passen Sie mit den Standard-Werkzeugen des Editors an.


Schritt 04. Seite als PDF speichern

Klicken Sie auf Speichern — die Seite wird über die Canvas-API in der vollen Originalauflösung exportiert (der Skalierungsfaktor ergibt sich aus fabNativeW / fabCanvas.getWidth()). Die Verkleinerung auf 1500px betrifft nur die Kopie, die in die OCR ging — auf die fertige Datei hat sie keinen Einfluss. Klicken Sie anschließend auf PDF erstellen — alle Seiten des Dokuments werden in einer Datei zusammengefasst.


So ist es technisch umgesetzt

Tesseract.js 5.x wird verzögert geladen — erst bei der ersten Nutzung des Werkzeugs. Das sind rund 2,5 MB. Vor der Erkennung wird nur der ausgeschnittene Bereich auf 1500px an der längeren Seite verkleinert — eine Kopie des von Ihnen markierten Bereichs, die an Tesseract.js geht. Andernfalls stößt die Verarbeitung auf Mobilgeräten an das RAM-Limit. Diese Verkleinerung betrifft ausschließlich die Kopie, die in die Erkennung geht: das Fabric.js-Canvas, das Hintergrundbild der Seite und der finale PDF-Export bleiben in der originalen hohen Auflösung — die fertige Datei verliert nichts an Qualität. Standardmäßig kommt das kombinierte Sprachmodell deu+eng zum Einsatz — es bewältigt gemischtsprachige Dokumente besser als ein einsprachiger Modus. Die Sprache wechselt automatisch mit der Oberflächensprache der Website.

Pro erkannter Zeile werden zwei Fabric.js-Objekte erzeugt: ein fabric.Rect mit deckender Füllung in der Hintergrundfarbe (die Maske) und ein fabric.IText mit dem erkannten Text darüber. Beide Objekte landen im Undo-Stack — sie lassen sich mit Strg+Z rückgängig machen.


Bekannte Einschränkungen

Die Erkennungsqualität hängt von der Scan-Qualität ab. Wurde die Seite schräg, mit Spiegelungen oder in zu niedriger Auflösung aufgenommen, fällt das Ergebnis schlechter aus als bei einem gut kalibrierten Flachbettscanner. Tesseract.js ist kein neuronales Modell der neuesten Generation, sondern eine klassische OCR-Engine. Prüfen Sie kritische Dokumente von Hand nach.

Handschrift wird nicht erkannt. Das Werkzeug arbeitet nur mit Druckschrift. Handschrift, Striche und Tabellen mit dünnen Linien führen häufig zu Fehlern.

Seiten mit dunklem Hintergrund. Ist der Dokumenthintergrund nicht weiß, passt die automatisch gewählte Maskenfarbe möglicherweise nicht. Stellen Sie die Farbe in diesem Fall manuell über die Farbpalette des Editors ein.


Wenn Sie Daten dauerhaft verbergen statt umschreiben möchten, entfernt das Werkzeug PDF-Text schwärzen die darunterliegenden Pixel beim Speichern.

Probieren Sie die Bereichs-OCR aus — pdfredx.com, ohne Registrierung, Ihre Datei bleibt bei Ihnen.

Patientenakte, Vertrag, Ausweis im PDF: Was beim Klick auf „Hochladen" mit Ihrem Text passiert
Scans mit personenbezogenen Daten werden täglich auf Online-Dienste hochgeladen. Die meisten tun es, ohne nachzudenken. Wenn Sie eine einzige Zeile in einem gescannten Dokument ändern müssen, schauen wir ehrlich hin, was auf jedem der beiden Wege mit der Datei geschieht.

Scans mit personenbezogenen Daten werden täglich auf Online-Dienste hochgeladen. Die meisten tun es, ohne nachzudenken. Wenn Sie eine einzige Zeile in einem gescannten Dokument ändern müssen, schauen wir ehrlich hin, was auf jedem der beiden Wege mit der Datei geschieht.


Was auf üblichen serverbasierten Diensten mit der Datei passiert

Wenn Sie in einem gewöhnlichen PDF-Editor auf „Hochladen" klicken, geht die Datei an einen Server. Was danach passiert, hängt vollständig von der Richtlinie des jeweiligen Anbieters ab — jener, die kaum jemand liest.

Eine typische Kette:

  • Die Datei wird im temporären Speicher auf den Servern eines Auftragsverarbeiters abgelegt (AWS, GCP, Azure).
  • Sie wird auf einer entfernten Maschine verarbeitet — OCR, Konvertierung, Annotation.
  • Sie wird von einigen Stunden bis zu mehreren Tagen „zur Sicherheit" oder „zur Verbesserung des Dienstes" aufbewahrt.
  • Im besten Fall wird sie planmäßig gelöscht. Im schlechtesten zusammen mit Metadaten protokolliert.

Die konkreten Speicherfristen stehen meist im Kleingedruckten der Datenschutzerklärung. Wenn Sie eine Patientenakte, einen Vertrag mit Vertragssumme, Ausweisdaten oder ein Gerichtsdokument bearbeiten, landet dieser Text physisch auf einer Maschine, die Sie nicht kontrollieren.

Aus DSGVO-Sicht ist das heikel: Sobald die Datei auf einem fremden Server liegt, geben Sie als Verantwortlicher die Kontrolle über die Verarbeitung aus der Hand — an einen Auftragsverarbeiter, dessen Standort, Aufbewahrung und Weitergabe Sie nicht überprüfen können.


Vollständige Isolation im Browser: So verarbeitet pdfredX Ihre Dateien

In pdfredX läuft der gesamte Vorgang — vom Öffnen bis zum Speichern — innerhalb eines einzigen Browser-Tabs ab.

Laden: Die Datei wird über die Standard-FileReader-API gelesen. Der Browser erzeugt ein ArrayBuffer im Arbeitsspeicher. Es gibt keine Netzwerkanfrage — kein einziges Byte verlässt das Gerät.

Render: PDF.js 3.11.174 parst das Dokument und zeichnet die Seiten direkt im Browser auf <canvas>-Elemente. Es ist dieselbe Engine, die Firefox für seine integrierte PDF-Ansicht nutzt.

OCR: Tesseract.js 5.x ist eine vollwertige, nach WebAssembly kompilierte Texterkennungs-Engine. Sie läuft im Browser genauso wie im Terminal. Das Sprachmodell (~2,5 MB) wird einmal geladen und vom Browser zwischengespeichert.

Ergebnis: Bearbeitbare Textblöcke existieren nur innerhalb des Canvas des aktuellen Tabs. Schließen Sie den Tab, verschwinden sie mitsamt dem Dokument.


Schritt für Schritt: sicheres Arbeiten mit sensiblen Dokumenten

Schritt 01. Datei lokal öffnen

Ziehen Sie den Scan in den Upload-Bereich auf pdfredx.com. Keine Upload-Fortschrittsanzeige zum Server: Die Datei geht nicht an eine fremde Maschine, sondern öffnet lokal. Die Geschwindigkeit der Initialisierung hängt von Dateigröße und Geräteleistung ab — ein leichter Scan öffnet sofort, ein schweres PDF mit 100+ MB auf einem alten Smartphone kann ein paar Sekunden dauern: FileReader liest die Datei zuerst in den Speicher, dann parst und rendert PDF.js die Seiten direkt im Browser.

Schritt 02. Bereich mit Text markieren

Wählen Sie das OCR-Werkzeug und ziehen Sie ein Rechteck um den gewünschten Ausschnitt: eine Zeile, einen Absatz, ein Formularfeld. Klicken Sie auf Erkennen.

Schritt 03. Bearbeiten und speichern

Korrigieren Sie den erkannten Text direkt auf der Seite, dann klicken Sie auf SpeichernPDF erstellen. Die Datei wird direkt aus dem Browser über ein Standard-<a download> heruntergeladen.


Was wir nicht garantieren können — ein ehrlicher Hinweis

Wir schreiben kein „100 % Privatsphäre" auf die Startseite, denn das lässt sich unabhängig von der Umgebung des Nutzers nicht garantieren.

Browser-Erweiterungen mit weitreichenden Rechten (besonders solche mit der Berechtigung „Daten auf allen Websites lesen") können theoretisch Tab-Inhalte abgreifen. Vor der Arbeit mit vertraulichen Dokumenten ist es sinnvoll, die installierten Erweiterungen zu prüfen.

Keylogger und Schadsoftware auf dem Rechner des Nutzers liegen außerhalb unserer Kontrolle. Ist das Gerät kompromittiert, betrifft das jedes lokale Werkzeug, nicht nur ein browserbasiertes.

Die gespeicherte Datei bleibt auf Ihrer Festplatte. Ist das Gerät nicht durch Verschlüsselung geschützt, können vertrauliche Dateien bei physischem Zugriff von Dritten gelesen werden.

Wir gewährleisten die Isolation auf Ebene des Browser-Tabs. Der Rest liegt beim Nutzer.


Verarbeiten Sie sensible PDFs, ohne sie an einen Server zu senden — pdfredx.com, ohne Registrierung.

Tesseract.js 5.x im Browser: Wie Bereichs-OCR mit Textersetzung über Fabric.js funktioniert
Die Aufgabe klang geradlinig: Der Nutzer zieht ein Rechteck auf einem gescannten PDF, klickt eine Schaltfläche, und über dem Original erscheint eine bearbeitbare Textebene — genau dort, wo der unlesbare oder falsche Text stand. Kein Server, keine Datei-Uploads. So ist es gebaut.

Die Aufgabe klang geradlinig: Der Nutzer zieht ein Rechteck auf einem gescannten PDF, klickt eine Schaltfläche, und über dem Original erscheint eine bearbeitbare Textebene — genau dort, wo der unlesbare oder falsche Text stand. Kein Server, keine Datei-Uploads. So ist es gebaut.


Die architektonische Herausforderung: OCR im Browser ohne Backend

Die erste Entwurfsfrage: Was ist aufwendiger — Bilder für die OCR an einen Server zu schicken oder die Engine in den Browser zu holen?

Server-OCR löst das Rechenproblem, schafft aber ein neues: Eine Datei mit sensiblen Daten fliegt auf eine fremde Maschine, es entsteht Round-Trip-Latenz, und man braucht Infrastruktur. Für ein Werkzeug, dessen Kernversprechen Vertraulichkeit ist, passt das nicht.

Tesseract.js 5.x ist eine WebAssembly-Kompilierung der klassischen OCR-Engine Tesseract. Sie läuft direkt im Browser über Web Workers, blockiert den UI-Thread nicht und braucht keinen Server. Sprachpakete (~2,5 MB pro Stück) werden einmal heruntergeladen und zwischengespeichert. Es ist kein neuronales Netz der neuesten Generation — Tesseract arbeitet mit klassischen Segmentierungsalgorithmen, LSTM und trainierten Sprachmodellen. Es bewältigt saubere Scans gut und Handschrift oder stark komprimierte JPEGs schlecht.


Verzögertes Laden: nicht ausliefern, was nicht gebraucht wird

Tesseract.js wiegt mehrere Megabyte. Es beim Öffnen der Website zu laden, ist nicht zu rechtfertigen — die meisten Nutzer öffnen die OCR nie. Deshalb ist das Laden verzögert:

async function fabStartOCR(areaRect = null) {
  if (!window.Tesseract) {
    await new Promise((res, rej) => {
      const s  = document.createElement('script');
      s.src    = 'https://unpkg.com/tesseract.js@5/dist/tesseract.min.js';
      s.onload = res;
      // Bei einem Netzwerkfehler den defekten Tag aus dem DOM entfernen. Sonst
      // bleibt window.Tesseract undefined und das Skript dupliziert sich beim Retry.
      s.onerror = (e) => { s.remove(); rej(e); };
      document.head.appendChild(s);
    });
  }
  // ...
}

Der erste fabStartOCR()-Aufruf zieht das Skript herein, der Browser speichert es zwischen; der zweite läuft sofort.

Der heikle Punkt ist die Fehlerbehandlung. Feuert s.onerror (der Nutzer hat Netzwerkprobleme), wird das Promise abgelehnt — aber der <script>-Tag selbst bleibt im <head>. Beim nächsten Aufruf ist window.Tesseract weiterhin undefined, die Bedingung if (!window.Tesseract) also erneut wahr, und ein zweiter defekter Tag wird angehängt, dann ein dritter. Deshalb entfernt onerror das Element (s.remove()), bevor es ablehnt: Jeder Retry startet mit einem sauberen <head>.


Verkleinerung auf 1500px: kein Marketing, sondern Notwendigkeit

Gescannte Dokumente haben oft 300 DPI oder mehr. Ein A4-Blatt bei 300 DPI sind 2480×3508 Pixel. Ein Bild dieser Größe an Tesseract.js im Browser zu übergeben, braucht 300 bis 600 MB RAM allein zum Dekodieren und zum Aufbau der internen Puffer der Engine.

Auf Desktops ist das noch erträglich. Auf Mobilgeräten mit 2–4 GB geteiltem Speicher ist es ein garantierter Absturz oder ein eingefrorener Tab.

Vor der Übergabe an Tesseract wird daher nur der ausgeschnittene Bereich — die Kopie des markierten Ausschnitts, nicht die ganze Seite — verkleinert:

const MAX_SIDE = 1500;
const scale    = Math.min(1, MAX_SIDE / Math.max(imgW, imgH));
const scaledW  = Math.floor(imgW * scale);
const scaledH  = Math.floor(imgH * scale);

1500px ist ein empirisch gewählter Schwellenwert, bei dem Tesseract auf einem iPhone 12 und Android-Geräten mit 3 GB RAM stabil läuft. Die Erkennungsqualität verschlechtert sich für die meisten Scans nur geringfügig: Tesseract normalisiert das Bild intern ohnehin vor der Verarbeitung. Diese Verkleinerung betrifft nur den Ausschnitt, der in die OCR geht — das Fabric.js-Canvas, das Hintergrundbild und das exportierte PDF behalten ihre Originalauflösung.


Sprachmodelle und der kombinierte Modus

pdfredX-Nutzer arbeiten oft mit Dokumenten, in denen sich Deutsch und Englisch mischen: Verträge mit lateinischen Abkürzungen, ärztliche Befunde mit lateinischen Fachbegriffen, Finanzberichte.

Der einsprachige Modus bricht an den Übergängen zwischen den Schriften. Daher ist ein kombiniertes Modell die Voreinstellung:

const lang = currentLang === 'de' ? 'deu+eng' : 'rus+eng';
const { data } = await Tesseract.recognize(croppedCanvas, lang, { ... });

currentLang ist die Oberflächensprache der Website, die der Nutzer über die Schaltflächen RU/EN/DE wählt. Deutsche Nutzer erhalten deu+eng, alle anderen rus+eng. Es ist nicht perfekt (ein englischsprachiger Nutzer mit einem deutschen Dokument bekommt deu+eng nur, wenn er umschaltet), deckt aber 90 % der realen Fälle ab.


Der Erkennungsbereich: Koordinaten in zwei Bezugssystemen

Das ist die heikelste Stelle der Umsetzung. Wir haben zwei Maßstabsräume:

1. Das Fabric.js-Canvas — die Arbeitsgröße, an den Bildschirm skaliert 2. Das native Bild — die volle Auflösung der Originalseite

Der Nutzer zeichnet ein Rechteck im Fabric.js-Raum. Die OCR braucht die Koordinaten im Raum des Originals:

// Korrektheitsbedingung: areaRect (ein fabric.Rect) wird mit originX:'left' und
// originY:'top' erstellt, und areaRect.x/y sind die Koordinaten seiner oberen
// linken Ecke im globalen Viewport-Raum des Canvas (nicht relativ zu Parent/Gruppe).
const scNX = fabNativeW / fabBaseW;  // X-Faktor
const scNY = fabNativeH / fabBaseH;  // Y-Faktor
ocrOffX = Math.floor(areaRect.x * scNX);
ocrOffY = Math.floor(areaRect.y * scNY);
ocrW    = Math.min(Math.ceil(areaRect.w * scNX), fabNativeW - ocrOffX);
ocrH    = Math.min(Math.ceil(areaRect.h * scNY), fabNativeH - ocrOffY);

fabNativeW/H ist die Originalgröße, fabBaseW/H die Canvas-Größe. Der Ausschnitt wird aus dem Originalbild genommen, nicht aus dem skalierten — deshalb hängt die Erkennungsqualität nicht von der Größe des Browserfensters ab.

Eine wichtige Bedingung: Die Formel gilt nur, wenn areaRect mit originX: 'left' und originY: 'top' erstellt wurde (Bezugspunkt des Objekts ist die obere linke Ecke) und areaRect.x/y im globalen Viewport-Raum des Canvas gelesen werden. Verschiebt man den Bezugspunkt in die Mitte (originX: 'center') oder rechnet relativ zu einer Gruppe/einem Parent, verschieben sich ocrOffX/ocrOffY um die halbe Breite und Höhe — der Ausschnitt landet neben dem markierten Bereich.


Die Maskenebene + bearbeitbarer Text: zwei Fabric-Objekte pro Zeile

Tesseract liefert eine Struktur data.lines — ein Array von Zeilen mit Bbox-Koordinaten und erkanntem Text. Für jede Zeile wird ein Objektpaar erzeugt:

data.lines.forEach(line => {
  // Die Bbox zurück in den Canvas-Raum skalieren
  const x = (line.bbox.x0 / scNX) + areaRect.x;
  const y = (line.bbox.y0 / scNY) + areaRect.y;
  const w = (line.bbox.x1 - line.bbox.x0) / scNX;
  const h = (line.bbox.y1 - line.bbox.y0) / scNY;

  // Maske — verdeckt den Originaltext
  const rect = new fabric.Rect({
    left: x, top: y, width: w, height: h,
    fill: '#ffffff', selectable: true, evented: true,
  });

  // Bearbeitbarer Text darüber
  const itext = new fabric.IText(line.text.trim(), {
    left: x, top: y,
    fontSize: Math.round(h * 0.8),
    fill: '#000000',
    fontFamily: 'Arial, sans-serif',
    selectable: true, editable: true,
  });

  fabCanvas.add(rect);
  fabCanvas.add(itext);
});
fabCanvas.renderAll();  // erzwungenes Rendern: alle Objekte VOR dem Snapshot festschreiben
fabPushUndo();          // der ganze Block — ein Zustand im Undo-Stack

Die Reihenfolge ist hier wichtig. fabPushUndo() macht einen Momentaufnahme des Canvas-Zustands (über toJSON). Ruft man es direkt nach dem synchronen Hinzufügen der Objekte in der Schleife auf, hat Fabric.js die neuen rect und itext möglicherweise noch nicht gezeichnet — es verschiebt das Neuzeichnen auf den nächsten Frame. Deshalb erzwingen wir vor dem Snapshot fabCanvas.renderAll(): Es führt das Rendern synchron aus, und der Undo-Stack erfasst den aktuellen Zustand mit allen hinzugefügten Zeilen.

Weiß ist die Standard-Maskenfarbe. Bei Dokumenten mit farbigem Hintergrund kann der Nutzer die Farbe über die Farbpalette ändern und die OCR auf demselben Bereich erneut starten.


Die Grenzen, mit denen wir leben

Genauigkeit der Bbox-Positionierung. Tesseract bestimmt die Zeilengrenzen nicht immer präzise, besonders bei Dokumenten mit ungewöhnlichem Zeilenabstand. Manchmal ist die Bbox leicht versetzt und man muss den Textblock im Select-Modus von Hand verschieben.

Tabellen. Im Modus PAGE_SEG_MODE_AUTO segmentiert Tesseract Zeilen innerhalb von Tabellen oft falsch. Spaltenweise Auswahl und manuelle Korrektur funktionieren dort besser.

Handschrift. Wird nicht erkannt. Punkt.

Performance bei langen Dokumenten. Die OCR läuft nur auf dem markierten Bereich, nicht auf dem ganzen Dokument. Das ist eine bewusste Entscheidung — eine ganze Seite im Browser zu verarbeiten ist ohne erhebliche Verzögerungen nicht realistisch.


Testen Sie die Bereichs-OCR im Browser — pdfredx.com, ohne Registrierung, ohne Datei-Uploads auf einen Server.

🚀 OCR kostenlos starten