IRONSOFTWAREHOME
VIDEOS

Umstellung von Syncfusion OCR auf IronOCR

Kannaopat Udonpant
Kannapat Udonpant
Updated: 1. August 2026

Dieser Leitfaden führt .NET-Entwickler, die Text aus gescannten Dokumenten und PDFs extrahieren müssen, durch die vollständige Migration von Syncfusion OCRProcessor zu IronOCR for .NET. Es deckt die spezifischen Konfigurationsänderungen, Code-Neuschreibungen und Bereinigungen bei der Bereitstellung ab, die erforderlich sind, um Syncfusion.PDF.OCR.Net.Core durch das IronOcr NuGet-Paket zu ersetzen, mit besonderem Fokus darauf, das Management der tessdata-Dateien und die Konfiguration des Tesseract-Binärpfads zu eliminieren, die jede Syncfusion OCR-Bereitstellung erfordert.

Warum von Syncfusion OCRmigrieren?

Syncfusion OCR ist ein Tesseract-Wrapper, der in eine Suite mit 1.600 Komponenten eingebettet ist. Für Teams, deren einzige Anforderung die Textextraktion ist, verursacht diese Architektur Reibungsverluste auf jeder Ebene: bei der Einrichtung, der Bereitstellung, der Wartung und der Lizenzierung.

Der tessdata-Ordner folgt jeder Umgebung. Jede Entwicklerarbeitsstation, jedes CI-Laufwerk, jeder Staging-Server und jeder Produktionscontainer benötigt ein tessdata-Verzeichnis mit .traineddata Dateien für jede Sprache, die die Anwendung verwendet. Allein die englische Version ist 23 MB groß für das Standardmodell bzw. 94 MB für das beste LSTM-Modell. Eine Anwendung in fünf Sprachen erhöht die Größe jedes Deployment-Artefakts um 100–500 MB. Dieser Ordner muss unter dem genauen Pfad existieren, den der OCRProcessor Konstruktor erwartet, oder die Anwendung wirft beim Start sofort eine Ausnahme. Dies ist keine einmalige Einrichtungskosten — es entstehen wiederkehrende Betriebskosten, die auftreten, wenn immer eine neue Umgebung bereitgestellt wird.

Tesseract-Binärpfadkonfiguration bricht über Umgebungen hinweg. Der OCRProcessor Konstruktor benötigt einen Pfad zum tessdata-Verzeichnis, der auf jeder Zielplattform korrekt aufgelöst werden muss. Der Pfad, der auf einer Windows-Entwicklermaschine funktioniert (@"tessdata/"), schlägt in einem Linux-Container fehl, es sei denn, die Bereitstellungspipeline kopiert den Ordner ausdrücklich. Docker-Image-Builds müssen eine COPY tessdata/ /app/tessdata/ Schicht einschließen. CI-Pipelines müssen die Downloads von tessdata automatisieren. In luftgesicherten Umgebungen muss die Verteilung von Binärdateien getrennt von der Wiederherstellung von NuGet-Paketen verwaltet werden. Jede Umgebung birgt ein neues Risiko für eine Pfadinkongruenz, die zu einem stillen OCR-Fehler oder einer Laufzeitausnahme führt.

Die auf PDF zentrierte Architektur erzeugt einen Konvertierungsaufwand für Bildinput. Syncfusions OCRProcessor akzeptiert PdfLoadedDocument Objekte, keine Bilddateien. Das Extrahieren von Text aus einem JPG erfordert die Erstellung eines PdfDocument, das Hinzufügen einer Seite, das Zeichnen des Bildes darauf, das Speichern in einem MemoryStream, das erneute Laden als PdfLoadedDocument und dann das Ausführen von OCR — neun Operationen vor dem Text-Erkennungsschritt. Diese Rundreise fügt jeder bildorientierten OCR-Arbeitsablauf Ausführungsoverhead und Codekomplexität hinzu.

Die Lizenzierung der Suite führt zu wachstumsabhängigen Compliance-Ereignissen. Die Syncfusion-Community-Lizenz setzt voraus, dass weniger als fünf Entwickler, weniger als zehn Mitarbeiter, ein Jahresumsatz von weniger als 1 Mio. US-Dollar und eine externe Finanzierung von weniger als 3 Mio. US-Dollar über die gesamte Laufzeit vorliegen – wobei alle diese Bedingungen gleichzeitig erfüllt sein müssen. Bei Überschreitung eines Schwellenwerts erlischt die Lizenz sofort und erfordert ein kommerzielles Upgrade zum Preis von 995–1.595 US-Dollar pro Entwickler und Jahr. Ein Team aus fünf Entwicklern, das Syncfusion OCRseit drei Jahren kommerziell nutzt, zahlt 14.925–23.925 US-Dollar für dieselbe Textextraktionsfunktion, die IronOCR Professional für einmalig 2.999 US-Dollar bietet.

Das Fehlen einer integrierten Vorverarbeitung bedeutet externe Abhängigkeiten für Scans mit schlechter Qualität. Tesseract liefert ohne Vorverarbeitung schlechte Ergebnisse bei gedrehten, verrauschten oder kontrastarmen Bildern. Syncfusion stellt keine Vorverarbeitungs-API bereit. Entwickler, die eine Entzerrung, Rauschunterdrückung oder Kontrastkorrektur benötigen, müssen eine separate Bildbearbeitungsbibliothek (System.Drawing, SkiaSharp, ImageSharp) hinzufügen, die Filter implementieren und die Ausgabe in den PDF-Roundtrip einbinden, bevor OCR beginnen kann. Das ist eine Abhängigkeit von Drittanbietern und bedeutet 20–40 zusätzliche Codezeilen für eine Funktion, die IronOCR als integrierte Methoden bereitstellt.

Nur OCR wird benötigt, aber die gesamte Suite ist lizenziert. Syncfusion zieht Syncfusion.Pdf.Net.Core, Syncfusion.Compression.Net.Core und andere transitive Abhängigkeiten ein, unabhängig davon, welche Funktionen tatsächlich verwendet werden. Für Teams, die einen fokussierten Dokumentverarbeitungsdienst aufbauen, hat dieser Abhängigkeitsgraph erhebliches Gewicht – in Bezug auf Build-Zeit, Container-Image-Größe und Lizenzkosten – für Komponenten, die für die Textextraktion keine Relevanz haben.

Das grundsätzliche Problem

Syncfusion OCR erfordert die Konfiguration eines tessdata-Dateisystempfads, bevor ein OCR-Aufruf möglich ist:

// Syncfusion: tessdata path required — fails in any environment where this path is wrong
private const string TessDataPath = @"tessdata/";

using var document = new PdfLoadedDocument("scanned-invoice.pdf");
using var processor = new OCRProcessor(TessDataPath);  // throws if path does not resolve
processor.Settings.Language = Languages.English;
processor.PerformOCR(document);

var text = new StringBuilder();
foreach (PdfLoadedPage page in document.Pages)
    text.AppendLine(page.ExtractText());
C#

IronOCR erfordert keine Pfadkonfiguration. Die Sprachdaten sind im Paket enthalten:

// IronOCR: no tessdata path, no path configuration, no folder to deploy
var text = new IronTesseract().Read("scanned-invoice.pdf").Text;
C#

##IronOCR vs. Syncfusion OCR: Funktionsvergleich

Die folgende Tabelle enthält die Funktionen, die für Teams, die von Syncfusion OCRmigrieren, am wichtigsten sind.

FeatureSyncfusion OCRIronOCR
NuGet-PaketSyncfusion.PDF.OCR.Net.Core (Suite)IronOcr (alleinstehend)
tessdata erforderlichJa – manueller Download und PfadkonfigurationNein – intern gebündelt
Direkte Bild-OCRNein – erfordert eine PDF-Konvertierung hin und zurückJa — LoadImage() oder Pfad direkt
Direkte PDF-OCRJa – primäres EingabemodellJa – erstklassiger Support
Automatische VorverarbeitungNein – externe Bibliothek erforderlichJa – Entzerren, Rauschunterdrückung, Kontrast, Binärisierung
Durchsuchbare PDF-AusgabeJa — speichern nach PerformOCR()Ja — result.SaveAsSearchablePdf()
Unterstützte Sprachen60+ über manuellen Tessdata-DownloadMehr als 125 Sprachpakete via NuGet
Mehrsprachige SimultanübertragungJa — bitweise Flags auf Languages enumJa — AddSecondaryLanguage()
Regionsbasierte OCRNeinJa — CropRectangle
Barcode-LesungNeinJa — ocr.Configuration.ReadBarCodes = true
Strukturierte AusgabeNur Seiten über page.ExtractText()Seiten, Absätze, Zeilen, Wörter, Zeichen mit Koordinaten
KonfidenzbewertungNeinJa — result.Confidence und pro Wortschätzung
hOCR-ExportNeinJa
Stream-EingabeNur über PDF-StreamDirekte Stream-Eingabe für Bilder und PDFs
Thread-SicherheitNicht als threadsicher dokumentiertVollständig — eine IronTesseract Instanz pro Thread
PlattformübergreifendJa – aber tessdata muss auf jeder Plattform aufgelöst werdenJa – einzelnes NuGet, keine Pfadkonfiguration
Docker-BereitstellungErfordert Tessdata-Layer im BildEin einziges Paket, keine zusätzlichen Ebenen
LizenzierungsmodellJährliches Suite-Abonnement (995–1.595 $/Entwickler/Jahr)Perpetual (Lite $999, Pro $1,499, Enterprise $2,999)
Einschränkungen der Community-LizenzUmsatz-, Mitarbeiter- und Finanzierungsgrenzen mit PrüfungsrechtenKeine Einschränkungen bei der kostenlosen Testversion
OCR-EngineTesseract 5 (Standard-Wrapper)Optimiertes Tesseract 5 mit verbesserter Genauigkeit

Schnellstart: Migration von Syncfusion OCRzu IronOCR

Schritt 1: Ersetzen des NuGet-Pakets

Entfernen Sie Syncfusion OCRund alle anderen Syncfusion-Pakete, die ausschließlich wegen der OCR-Funktion hinzugefügt wurden:

dotnet remove package Syncfusion.PDF.OCR.Net.Core
dotnet remove package Syncfusion.Pdf.Net.Core
dotnet remove package Syncfusion.Compression.Net.Core
SHELL

Installieren Sie IronOCR über NuGet :

dotnet add package IronOcr

Schritt 2: Namespaces aktualisieren

Ersetzen Sie die Syncfusion-Namespace-Importe durch den einzigen IronOCR-Namespace:

// Before (Syncfusion)
using Syncfusion.OCRProcessor;
using Syncfusion.PDF;
using Syncfusion.Pdf.Parsing;

// After (IronOCR)
using IronOcr;
C#

Schritt 3: Lizenz initialisieren

Fügen Sie die Lizenzinitialisierung einmalig beim Anwendungsstart vor jedem OCR-Aufruf hinzu:

IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY";

Eine Registrierung für die Suite ist nicht erforderlich. Eine Überprüfung der Berechtigung für eine Community-Lizenz ist nicht erforderlich. Der Schlüssel ist eine einfache Zeichenfolge, die einer statischen Eigenschaft zugewiesen ist.

Beispiele für die Code-Migration

Tessdata-Pfadeliminierung und OCR-Initialisierung

Syncfusion Codebasen beinhalten häufig tessdata-Validierungslogik — Überprüfung, dass das Verzeichnis existiert und dass die erforderlichen .traineddata Dateien vorhanden sind, bevor versucht wird, OCR durchzuführen. Dieser Schutzcode existiert, weil eine fehlende Tessdata-Datei eine Laufzeitausnahme verursacht und Produktionsstörungen aufgrund fehlender Sprachdateien so häufig vorkommen, dass Teams defensive Prüfungen schreiben.

Syncfusion OCR-Ansatz:

using Syncfusion.OCRProcessor;
using Syncfusion.Pdf.Parsing;

public class DocumentOcrService
{
    // Path hardcoded — different on every deployment target
    private const string TessDataPath = @"tessdata/";

    private bool ValidateTessdataBeforeUse(string languageCode)
    {
        // Guard required because missing files cause runtime exceptions
        if (!Directory.Exists(TessDataPath))
            throw new InvalidOperationException(
                "tessdata directory not found. Download from github.com/tesseract-ocr/tessdata_best");

        string filePath = Path.Combine(TessDataPath, $"{languageCode}.traineddata");
        if (!File.Exists(filePath))
            throw new InvalidOperationException(
                $"{languageCode}.traineddata not found — file must be downloaded manually");

        return true;
    }

    public string ExtractText(string pdfPath, string languageCode = "eng")
    {
        ValidateTessdataBeforeUse(languageCode);  // defensive check before every call

        using var document = new PdfLoadedDocument(pdfPath);
        using var processor = new OCRProcessor(TessDataPath);
        processor.Settings.Language = Languages.English;
        processor.PerformOCR(document);

        var sb = new StringBuilder();
        foreach (PdfLoadedPage page in document.Pages)
            sb.AppendLine(page.ExtractText());

        return sb.ToString();
    }
}
C#

IronOCR Ansatz:

using IronOcr;

public class DocumentOcrService
{
    //Neintessdata path — no validation logic — no defensive checks
    public string ExtractText(string pdfPath)
    {
        return new IronTesseract().Read(pdfPath).Text;
    }
}
C#

Die gesamte ValidateTessdataBeforeUse Methode und die TessDataPath Konstante werden gelöscht. Die Schritte der Bereitstellungs-Pipeline, die den Ordner "tessdata" kopieren, werden entfernt. Das CI-Skript, das .traineddata Dateien herunterlädt, wird entfernt. Die Dockerfile-Ebene, die tessdata in das Container-Image kopiert, wird entfernt. Keiner dieser Code muss ersetzt werden – er ist einfach nicht mehr erforderlich. Die IronTesseract-Einrichtungsanleitung behandelt alle verfügbaren Initialisierungsoptionen, falls eine Konfiguration erforderlich ist, die über die Standardeinstellungen hinausgeht.

Pipeline zur Erstellung durchsuchbarer PDF-Dateien

Syncfusions durchsuchbare PDF-Ausgabe funktioniert durch Aufrufen von PerformOCR() auf einem geladenen Dokument, das eine unsichtbare Textschicht an Ort und Stelle hinzufügt, und dann das modifizierte Dokument in einem Stream speichert. Das Muster erfordert die Verwaltung von zwei Datenströmen – dem Eingabe- und dem Ausgabestrom – und die OCR- und Speicherschritte sind separate Operationen auf demselben veränderbaren Dokumentobjekt.

Syncfusion OCR-Ansatz:

using Syncfusion.OCRProcessor;
using Syncfusion.Pdf.Parsing;

public class SearchablePdfService
{
    private const string TessDataPath = @"tessdata/";

    public void ConvertToSearchable(string inputPdfPath, string outputPdfPath)
    {
        // Load document — mutable: PerformOCR modifies it in place
        using var document = new PdfLoadedDocument(inputPdfPath);
        using var processor = new OCRProcessor(TessDataPath);

        processor.Settings.Language = Languages.English;

        // Step 1: OCR modifies the document object
        processor.PerformOCR(document);

        // Step 2: Save the modified document to a separate output file
        using var outputStream = new FileStream(outputPdfPath, FileMode.Create, FileAccess.Write);
        document.Save(outputStream);
    }

    public byte[] ConvertToSearchableBytes(string inputPdfPath)
    {
        using var document = new PdfLoadedDocument(inputPdfPath);
        using var processor = new OCRProcessor(TessDataPath);

        processor.Settings.Language = Languages.English;
        processor.PerformOCR(document);

        using var outputStream = new MemoryStream();
        document.Save(outputStream);
        return outputStream.ToArray();
    }
}
C#

IronOCR Ansatz:

using IronOcr;

public class SearchablePdfService
{
    public void ConvertToSearchable(string inputPdfPath, string outputPdfPath)
    {
        var result = new IronTesseract().Read(inputPdfPath);
        result.SaveAsSearchablePdf(outputPdfPath);
    }

    public byte[] ConvertToSearchableBytes(string inputPdfPath)
    {
        using var input = new OcrInput();
        input.LoadPdf(inputPdfPath);

        var result = new IronTesseract().Read(input);

        // SaveAsSearchablePdf also accepts a MemoryStream
        using var ms = new MemoryStream();
        result.SaveAsSearchablePdf(ms);
        return ms.ToArray();
    }
}
C#

Das veränderbare Dokumentmodell, das von Syncfusion verwendet wird — bei dem PerformOCR() das geladene Dokument an Ort und Stelle modifiziert, bevor gespeichert wird — wird durch das unveränderliche Lese-dann-Ausgabe-Muster von IronOCR ersetzt. Das OcrResult-Objekt hält den erkannten Text und kann als durchsuchbares PDF gespeichert, als Klartext exportiert oder als strukturierte Daten durchlaufen werden, alles aus demselben Ergebnis. Das durchsuchbare PDF-Handbuch und das durchsuchbare PDF-Beispiel behandeln zusätzliche Ausgabeoptionen, einschließlich Einstellungen zur PDF/A-Konformität.

Stream-basierte PDF-OCR-Pipeline

Produktionsdienste, die PDF-Dokumente per HTTP-Upload, Message-Queue oder Blob-Speicher empfangen, arbeiten in der Regel mit Streams statt mit Dateipfaden. Syncfusion akzeptiert Streams über PdfLoadedDocument, aber die tessdata-Pfadbeschränkung gilt weiterhin — der tessdata-Ordner muss auf dem Server existieren, wo der Stream verarbeitet wird.

Syncfusion OCR-Ansatz:

using Syncfusion.OCRProcessor;
using Syncfusion.Pdf.Parsing;

public class StreamOcrService
{
    private const string TessDataPath = @"tessdata/";

    public string ExtractFromStream(Stream pdfStream)
    {
        // Stream input works, but tessdata path constraint remains
        using var document = new PdfLoadedDocument(pdfStream);
        using var processor = new OCRProcessor(TessDataPath);

        processor.Settings.Language = Languages.English;
        processor.PerformOCR(document);

        var sb = new StringBuilder();
        foreach (PdfLoadedPage page in document.Pages)
            sb.AppendLine(page.ExtractText());

        return sb.ToString();
    }

    public async Task<string> ExtractFromStreamAsync(Stream pdfStream)
    {
        //Neinnative async — must wrap in Task.Run
        return await Task.Run(() => ExtractFromStream(pdfStream));
    }
}
C#

IronOCR Ansatz:

using IronOcr;

public class StreamOcrService
{
    public string ExtractFromStream(Stream pdfStream)
    {
        using var input = new OcrInput();
        input.LoadPdf(pdfStream);    // accepts Stream directly

        return new IronTesseract().Read(input).Text;
    }

    public async Task<string> ExtractFromStreamAsync(Stream pdfStream)
    {
        using var input = new OcrInput();
        input.LoadPdf(pdfStream);

        var ocr = new IronTesseract();
        var result = await ocr.ReadAsync(input);   // native async support
        return result.Text;
    }
}
C#

Die LoadPdf() Methode auf OcrInput akzeptiert direkt ein Stream, ohne dass ein Zwischen-Dateischreiben erforderlich ist.IronOCR stellt auch eine ReadAsync() Methode für die native asynchrone Integration zur Verfügung — kein Task.Run() Wrapper wird benötigt. Für Web-API-Controller, Azure Functions und andere asynchrone Servicemuster ist dies eine ideale API-Lösung. Das Handbuch zur Stream-Eingabe dokumentiert alle Optionen zum Laden von Streams, einschließlich Bild-Streams und mehrseitiger TIFF-Streams. Der Leitfaden zu asynchroner OCR behandelt die Unterstützung von Abbruch-Tokens und Fortschritts-Callbacks für lang andauernde Dokumentenstapel.

Strukturierte Absätze und Wort-Extraktion

Syncfusions Textextraktionsmodell bietet zwei Ebenen: Zusammengesetzter Text für das gesamte Dokument über result.Text, und pro Seiten-Text durch Iteration von page.ExtractText(). Es gibt keine Unterseitenstruktur – keine WORD-Koordinaten, keine Absatzgrenzen, keine Konfidenzwerte pro Token. Anwendungen, die bestimmte Felder anhand ihrer Position lokalisieren oder Token mit geringer Konfidenz filtern müssen, müssen ihre eigene Parsing-Logik auf der Grundlage der verketteten Zeichenfolge implementieren.

Syncfusion OCR-Ansatz:

using Syncfusion.OCRProcessor;
using Syncfusion.Pdf.Parsing;

public class StructuredExtractionService
{
    private const string TessDataPath = @"tessdata/";

    public Dictionary<int, string> ExtractPerPage(string pdfPath)
    {
        var pageTexts = new Dictionary<int, string>();

        using var document = new PdfLoadedDocument(pdfPath);
        using var processor = new OCRProcessor(TessDataPath);

        processor.Settings.Language = Languages.English;
        processor.PerformOCR(document);

        // Page-level is the finest granularity available
        int pageNum = 1;
        foreach (PdfLoadedPage page in document.Pages)
        {
            pageTexts[pageNum] = page.ExtractText();
            pageNum++;
        }

        return pageTexts;
        //Neinword coordinates, no paragraph boundaries, no per-token confidence
    }
}
C#

IronOCR Ansatz:

using IronOcr;

public class StructuredExtractionService
{
    public void ExtractWithStructure(string pdfPath)
    {
        var result = new IronTesseract().Read(pdfPath);

        Console.WriteLine($"Overall confidence: {result.Confidence}%");

        foreach (var page in result.Pages)
        {
            Console.WriteLine($"Page {page.PageNumber}: {page.Words.Length} words");

            foreach (var paragraph in page.Paragraphs)
            {
                Console.WriteLine($"  Paragraph at ({paragraph.X}, {paragraph.Y}):");
                Console.WriteLine($"  {paragraph.Text}");
            }
        }
    }

    public IEnumerable<string> ExtractHighConfidenceWords(string pdfPath, int minConfidence = 80)
    {
        var result = new IronTesseract().Read(pdfPath);

        // Per-word confidence filtering — not possible with Syncfusion's page-level model
        return result.Pages
            .SelectMany(p => p.Words)
            .Where(w => w.Confidence >= minConfidence)
            .Select(w => w.Text);
    }
}
C#

Das strukturierte Ausgabemodell stellt Absätze, Zeilen, WORDs und Zeichen mit Begrenzungsrahmenkoordinaten und individuellen Konfidenzwerten dar. Dies ist besonders nützlich für die Extraktion von Rechnungsfeldern, das Parsen von Formularen und die Dokumentenklassifizierung – Workflows, bei denen es ebenso wichtig ist zu wissen, wo Text auf der Seite erscheint, wie was der Text aussagt. Der Leitfaden zu den Leseergebnissen und die OcrResult-API Referenz dokumentieren den vollständigen Objektgraphen.

Stapelverarbeitung von Dokumenten mit paralleler Ausführung

Hochvolumige OCR-Dienste verarbeiten Dutzende oder Hunderte von Dokumenten gleichzeitig. Syncfusion dokumentiert OCRProcessor nicht als threadsicher, was sequenzielle Verarbeitung erzwingt oder erfordert, dass Entwickler ihren eigenen Instanzpool implementieren.IronOCR Instanzen sind sicher pro Thread zu erstellen, was eine direkte Verwendung mit Parallel.ForEach oder PLINQ ohne zusätzliche Synchronisation ermöglicht.

Syncfusion OCR-Ansatz:

using Syncfusion.OCRProcessor;
using Syncfusion.Pdf.Parsing;

public class BatchOcrService
{
    private const string TessDataPath = @"tessdata/";

    public Dictionary<string, string> ProcessBatch(IEnumerable<string> pdfPaths)
    {
        var results = new Dictionary<string, string>();

        // Sequential processing — OCRProcessor thread safety not guaranteed
        foreach (var path in pdfPaths)
        {
            using var document = new PdfLoadedDocument(path);
            using var processor = new OCRProcessor(TessDataPath);

            processor.Settings.Language = Languages.English;
            processor.PerformOCR(document);

            var sb = new StringBuilder();
            foreach (PdfLoadedPage page in document.Pages)
                sb.AppendLine(page.ExtractText());

            results[path] = sb.ToString();
        }

        return results;
    }
}
C#

IronOCR Ansatz:

using IronOcr;

public class BatchOcrService
{
    public Dictionary<string, string> ProcessBatch(IEnumerable<string> pdfPaths)
    {
        var results = new ConcurrentDictionary<string, string>();

        // Parallel processing — IronTesseract is safe per-thread
        Parallel.ForEach(pdfPaths, pdfPath =>
        {
            var ocr = new IronTesseract();   // one instance per thread
            var text = ocr.Read(pdfPath).Text;
            results[pdfPath] = text;
        });

        return new Dictionary<string, string>(results);
    }
}
C#

Die Erstellung einer IronTesseract Instanz pro Thread ist das dokumentierte Muster für parallele Verarbeitung. Kein gemeinsamer Status, keine Lock-Konflikte, keine Infrastruktur für Instanz-Pooling erforderlich. Das Multithreading-Beispiel zeigt Durchsatz-Benchmarks für typische Dokumentenstapelgrößen, und der Leitfaden zur Geschwindigkeitsoptimierung behandelt Konfigurationsoptionen der Engine für latenzempfindliche Workloads.

Syncfusion OCRAPI zu IronOCR Mapping-Referenz

Syncfusion OCRIronOCR-ÄquivalentNotizen
Syncfusion.PDF.OCR.Net.CoreIronOcrNuGet-Paket ersetzen
Syncfusion.OCRProcessorIronOcrEinzelner Namensraum
Syncfusion.PdfEntfernenNicht mehr benötigt
Syncfusion.Pdf.ParsingEntfernenNicht mehr benötigt
SyncfusionLicenseProvider.RegisterLicense()IronOcr.License.LicenseKey =String-Zuweisung, keine Suite-Registrierung
new OCRProcessor(tessdataPath)new IronTesseract()Kein Pfadargument
PdfLoadedDocument(filePath)Pfad direkt an ocr.Read(path) übergebenOder OcrInput mit LoadPdf() verwenden
PdfLoadedDocument(stream)input.LoadPdf(stream)Die Stream-Unterstützung erfolgt direkt
processor.Settings.Language = Languages.Englishocr.Language = OcrLanguage.EnglishOcrLanguage enum
Languages.English | Languages.Frenchocr.Language = OcrLanguage.English; ocr.AddSecondaryLanguage(OcrLanguage.French)Additives Muster ersetzt bitweise Flags
processor.PerformOCR(document)ocr.Read(input)Gibt OcrResult direkt zurück
page.ExtractText()result.Text oder result.Pages[i].TextKeine Schleife für den vollständigen Text erforderlich
document.Pages Iterationresult.Pages[] ArrayEnthält Absätze, Wörter, Zeichen
document.Save(outputStream) nach OCRresult.SaveAsSearchablePdf(path)Spezielle Methode
Tessdata-ValidierungslogikVollständig entfernenKeine Tessdata zur Validierung
Manuelle tessdata-PfadkonstanteVollständig entfernenNicht erforderlich für IronOCR
PdfBitmap Bild-zu-PDF-Konvertierunginput.LoadImage(imagePath)Kein PDF-Roundtrip für Bild-OCR
Keine Vorverarbeitungs-APIinput.Deskew(), input.DeNoise(), input.Contrast()Eingebaut in OcrInput

Gängige Migrationsprobleme und Lösungen

Problem 1: Tessdata-Verzeichnis nach Paketwechsel nicht gefunden

Syncfusion OCR: Die Validierungsprüfung des Verzeichnisses "tessdata" wurde als Schutzmaßnahme beim Start oder pro Aufruf geschrieben. Nach dem Entfernen von Syncfusion und Installieren von IronOCR kompiliert dieser Validierungscode immer noch (da er System.IO verwendet, nicht Syncfusion-Namespaces), aber jetzt schützt er eine Operation, die nicht mehr existiert. Es dort zu belassen, ist toter Code, der zukünftige Entwickler verwirren kann.

Lösung: Löschen Sie die gesamte tessdata-Validierungslogik vollständig. Entfernen Sie die TessDataPath Konstante, alle Directory.Exists(TessDataPath) Prüfungen, alle File.Exists(Path.Combine(TessDataPath, ...)) Prüfungen und alle Startvalidierungsmethoden.IronOCR löst keine Ausnahmen im Zusammenhang mit Tessdata aus, da keine Tessdata fehlen können:

// Delete these entirely — they have no equivalent in IronOCR
// private const string TessDataPath = @"tessdata/";
// private bool ValidateTessdata() { ... }

// The only error handling needed after migration:
try
{
    return new IronTesseract().Read(pdfPath).Text;
}
catch (FileNotFoundException)
{
    throw new ArgumentException($"PDF file not found: {pdfPath}");
}
C#

Problem 2: Sprachdateien zur Laufzeit nicht verfügbar

Syncfusion OCR: Sprach.traineddata Dateien wurden als Dateisystem-Artefakte bereitgestellt, in der CopyToOutputDirectory im .csproj markiert und vom Build-System kopiert. Nach dem Entfernen des tessdata-Ordners aus dem Projekt können sprachbezogene CI-Schritte und .csproj Einträge noch auf die gelöschten Dateien verweisen, was zu Bauwarnungen oder Pipeline-Fehlern führt.

Lösung: Entfernen Sie alle tessdata-bezogenen Einträge aus .csproj Dateien und CI-Pipeline-Definitionen. Installieren Sie Sprachpakete stattdessen als NuGet-Pakete:

# Languages install as NuGet packages — no manual file management
dotnet add package IronOcr.Languages.French
dotnet add package IronOcr.Languages.German
dotnet add package IronOcr.Languages.ChineseSimplified
SHELL
// Language configuration after migration
var ocr = new IronTesseract();
ocr.Language = OcrLanguage.French;
ocr.AddSecondaryLanguage(OcrLanguage.German);
var result = ocr.Read("multilingual-report.pdf");
C#

Der Leitfaden für mehrere Sprachen deckt die Installation von Sprachpaketen und die OcrLanguage enum-Werte für alle 125+ unterstützten Sprachen ab.

Problem 3: Die Byte-Reihenfolge bei der Ausgabe durchsuchbarer PDF-Dateien weicht ab

Syncfusion OCR: Das durchsuchbare PDF wurde erstellt, indem document.Save(stream) aufgerufen wurde, nachdem PerformOCR() das Dokument verändert hat. Einige nachgelagerte Verbraucher des Byte-Arrays wurden möglicherweise so programmiert, dass sie die spezifische PDF-Struktur, Metadatenfelder oder den Producer-String von Syncfusion erwarten.

Lösung: IronOCRs SaveAsSearchablePdf() erstellt ein Standard-PDF mit einer Textschicht. Testen Sie die Ausgabe mit Ihren nachgelagerten Anwendungen (PDF-Viewer, Suchindizes, Archivierungssysteme), um die Kompatibilität zu überprüfen. Falls eine byteweise identische Ausgabe erforderlich ist, ist ein Übergangstest zum Vergleich der Text-Extrahierbarkeit (nicht der Roh-Bytes) das geeignete Abnahmekriterium:

// Verify the searchable PDF contains the expected text
var result = new IronTesseract().Read("scanned.pdf");
result.SaveAsSearchablePdf("output-searchable.pdf");

// Validation: confirm text layer is present and readable
var verificationText = new IronTesseract().Read("output-searchable.pdf").Text;
Assert.True(verificationText.Contains("expected content"));
C#

Problem 4: Die Größe des Docker-Images nimmt nach einem Migrationsversuch zu

Syncfusion OCR: Einige Teams versuchen die Migration, lassen dabei aber tessdata-Dateien als Vorsichtsmaßnahme während der Tests im Docker-Image. Dies führt dazu, dass sowohl die Tessdata-Ebene als auch das IronOCR-Paket im Bild vorhanden sind, was die Bildgröße unnötig vergrößert.

Lösung: Löschen Sie die tessdata COPY Ebene aus der Dockerfile, bevor das migrierte Image erstellt wird. Das IronOCR-Paket ist in sich geschlossen. Der Docker-Bereitstellungsleitfaden enthält verifizierte Basis-Images und Konfigurationen für Alpine-, Debian- und Ubuntu-Ziele:

# Entfernen this layer entirely after migration
# COPY tessdata/ /app/tessdata/

#IronOCR requires only the standard .NET runtime
FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS runtime
WORKDIR /app
COPY --from=build /app/publish .
ENTRYPOINT ["dotnet", "YourService.dll"]
Text

Problem 5: Das zweistufige PerformOCR-/ExtractText-Muster hat keine direkte Entsprechung

Syncfusion OCR: Einige aufgerufene Codes übergeben einen PdfLoadedDocument Verweis zwischen Methoden — eine Methode ruft PerformOCR() auf und eine andere ruft ExtractText() auf — und stützen sich dabei auf die zustandsbehaftete Änderung des Dokumentobjekts. Dieses Muster existiert in IronOCR nicht, da Read() ein selbst enthaltenes Ergebnisobjekt zurückgibt.

Lösung: Umstrukturieren Sie alle geteilten OCR-/Extraktionsmuster in eine einzelne Methode, die einen Dateipfad oder Stream akzeptiert und ein OcrResult zurückgibt. Das Ergebnisobjekt enthält alles – Text, Seiten, Absätze, Konfidenzwerte und die Möglichkeit, als durchsuchbares PDF zu speichern:

// Replace split PerformOCR / ExtractText pattern
public OcrResult ProcessDocument(string pdfPath)
{
    // One call, immutable result, all data available
    return new IronTesseract().Read(pdfPath);
}

// Callers decide what they need from the result
var result = service.ProcessDocument("contract.pdf");
var fullText = result.Text;
var confidence = result.Confidence;
result.SaveAsSearchablePdf("contract-searchable.pdf");
C#

Problem 6: Registrierungscode für die Community-Lizenz bleibt nach der Migration erhalten

Syncfusion OCR: Der Syncfusion.Licensing.SyncfusionLicenseProvider.RegisterLicense() Aufruf beim Start der Anwendung registriert die Suite-Lizenz. Dieser Aufruf befindet sich oft in Program.cs, Startup.cs oder einem statischen Initialisierer. Nach dem Entfernen der Syncfusion-Pakete verursacht diese Zeile einen Kompilierungsfehler.

Lösung: Löschen Sie den SyncfusionLicenseProvider.RegisterLicense() Aufruf und ersetzen Sie ihn durch die IronOCR Lizenzinitialisierung. Entfernen Sie außerdem jegliche Logik zur Berechtigung für Community-Lizenzen, Verweise auf Compliance-Dokumentation oder Kommentare zu Umsatz- und Mitarbeiterschwellenwerten – keines dieser Konzepte trifft auf IronOCR zu:

// Entfernen (causes compile error after package removal)
// Syncfusion.Licensing.SyncfusionLicenseProvider.RegisterLicense("SYNCFUSION-KEY");

// Add at application startup
IronOcr.License.LicenseKey = "YOUR-IRONOCR-KEY";
C#

Syncfusion OCR-Migrations-Checkliste

Vor der Migration

Überprüfen Sie den Code, um alle Verwendungen von Syncfusion OCRzu identifizieren, bevor Sie Änderungen vornehmen:

# Find all Syncfusion namespace imports
grep -r "using Syncfusion" --include="*.cs" .

# Find OCRProcessor usage
grep -r "OCRProcessor\|PerformOCR\|PdfLoadedDocument\|ExtractText" --include="*.cs" .

# Find tessdata path references
grep -r "TessDataPath\|tessdata\|traineddata" --include="*.cs" .

# Find Syncfusion license registration
grep -r "SyncfusionLicenseProvider\|RegisterLicense" --include="*.cs" .

# Find csproj tessdata copy rules
grep -r "tessdata\|traineddata" --include="*.csproj" .

# Find Dockerfile tessdata layers
grep -r "tessdata" Dockerfile* docker-compose*.yml .
SHELL

Erstellen Sie eine Bestandsaufnahme der Ergebnisse, bevor Sie Code schreiben. Beachten Sie, welche Dateien OCR-Aufrufe enthalten, welche eine Tessdata-Validierung beinhalten und welche Pipeline-Definitionen auf den Tessdata-Ordner verweisen.

Code-Migration

  1. Entfernen Sie Syncfusion.PDF.OCR.Net.Core, Syncfusion.Pdf.Net.Core und verwandte Pakete aus allen .csproj Dateien.
  2. Führen Sie dotnet add package IronOcr in jedem Projekt aus, das OCR durchführt.
  3. Installieren Sie über NuGet Sprachpakete für alle nicht englischen verwendeten Sprachen: dotnet add package IronOcr.Languages.[Language].
  4. Löschen Sie die private const string TessDataPath Konstante aus allen Serviceklassen.
  5. Löschen Sie alle tessdata-Validierungsmethoden (ValidateTessdata() und ähnliche Schutzmechanismen).
  6. Ersetzen Sie SyncfusionLicenseProvider.RegisterLicense() mit IronOcr.License.LicenseKey = "YOUR-KEY" beim Start der Anwendung.
  7. Ersetzen Sie using Syncfusion.OCRProcessor; using Syncfusion.PDF; using Syncfusion.Pdf.Parsing; with using IronOcr;.
  8. Ersetzen Sie jede new OCRProcessor(TessDataPath) Initialisierung durch new IronTesseract().
  9. Ersetzen Sie PdfLoadedDocument + processor.PerformOCR() + page.ExtractText() Ketten mit ocr.Read(path).Text.
  10. Ersetzen Sie die bitweisen Sprachflags von Syncfusion (Languages.English |Languages.French plus ocr.AddSecondaryLanguage() Aufrufe.
  11. Ersetzen Sie document.Save(stream) nach PerformOCR() mit result.SaveAsSearchablePdf(path) für durchsuchbare PDF-Ausgabe.
  12. Ersetzen Sie Bild-zu-PDF-Konvertierungsrundfahrten mit direktem input.LoadImage(imagePath) oder ocr.Read(imagePath).
  13. Entfernen Sie tessdata CopyToOutputDirectory Einträge aus allen .csproj Dateien.
  14. Entfernen Sie die Schritte zum Herunterladen von tessdata aus allen CI/CD-Pipeline-Definitionen.
  15. Entfernen Sie tessdata COPY Schichten aus allen Dockerfiles.

Nach der Migration

  • Überprüfen Sie, ob die PDF-OCR den erwarteten Textinhalt anhand derselben Beispieldokumente liefert, die vor der Migration verwendet wurden.
  • Stellen Sie sicher, dass die Bild-OCR (JPG, PNG, BMP) ohne vorherige PDF-Konvertierung funktioniert.
  • Stellen Sie sicher, dass mehrsprachige Dokumente mithilfe der installierten NuGet-Sprachpakete korrekt erkannt werden.
  • Testen Sie die durchsuchbare PDF-Ausgabe, indem Sie die generierte Datei in einem PDF-Viewer öffnen und überprüfen, ob die Textauswahl und die Suchfunktion funktionieren.
  • Führen Sie die Anwendung in einem neuen Docker-Container aus, der anhand der aktualisierten Dockerfile erstellt wurde, um sicherzustellen, dass keine tessdata-bezogenen Startfehler auftreten.
  • Bestätigen Sie, dass die Anwendung ohne einen Syncfusion.Licensing Aufruf oder jegliche Syncfusion Namespace-Verweise startet.
  • Verifizieren Sie, dass result.Confidence einen plausiblen Wert zurückgibt (typischerweise 80–99% für saubere Dokumente), um zu bestätigen, dass die OCR-Engine aktiv ist.
  • Testen Sie die parallele Stapelverarbeitung, indem Sie gleichzeitige OCR-Aufrufe ausführen und sicherstellen, dass keine Threading-Ausnahmen oder fehlerhafte Ergebnisse auftreten.
  • Vergleichen Sie die Genauigkeit der Textextraktion bei Scans mit geringer Qualität oder gedrehten Scans vor und nach der Migration und weisen Sie dabei auf die Verbesserung durch die automatische Vorverarbeitungs-Pipeline hin.

Wichtigste Vorteile der Migration zu IronOCR

Bereitstellungskomplexität reduziert sich auf ein einziges NuGet-Paket. Nach der Migration benötigt jede Umgebung — Entwicklerarbeitsstation, CI-Runner, Staging-Container, Produktions-Server — genau eine Sache: das IronOcr NuGet-Paket, das vom Build-System wiederhergestellt wird. Kein tessdata-Ordner vorhanden. Es muss kein Dateisystempfad konfiguriert werden. Keine Skripte zum Herunterladen von Sprachdateien. Keine Dockerfile-Layers mit 100–500 MB an Binärdaten. Container-Images sind kleiner, CI-Pipelines sind einfacher und neue Umgebungen werden beim ersten Build ohne manuellen Eingriff korrekt bereitgestellt.

Die Lizenzkosten werden vorhersehbar und fallen nur einmalig an. Der einmalige Erwerb einer unbefristeten Lizenz ersetzt den jährlichen Verlängerungszyklus pro Entwickler. Ein Team aus fünf Entwicklern, das IronOCR Professional (2.999 $) erwirbt, erhält die IronOCR-Bibliothek auf unbegrenzte Zeit, inklusive eines Jahres Updates. Es gibt keine Umsatzschwellen, die überwacht werden müssen, keine Begrenzungen der Mitarbeiterzahl, keine Prüfungsvorschriften und keine Compliance-Dokumentation, die gepflegt werden muss. Wachstumsereignisse – neue Auftragnehmer, Großaufträge, Finanzierungsrunden – lösen keine Lizenzüberprüfungen aus.

Die OCR-Pipeline bearbeitet verschlechterte Dokumente ohne externe Abhängigkeiten. Deskew, Rauschunterdrückung, Kontrasterhöhung, Binarisierung und Auflösungsskalierung sind als Methoden auf OcrInput verfügbar. Es ist keine separate Bildbearbeitungsbibliothek erforderlich. Dokumente mit leichter Drehung, Scannerrauschen oder geringem Kontrast, die zuvor eine Vorverarbeitung mit System.Drawing oder SkiaSharp erforderten, können nun innerhalb desselben IronOCR-Aufrufs verarbeitet werden. Der Leitfaden zur Bildqualitätskorrektur und die Seite zu den Vorverarbeitungsfunktionen dokumentieren alle verfügbaren Filter und deren Auswirkungen auf die Erkennungsgenauigkeit.

Strukturausgaben ermöglichen Dokumentenintelligenz auf Feldebene. Das OcrResult-Objekt zeigt die vollständige Dokumentstruktur — Seiten, Absätze, Linien, Wörter und Zeichen — mit Begrenzungsrahmen-Koordinaten und Vertrauenwerten pro Token. Anwendungen, die zuvor verkettete Textzeichenfolgen analysierten, um Feldgrenzen zu finden, können stattdessen direkt die Koordinatendaten für Absätze und WORD-Wörter verwenden. Workflows zur Rechnungsbearbeitung, Formular-Extraktion und Dokumentenklassifizierung erhalten Zugriff auf räumliche Informationen, die das Seitenmodell von Syncfusion nicht bereitstellen kann. Die Seite zum Anwendungsfall "PDF-OCR" behandelt gängige Muster der Dokumentenintelligenz.

Parallele Batch-Verarbeitung skaliert ohne Infrastruktur. Eine IronTesseract Instanz pro Thread zu erstellen, ist die vollständige Threading-Strategie — kein Instanzenpooling, kein Semaphore-Management, keine Einschränkungen bei der sequentiellen Verarbeitung. Ein Batch-Service, der 500 Dokumente pro Stunde verarbeitet, kann verfügbare CPU-Kerne mit Parallel.ForEach und einer einzigen Synchronisationszeile sättigen. Die eigenständige Engine-Architektur bedeutet, dass jeder Thread unabhängig arbeitet, ohne gemeinsam genutzten veränderbaren Status.

Über 125 Sprachen sind ohne Verwaltung von Binärdateien verfügbar. Jedes Sprachpaket wird als NuGet-Paket über den Standard-Paketmanager installiert. Versionsverwaltung, Aktualisierungsbeschaffung und Abhängigkeitsauflösung werden von denselben Tools übernommen, die auch alle anderen Projektabhängigkeiten verwalten. Das Hinzufügen von Japanisch oder Arabisch zu einem Dienst erfordert einen dotnet add package Befehl, nicht einen manuellen Download aus einem GitHub-Repository, gefolgt von Updates der Bereitstellungspipeline. Der Sprachenindex listet alle unterstützten Skripte mit Installationsbefehlen auf.

Hinweis:: Syncfusion und Tesseract sind eingetragene Marken ihrer jeweiligen Eigentümer. Diese Website ist nicht mit Google oder Syncfusion verbunden, von ihnen gesponsert oder autorisiert. Alle Produktnamen, Logos und Marken sind Eigentum ihrer jeweiligen Eigentümer. Vergleiche dienen nur zu Informationszwecken und spiegeln öffentlich zugängliche Informationen zum Zeitpunkt des Schreibens wider.

Verwandte Artikel

Key in blue circle

Holen Sie sich sofort Ihren kostenlosen 30-Tage-Testschlüssel.

Your trial license will be sent to your email address

Keine Einschränkungen. 100 % freigeschaltet. Keine Kreditkarte.

bullet_checkedIhr Testlizenzschlüssel wurde Ihnen per E-Mail gesendet.Keine Einschränkungen. 100 % freigeschaltet. Keine Kreditkarte.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Erhalten Sie Ihre unverbindliche Beratung
Füllen Sie das Formular unten aus oder senden Sie eine E-Mail an sales@ironsoftware.com
Ihre Daten werden immer vertraulich behandelt.
Von Millionen von Ingenieur*innen weltweit vertraut
Kundenlogos von Iron Software
Erhalten Sie sofort Ihren kostenlosen 30-Tage-Testschlüssel.
Ihr Testlizenzschlüssel wurde Ihnen per E-Mail gesendet.