IRONSOFTWAREHOME
VIDEOS

Umstellung von Aspose.OCR auf IronOCR

Kannaopat Udonpant
Kannapat Udonpant
Updated: 20. Juni 2026

Dieser Leitfaden führt .NET -Entwickler durch eine vollständige Migration von Aspose.OCR zu IronOCR . Es umfasst den Pakettausch, Namensraumänderungen, die Lizenzinitialisierung und vier konkrete Code-Migrationsbeispiele, die realen Aspose.OCR-Nutzungsmustern entnommen sind – Konfiguration der Erkennungseinstellungen, Bereicheerkennungsmodi, Stapelerkennung mit konfidenzbasierter Filterung und strukturierte Ausgabeverarbeitung. In jedem Beispiel wird der Ansatz von Aspose.OCR zusammen mit dem entsprechenden Ansatz von IronOCR gezeigt, sodass Sie Ihren bestehenden Code ohne Rätselraten übersetzen können.

Warum von Aspose.OCR migrieren?

Die Gründe, warum Teams Aspose.OCR verlassen, lassen sich auf zwei Hauptprobleme zurückführen: das Abonnement-Abrechnungsmodell und den Konfigurationsaufwand, der durch die manuelle Erkennungspipeline entsteht.

Die Abonnementkosten steigen ohne Obergrenze. Aspose.OCR bietet keine unbefristete Lizenz an. Die Lizenz für kleine Entwicklerunternehmen kostet 999 US-Dollar pro Entwickler und Jahr. Ein fünfköpfiges Team, das seinen Vertrag um drei Jahre verlängert, zahlt 14.985 Dollar, bevor es auch nur eine einzige Zeile Geschäftslogik geschrieben hat. Die Professional Version von IronOCR kostet einmalig 2.999 US-Dollar – der gleiche Leistungsumfang gilt für immer und es besteht keine Verpflichtung zur Verlängerung. Die Mathematik wird unausweichlich, wenn die Finanzabteilung fragt, warum eine OCR-Abhängigkeit jährlich wie ein SaaS-Abonnement erneuert wird.

Jeder Erkennungsaufruf erfordert eine Zeremonie von Einstellungsobjekten. Aspose.OCR teilt seine Konfigurationsoberfläche auf RecognitionSettings, DocumentRecognitionSettings, DetectAreasMode und die PreprocessingFilter-Sammlung auf. Bevor Sie RecognizeImage aufrufen können, erstellen Sie ein Einstellungsobjekt, füllen es und übergeben es explizit.IronOCR reduziert dies auf .Read(). Der Unterschied pro Anruf ist gering; Es sammelt sich im gesamten Quellcode an.

Die Auswahl des Bereichserkennungsmodus ist manuell und folgenschwer. Aspose.OCR stellt DetectAreasMode-Werte (COMBINE, DOCUMENT, TABLE, NONE) bereit, die der Entwickler für jeden Dokumenttyp wählen muss. Falscher Modus in einem strukturierten Formular verringert die Erkennungsgenauigkeit.IronOCR analysiert das Dokumentlayout automatisch und gibt das strukturierte Ergebnis – Absätze, Zeilen, Wörter – aus, ohne dass eine vorherige Modusdeklaration erforderlich ist.

Batch-Verarbeitung erfordert das manuelle Verwalten von Ergebnislisten. Das Speichern eines Stapels erkannter Seiten als durchsuchbares PDF oder als strukturierte Datendatei in Aspose.OCR bedeutet, RecognitionResult-Objekte in eine List<RecognitionResult> zu akkumulieren und dann diese Liste an SaveMultipageDocument zu übergeben. Das Sortieren der Listen liegt in Ihrer Verantwortung.IronOCR akzeptiert mehrere Eingaben über ein einziges OcrInput-Objekt und erzeugt ein OcrResult, das alle Seiten abdeckt.

Das Umschalten des Ausgabeformats betrifft mehrere API-Oberflächen. Der Export nach JSON, XML oder Klartext in Aspose.OCR erfordert jeweils einen separaten SaveFormat-Enum-Wert, der an SaveMultipageDocument übergeben wird. Das Filtern dieser Ergebnisse nach Vertrauen vor dem Speichern erfordert das Iterieren der Liste und das Inspizieren jedes RecognitionAreasConfidence-Arrays.IronOCR stellt result.Text, result.Confidence und result.Pages auf einem einzigen Ergebnisobjekt bereit — das Vertrauen filtern ist ein einzeiliger LINQ-Ausdruck.

Das IronOCR -Lizenzmodell eliminiert das Verlängerungsrisiko vollständig. Eine erworbene Lizenz gehört Ihnen dauerhaft. Aktualisierungen sind für ein Jahr inklusive; Anschließend funktioniert die zuletzt empfangene Version weiterhin im Produktivbetrieb ohne Compliance-Risiken. Es gibt kein Szenario, in dem eine versäumte Zahlung Ihre Bereitstellung unterbricht.

Das grundsätzliche Problem

Aspose.OCR verknüpft die Erkennungskonfiguration mit einem Einstellungsobjekt, das erstellt, befüllt und bei jedem Aufruf übergeben werden muss. Modus, Sprache, Filter und Bereichsstrategie sind allesamt Eigenschaften dieses Objekts:

// Aspose.OCR: build a settings object for every recognition call
var api = new AsposeOcr();
var settings = new RecognitionSettings
{
    Language = Language.Eng,
    DetectAreasMode = DetectAreasMode.DOCUMENT, // must choose the right mode
    RecognizeSingleLine = false,
    AutoSkew = true
};
var result = api.RecognizeImage("form.jpg", settings);
string text = result.RecognitionText;

IronOCR verwendet einen einzigen .Read()-Aufruf. Konfigurationen liegen auf der IronTesseract-Instanz, wenn sie benötigt werden, nicht auf einem einzelnen Aufrufobjekt:

// IronOCR: one call, no settings object required
var text = new IronTesseract().Read("form.jpg").Text;

##IronOCR vs. Aspose.OCR: Funktionsvergleich

Die folgende Tabelle vergleicht die beiden Bibliotheken anhand der Dimensionen, die bei einer Migrationsentscheidung am wichtigsten sind.

FeatureAspose.OCRIronOCR
LizenzmodellJahresabonnement (keine unbefristete Option)Dauerhafter einmaliger Kauf
1. Entwicklerkosten999 $/Jahr$999 einmal
10-Entwicklerkosten4.995 $/Jahr (Standortlizenz)2.999 $ einmalig (Professional)
Folgen des LizenzablaufsNeue Builds können nicht bereitgestellt werden, keine Sicherheitspatches verfügbarKeine – die gekaufte Version funktioniert unbegrenzt.
Primäre OCR-KlasseAsposeOcrIronTesseract
Einstellungenobjekt erforderlichJa (RecognitionSettings oder DocumentRecognitionSettings)Nein — optional OcrInput für erweiterte Szenarien
BereichserkennungManuelle DetectAreasMode-Enum-AuswahlAutomatische Layoutanalyse
VorverarbeitungManuelle PreprocessingFilter-SammlungAutomatischer Modus mit optionaler expliziter Überschreibung
PDF-EingabeStandard-PDFs via RecognizePdf()Nativ via .Read() oder OcrInput.LoadPdf()
Passwortgeschütztes PDFErfordert Aspose.PDF (separate Lizenz)Eingebauter Password:-Parameter
Durchsuchbare PDF-AusgabeSaveMultipageDocument(path, SaveFormat.Pdf, list)result.SaveAsSearchablePdf(path)
Konfidenzwertresult.RecognitionAreasConfidence.Average() (Array)result.Confidence (einfaches Double, 0–100)
Strukturierte Daten auf WortebeneBereichsgeometrie über RecognitionAreasRectanglesresult.Words mit X, Y, Breite, Höhe, Vertrauen
strukturierte Daten auf SeitenebeneNicht ausgesetztresult.Pages mit Absätzen, Zeilen, Wörtern, Zeichen
Mehrsprachige SimultanübertragungEine Sprache pro AnrufOcrLanguage.French + OcrLanguage.German
Eingeschlossene Sprachen130+ im HauptpaketÜber 125 Sprachpakete via NuGet
Barcode-LesungNicht verfügbarEingebaut (ocr.Configuration.ReadBarCodes = true)
Thread-SicherheitEine neue Instanz pro Thread wird empfohlen.Vollständig threadsicher, einzelne gemeinsam genutzte Instanz
TIFF-MehrbildNicht nativinput.LoadImageFrames("file.tiff")
hOCR-ExportBeschränktresult.SaveAsHocrFile(path)
Plattformübergreifendes NuGetJaJa (Windows, Linux, macOS, Docker, Azure, AWS)
Anzahl der NuGet Pakete1 Haupt- + optionale Sprachpakete1 Haupt- + optionale Sprachpakete

Schnellstart: Migration von Aspose.OCR zu IronOCR

Schritt 1: Ersetzen des NuGet-Pakets

Aspose.OCR entfernen:

dotnet remove package Aspose.OCR
SHELL

Installieren Sie IronOCR über NuGet :

dotnet add package IronOcr

Schritt 2: Namespaces aktualisieren

Ersetzen Sie alle Aspose.OCR-Namespace-Importe:

// Before (Aspose.OCR)
using Aspose.OCR;
using Aspose.OCR.Models;
using Aspose.OCR.Models.PreprocessingFilters;

// After (IronOCR)
using IronOcr;

Schritt 3: Lizenz initialisieren

Entfernen Sie den dateibasierten Lizenzaufruf von Aspose und ersetzen Sie ihn durch den IronOCR Zeichenfolgenschlüssel. Platzieren Sie dies beim Anwendungsstart – einmal pro Prozess, nicht einmal pro Anfrage:

// Remove Aspose license setup
// var license = new Aspose.OCR.License();
// license.SetLicense("Aspose.OCR.lic");

// Add IronOCR license at startup
IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY";

// Production pattern: read from environment variable
IronOcr.License.LicenseKey = Environment.GetEnvironmentVariable("IRONOCR_LICENSE");

Beispiele für die Code-Migration

Konfiguration der Erkennungseinstellungen

Aspose.OCR zentralisiert das gesamte Erkennungsverhalten in einem RecognitionSettings-Objekt. Sprache, Bereichserkennungsmodus, Einzelzeilen-Flag und Schwellenwert sind dort alle als Eigenschaften hinterlegt. Sie erstellen es für jeden Dokumenttyp oder jedes Aufrufmuster neu.

Aspose.OCR-Ansatz:

// Configuring recognition settings for a structured form
var api = new AsposeOcr();

var settings = new RecognitionSettings
{
    Language = Language.Eng,
    DetectAreasMode = DetectAreasMode.DOCUMENT,
    RecognizeSingleLine = false,
    AutoSkew = true,
    RecognitionAreas = new List<Rectangle>
    {
        new Rectangle(0, 0, 800, 100)  // header zone
    }
};

var result = api.RecognizeImage("structured-form.jpg", settings);
Console.WriteLine(result.RecognitionText);

IronOCR Ansatz:

// Recognition behavior configured once on the IronTesseract instance
var ocr = new IronTesseract();
ocr.Language = OcrLanguage.English;

// Region targeting replaces RecognitionAreas in RecognitionSettings
var headerRegion = new CropRectangle(0, 0, 800, 100);
using var input = new OcrInput();
input.LoadImage("structured-form.jpg", headerRegion);

var result = ocr.Read(input);
Console.WriteLine(result.Text);

Es gibt kein Einstellungsobjekt, das pro Aufruf erstellt werden muss. Sprache geht auf die IronTesseract-Instanz; Die Zielregion geht auf OcrInput zur Ladezeit. Die DetectAreasMode- und RecognizeSingleLine-Entscheidungen werden vom Motor automatisch gehandhabt. Eine detaillierte Anleitung zur regionsbasierten OCR finden Sie im Leitfaden zur regionsbasierten OCR .

Bereichserkennungsmodus-Migration

Aspose.OCR erfordert, dass Sie vor jedem Erkennungsaufruf einen DetectAreasMode-Wert auswählen. COMBINE führt Text aus verschiedenen Layoutregionen zusammen, DOCUMENT behandelt das Bild als Standarddokument, TABLE optimiert für Rasterlayouts. Die Wahl des falschen Modus für den Dokumenttyp führt zu falsch ausgerichteten oder fehlenden Ausgaben.

Aspose.OCR-Ansatz:

// Three separate calls with different modes for different document types
var api = new AsposeOcr();

// For a document with mixed prose and table content
var docSettings = new RecognitionSettings
{
    DetectAreasMode = DetectAreasMode.COMBINE,
    Language = Language.Eng
};

// For a pure tabular document
var tableSettings = new RecognitionSettings
{
    DetectAreasMode = DetectAreasMode.TABLE,
    Language = Language.Eng
};

// For a single-column text document
var linearSettings = new RecognitionSettings
{
    DetectAreasMode = DetectAreasMode.DOCUMENT,
    Language = Language.Eng
};

string mixedResult = api.RecognizeImage("mixed-layout.jpg", docSettings).RecognitionText;
string tableResult = api.RecognizeImage("data-table.jpg", tableSettings).RecognitionText;
string linearResult = api.RecognizeImage("text-document.jpg", linearSettings).RecognitionText;

IronOCR Ansatz:

// Single API surface handles all layout types automatically
var ocr = new IronTesseract();

// Same code path for every document type
var mixedResult = ocr.Read("mixed-layout.jpg").Text;
var tableResult = ocr.Read("data-table.jpg").Text;
var linearResult = ocr.Read("text-document.jpg").Text;

// For table documents, structured data is immediately available
var result = ocr.Read("data-table.jpg");
foreach (var page in result.Pages)
{
    foreach (var paragraph in page.Paragraphs)
    {
        Console.WriteLine($"Block at ({paragraph.X}, {paragraph.Y}): {paragraph.Text}");
    }
}

IronOCR macht die Entscheidung über die Modusauswahl komplett überflüssig. Der Motor analysiert Layouts und stellt das Ergebnis durch die Pages, Paragraphs, Lines und Words-Hierarchie bereit. Der Leitfaden zu den Leseergebnissen beschreibt, wie man im vollständigen strukturierten Ergebnismodell für die Dokumentenlayoutanalyse navigiert. Für tabellenspezifische Extraktionsmuster siehe die Anleitung zum Lesen von Tabellen .

Stapelerkennung mit konfessionsbasierter Filterung

Aspose.OCR-Batch-Workflows akkumulieren RecognitionResult-Objekte in einer Liste. Vertrauensfilterung erfordert das Durchlaufen dieser Liste und das Berechnen des Durchschnitts pro Region, bevor ein Ergebnis angenommen wird. Die Liste muss explizit verwaltet und an SaveMultipageDocument übergeben werden, wenn Sie mehrere Seiten als eine einzelne Datei ausgeben möchten.

Aspose.OCR-Ansatz:

// Batch recognition with confidence filtering before output
var api = new AsposeOcr();
var settings = new RecognitionSettings
{
    Language = Language.Eng,
    DetectAreasMode = DetectAreasMode.DOCUMENT
};

string[] documentPaths = Directory.GetFiles("invoice-archive", "*.jpg");
var acceptedResults = new List<RecognitionResult>();
var rejectedPaths = new List<string>();

foreach (var path in documentPaths)
{
    var result = api.RecognizeImage(path, settings);

    // Confidence is an array of per-region values — must average manually
    float avgConfidence = result.RecognitionAreasConfidence != null
        ? result.RecognitionAreasConfidence.Average()
        : 0f;

    if (avgConfidence >= 0.70f)
    {
        acceptedResults.Add(result);
    }
    else
    {
        rejectedPaths.Add(path);
        Console.WriteLine($"Rejected: {path} ({avgConfidence:P0} confidence)");
    }
}

// Save accepted pages as a single searchable PDF
if (acceptedResults.Any())
{
    api.SaveMultipageDocument("high-confidence-invoices.pdf",
        SaveFormat.Pdf, acceptedResults);
}

Console.WriteLine($"Accepted: {acceptedResults.Count}, Rejected: {rejectedPaths.Count}");

IronOCR Ansatz:

// Batch recognition with confidence filtering using unified result model
var ocr = new IronTesseract();
string[] documentPaths = Directory.GetFiles("invoice-archive", "*.jpg");

var acceptedResults = new List<OcrResult>();
var rejectedPaths = new List<string>();

foreach (var path in documentPaths)
{
    var result = ocr.Read(path);

    // Single confidence value — no averaging required
    if (result.Confidence >= 70.0)
    {
        acceptedResults.Add(result);
    }
    else
    {
        rejectedPaths.Add(path);
        Console.WriteLine($"Rejected: {path} ({result.Confidence:F1}% confidence)");
    }
}

// Save accepted pages — each result becomes a page in the output PDF
if (acceptedResults.Any())
{
    using var outputInput = new OcrInput();
    foreach (var path in documentPaths
        .Where(p => !rejectedPaths.Contains(p)))
    {
        outputInput.LoadImage(path);
    }
    var combined = ocr.Read(outputInput);
    combined.SaveAsSearchablePdf("high-confidence-invoices.pdf");
}

Console.WriteLine($"Accepted: {acceptedResults.Count}, Rejected: {rejectedPaths.Count}");

result.Confidence ist ein einfaches double im Bereich von 0 bis 100. Das Aspose RecognitionAreasConfidence-Array-Durchschnitt gibt einen float in einem Bereich zurück, der von der Version abhängt — der Vergleichsschwellenwert muss während der Migration angepasst werden. Die Konfidenzwerte dienen als Leitfaden für die Konfidenzwerte pro Wort, pro Zeile und pro Seite in Dokumentenvalidierungs-Workflows. Für Batchverarbeitungsmuster mit hohem Datenvolumen siehe das Beispiel zur Multithreading-Verarbeitung .

Strukturierte Ausgabeverarbeitung

Aspose.OCR gibt strukturierte Daten über SaveMultipageDocument mit formatspezifischen SaveFormat-Enum-Werten aus. JSON-Ausgabe schreibt eine maschinenlesbare Datei; XML-Ausgabe schreibt eine annotierte Dokumentdatei. Der Zugriff auf die rohen strukturierten Daten — Wortpositionen, Zeilengrenzen — erfordert das Durchlaufen von RecognitionAreasRectangles, das Geometrie auf Bereichsebene und nicht auf Wortebene zurückgibt.

Aspose.OCR-Ansatz:

// Structured output: JSON and XML via SaveMultipageDocument
var api = new AsposeOcr();
var settings = new RecognitionSettings
{
    Language = Language.Eng,
    DetectAreasMode = DetectAreasMode.COMBINE
};

var results = new List<RecognitionResult>();
foreach (var path in new[] { "page1.jpg", "page2.jpg", "page3.jpg" })
{
    results.Add(api.RecognizeImage(path, settings));
}

// Export as JSON
api.SaveMultipageDocument("output.json", SaveFormat.Json, results);

// Export as XML
api.SaveMultipageDocument("output.xml", SaveFormat.Xml, results);

// Accessing area-level geometry (not word-level)
foreach (var result in results)
{
    var areas = result.RecognitionAreasRectangles;
    if (areas != null)
    {
        foreach (var area in areas)
        {
            Console.WriteLine($"Area at ({area.X},{area.Y}): {area.Width}x{area.Height}");
        }
    }
    // No direct word-level collection with individual confidence values
}

IronOCR Ansatz:

// Structured output: navigate a rich result object model
var ocr = new IronTesseract();

using var input = new OcrInput();
input.LoadImage("page1.jpg");
input.LoadImage("page2.jpg");
input.LoadImage("page3.jpg");

var result = ocr.Read(input);

// Export as searchable PDF (preserves layout)
result.SaveAsSearchablePdf("output.pdf");

// Export as hOCR (XHTML with bounding box coordinates — feeds downstream tools)
result.SaveAsHocrFile("output.hocr");

// Word-level structured access — direct collection, no indirection
foreach (var page in result.Pages)
{
    Console.WriteLine($"Page {page.PageNumber}: {page.Words.Length} words, " +
                      $"{page.Confidence:F1}% confidence");

    foreach (var word in page.Words)
    {
        Console.WriteLine($"  '{word.Text}' at ({word.X},{word.Y}) " +
                          $"size {word.Width}x{word.Height}{word.Confidence:F1}%");
    }
}

// Paragraph-level layout for document structure analysis
foreach (var paragraph in result.Pages[0].Paragraphs)
{
    Console.WriteLine($"Paragraph at ({paragraph.X},{paragraph.Y}): {paragraph.Text}");
}

IronOCR stellt wortbezogene Daten als direkte Words-Sammlung auf jeder Seite bereit, mit individuellen Confidence-Werten pro Wort. Aspose.OCR's RecognitionAreasRectangles bietet Bereichsgeometrie ohne detaillierte Vertrauensauflösung auf Wortebene. Der hOCR-Export erzeugt XHTML, das mit Tools kompatibel ist, die Ausgaben mit Begrenzungsrahmen-Annotationen verarbeiten – Einzelheiten zum Format finden Sie im hOCR-Exportleitfaden . Für das vollständige strukturierte Ergebnismodell dokumentiert die OcrResult-API-Referenz jede Eigenschaft auf OcrResult.Page, OcrResult.Paragraph, OcrResult.Line und OcrResult.Word.

Aspose.OCR API zu IronOCR Mapping-Referenz

Aspose.OCRIronOCR-Äquivalent
AsposeOcrIronTesseract
RecognitionSettingsEigenschaften auf IronTesseract + OcrInput
DocumentRecognitionSettingsOcrInput mit LoadPdf() / LoadPdfPages()
api.RecognizeImage(path, settings)ocr.Read(path) oder ocr.Read(input)
api.RecognizePdf(path, settings)ocr.Read(path) oder ocr.Read(input)
result.RecognitionTextresult.Text
result.RecognitionAreasConfidence.Average()result.Confidence (einfaches Double, 0–100)
result.RecognitionAreasRectanglesresult.Words (mit X, Y, Breite, Höhe, Vertrauen)
RecognitionResultOcrResult
Language.EngOcrLanguage.English
DetectAreasMode.COMBINEAutomatisch – keine Aufzählung erforderlich
DetectAreasMode.TABLEAutomatisch — use result.Pages[n].Paragraphs für Layout
DetectAreasMode.DOCUMENTAutomatisch – die Engine übernimmt die Layoutanalyse
settings.RecognizeSingleLine = trueocr.Configuration.WhiteListCharacters oder Einzelbereich-Zuschnitt
settings.RecognitionAreas = new List<Rectangle> { r }input.LoadImage(path, cropRectangle)
settings.AutoSkew = trueAutomatisch oder explizit input.Deskew()
PreprocessingFilter.AutoSkew()input.Deskew()
PreprocessingFilter.AutoDenoising()input.DeNoise()
PreprocessingFilter.ContrastCorrectionFilter()input.Contrast()
PreprocessingFilter.Binarize()input.Binarize()
PreprocessingFilter.Threshold(value)input.Binarize() (aut. Schwelle)
PreprocessingFilter.Median()input.DeNoise()
PreprocessingFilter.Scale(factor)input.Scale(percent)
PreprocessingFilter.Invert()input.Invert()
PreprocessingFilter.Rotate(angle)input.Rotate(angle)
api.SaveMultipageDocument(path, SaveFormat.Pdf, list)result.SaveAsSearchablePdf(path)
api.SaveMultipageDocument(path, SaveFormat.Docx, list)Via hOCR-Export: result.SaveAsHocrFile(path)
api.SaveMultipageDocument(path, SaveFormat.Json, list)Navigieren Sie result.Pages und serialisieren Sie direkt
api.PreprocessImage(path, filters)input.GetPages()[0].SaveAsImage(path)
api.CalculateSkew(imagePath)input.Deskew() (wenden Sie den erkannten Winkel automatisch an)
new Aspose.OCR.License().SetLicense("file.lic")IronOcr.License.LicenseKey = "key"
settings.ThreadsCount = nStandardmäßig threadsicher; verwenden Sie Parallel.ForEach

Gängige Migrationsprobleme und Lösungen

Problem 1: DetectAreasMode hat kein direktes Äquivalent.

Aspose.OCR: Der Code setzt settings.DetectAreasMode = DetectAreasMode.TABLE oder DetectAreasMode.COMBINE und erwartet spezifisches Layoutverhalten. Das Entfernen des Enums wirft die Frage auf, wie IronOCR mit demselben Layout umgeht.

Lösung: Entfernen Sie die Aufzählung vollständig.IronOCR führt automatisch eine Layoutanalyse durch. Wenn Sie die erkannte Layoutstruktur inspizieren müssen, navigieren Sie result.Pages[n].Paragraphs — jeder Absatz enthält ein begrenzendes X, Y, Breite, Höhe Kästchen und den darin enthaltenen Text. Für die explizite Tabellenextraktion siehe die Anleitung zum Einlesen von Tabellen :

// No mode to set — read directly and inspect the structure
var result = new IronTesseract().Read("data-table.jpg");
foreach (var paragraph in result.Pages[0].Paragraphs)
{
    Console.WriteLine($"Block ({paragraph.X},{paragraph.Y}): {paragraph.Text}");
}

Problem 2: Diskrepanz zwischen Konfidenzschwellenwert für Erkennungsbereiche

Aspose.OCR: Bestehender Code vergleicht result.RecognitionAreasConfidence.Average() gegen einen Schwellenwert wie 0.75f. IronOCR's result.Confidence befindet sich auf einer anderen Skala.

Lösung: result.Confidence ist ein Prozentsatz von 0–100. Multiplizieren Sie Ihren Aspose-Schwellenwert mit 100, um zu konvertieren: 0.75f wird zu 75.0. Aktualisieren Sie anschließend die gesamte Vergleichslogik:

// Aspose.OCR threshold pattern
// if (result.RecognitionAreasConfidence.Average() >= 0.75f)

//IronOCR equivalent — multiply old threshold by 100
var result = new IronTesseract().Read("document.jpg");
if (result.Confidence >= 75.0)
{
    Console.WriteLine($"High confidence result: {result.Text}");
}
C#

Problem 3: SaveMultipageDocument JSON/XML-Ausgabe hat keine direkte Methode

Aspose.OCR: api.SaveMultipageDocument("out.json", SaveFormat.Json, results) schreibt eine JSON-Datei mit Erkennungsmetadaten. Teams, die diese Ausgabe weiterverarbeiten, müssen das Äquivalent finden.

**Lösung:**IronOCR verfügt nicht über eine SaveFormat.Json-äquivalente Methode. Der Ersatz ist, result.Pages zu navigieren und mit System.Text.Json zu serialisieren. Dies gibt Ihnen die volle Kontrolle über das Schema:

using var input = new OcrInput();
input.LoadImage("document.jpg");
var result = new IronTesseract().Read(input);

// Build your own structured JSON from the result model
var pageData = result.Pages.Select(p => new
{
    PageNumber = p.PageNumber,
    Confidence = p.Confidence,
    Text = p.Text,
    Words = p.Words.Select(w => new
    {
        Text = w.Text,
        X = w.X,
        Y = w.Y,
        Width = w.Width,
        Height = w.Height,
        Confidence = w.Confidence
    }).ToArray()
}).ToArray();

File.WriteAllText("output.json",
    System.Text.Json.JsonSerializer.Serialize(pageData,
        new System.Text.Json.JsonSerializerOptions { WriteIndented = true }));

Für XHTML-Ausgabe mit eingebetteten Koordinaten, die nachgelagerte Tools analysieren können, ist result.SaveAsHocrFile("output.hocr") das näherliegende semantische Äquivalent.

Problem 4: DocumentRecognitionSettings.StartPage verwendet einen 0-basierten Index

Aspose.OCR: DocumentRecognitionSettings.StartPage = 2 bedeutet die dritte Seite (0-basiert). Dies ist der häufigste Off-by-One-Fehler bei Aspose-zu-IronOCR-Migrationen.

**Lösung:**IronOCR verwendet durchgehend eine 1-basierte Seitenindizierung. Addieren Sie 1 zu jedem StartPage-Wert und berechnen Sie die Endseite entsprechend neu. Schreiben Sie einen gezielten Test anhand einer bekannten mehrseitigen PDF-Datei, um dies vor der Produktion zu erkennen:

// Aspose.OCR: StartPage = 2 means the 3rd page (0-based)
// var settings = new DocumentRecognitionSettings { StartPage = 2, PagesNumber = 3 };

// IronOCR: page 3 is index 3 (1-based), range of 3 ends at page 5
using var input = new OcrInput();
input.LoadPdfPages("document.pdf", 3, 5);
var result = new IronTesseract().Read(input);

Problem 5: RecognizeSingleLine hat kein direktes Flag

Aspose.OCR: settings.RecognizeSingleLine = true weist den Motor an, das gesamte Bild als einzelne Textzeile zu behandeln. Dies wird für die Erkennung von Etiketten, den Feldauszug und andere Festformat-Eingaben verwendet.

Lösung: Verwenden Sie eine CropRectangle, um die Textzeile präzise zu isolieren, was verhindert, dass der Motor vollständige Layout-Erkennung auf einem Einzelzeilenbild durchführt. Für maschinenlesbare Zonen oder Etikettenformate beschreibt der Leitfaden zum Lesen spezifischer Dokumente das jeweils geeignete Vorgehen:

// Aspose.OCR: single-line flag
// var settings = new RecognitionSettings { RecognizeSingleLine = true };

// IronOCR: crop to the line region — layout detection skips automatically
var lineRegion = new CropRectangle(10, 45, 600, 30); // x, y, width, height
using var input = new OcrInput();
input.LoadImage("label.jpg", lineRegion);
var result = new IronTesseract().Read(input);
Console.WriteLine(result.Text.Trim());

Problem 6: Pro-Thread Aspose.OCR Instanzen Nicht Erforderlich

Aspose.OCR: Die Dokumentation empfiehlt, für jeden Thread eine neue AsposeOcr() Instanz zu erstellen, um Thread-Sicherheitsprobleme bei der parallelen Verarbeitung zu vermeiden. Bestehender Code erstellt Instanzen innerhalb von Parallel.ForEach-Lambdas.

Lösung: IronTesseract ist threadsicher. Eine einzelne Instanz verarbeitet parallele Arbeitslasten. Entfernen Sie die Instanziierung pro Thread und teilen Sie eine Instanz:

// Aspose.OCR: per-thread instance due to thread-safety concerns
// Parallel.ForEach(paths, path => { var api = new AsposeOcr(); ... });

// IronOCR: single shared instance, fully thread-safe
var ocr = new IronTesseract();

Parallel.ForEach(documentPaths, path =>
{
    var result = ocr.Read(path);
    Console.WriteLine($"{Path.GetFileName(path)}: {result.Confidence:F1}%");
});

Aspose.OCR-Migrationscheckliste

Vor der Migration anfallende Aufgaben

Prüfen Sie alle Aspose.OCR-Verweise im Quellcode:

grep -rn "using Aspose.OCR" --include="*.cs" .
grep -rn "AsposeOcr\|RecognitionSettings\|DocumentRecognitionSettings" --include="*.cs" .
grep -rn "DetectAreasMode\|SaveFormat\|RecognitionResult" --include="*.cs" .
grep -rn "RecognitionAreasConfidence\|RecognitionText\|RecognizePdf" --include="*.cs" .
grep -rn "PreprocessingFilter\|SaveMultipageDocument" --include="*.cs" .
grep -rn "Aspose.OCR.License\|SetLicense" --include="*.cs" .
SHELL

Dokumentieren Sie jedes Vorkommen nach Kategorie: Erkennungsaufrufe, Einstellungsobjekte, Vorverarbeitungspipelines, Ausgabeaufrufe und Lizenzinitialisierung. Notieren Sie alle DetectAreasMode-Werte im Einsatz — diese bestimmen den Layout-Migrationspfad. Erfassen Sie alle SaveFormat-Enum-Werte — jedes Nicht-PDF-Format benötigt den benutzerdefinierten Serialisierungsansatz aus Problem 3 oben.

Code-Migration

  1. Entfernen Sie das Aspose.OCR-NuGet-Paket aus allen Projekten in der Lösung
  2. Installieren Sie IronOcr-NuGet-Paket in allen Projekten
  3. Ersetze using Aspose.OCR; und using Aspose.OCR.Models; durch using IronOcr;
  4. Ersetze new Aspose.OCR.License().SetLicense("file.lic") mit IronOcr.License.LicenseKey = "key" beim App-Start
  5. Ersetze new AsposeOcr() mit new IronTesseract()
  6. Entfernen Sie alle RecognitionSettings und DocumentRecognitionSettings-Konstruktionsblöcke
  7. Entfernen Sie alle DetectAreasMode-Enum-Verweise — keine Entsprechung erforderlich
  8. Ersetze api.RecognizeImage(path, settings) mit ocr.Read(path)
  9. Ersetze api.RecognizePdf(path, settings) mit ocr.Read(path) oder ocr.Read(input) unter Verwendung von input.LoadPdf()
  10. Ersetze result.RecognitionText mit result.Text
  11. Ersetze result.RecognitionAreasConfidence.Average() mit result.Confidence und multipliziere die alte Schwelle mit 100
  12. Ersetze api.SaveMultipageDocument(path, SaveFormat.Pdf, list) mit result.SaveAsSearchablePdf(path)
  13. Ersetze api.SaveMultipageDocument(path, SaveFormat.Json, list) mit direkter Serialisierung von result.Pages
  14. Konvertieren Sie alle PreprocessingFilter-Ketten zu OcrInput-Methodenaufrufen (siehe API-Zuordnungstabelle)
  15. Aktualisieren Sie DocumentRecognitionSettings.StartPage von 0-basierend auf 1-basierend (fügen Sie jedem Wert 1 hinzu)
  16. Entfernen Sie die pro-Thread AsposeOcr-Instanziierung — teilen Sie eine einzige IronTesseract-Instanz

Post-Migrationstests

  • Führen Sie eine OCR-Analyse an einer repräsentativen Stichprobe jedes Dokumenttyps aus dem Produktiveinsatz durch und vergleichen Sie die Zeichenanzahl mit der Aspose.OCR-Basisausgabe.
  • Konfidenzwerte überprüfen:IronOCR gibt Werte zwischen 0 und 100 zurück; bestätigen Sie, dass alle Schwellenwertvergleiche die neue Skala verwenden
  • Testen Sie die Auswahl des Seitenbereichs in einer PDF-Datei mit mehr als 1 Seiten unter Verwendung einer 1-basierten Seitenzählung und überprüfen Sie, ob die richtigen Seiten zurückgegeben werden.
  • Testen des Imports passwortgeschützter PDFs ohne installiertes Aspose.PDF – Bestätigung, dass keine Abhängigkeitsausnahme auftritt
  • Bestätigen Sie, dass result.Text der erwarteten Ausgabe für jedes im Einsatz befindliche DetectAreasMode entspricht (KOMBINIERT, TABELLE, DOKUMENT)
  • Testen Sie den JSON-Ausgabepfad: serialisieren Sie result.Pages und validieren Sie das Schema gegen alle nachgelagerten Verbraucher
  • Führen Sie den parallelen Batch-Processor aus und vergewissern Sie sich, dass keine Threading-Ausnahmen vorliegen (gemeinsame IronTesseract-Instanz)
  • Sicherstellen, dass die durchsuchbare PDF-Datei in einem PDF-Viewer geöffnet wird und der Text an den richtigen Stellen auswählbar ist.
  • Sicherstellen, dass der Lizenzschlüssel in jeder Bereitstellungsumgebung (ASP.NET -Start, Azure-Funktion, Docker-Container) fehlerfrei initialisiert wird.
  • Überprüfen Sie, dass vorverarbeitete TIFF-Eingaben immer noch durch input.LoadImageFrames() die erwartete Ausgabe erzeugen

Wichtigste Vorteile der Migration zu IronOCR

Planbare Gesamtbetriebskosten vom ersten Tag an. Die Professional Lizenz für 2.999 US-Dollar deckt 10 Entwickler für 10 Projekte ab und muss nicht jährlich verlängert werden. Die Finanzabteilung schließt den OCR-Positionsposten einmal ab. Die Auswirkungen auf das Budget durch die Einstellung neuer Ingenieure, die Einführung neuer Projekte oder die Verlängerung des Produktlebenszyklus sind gleich null – es müssen keine Lizenzstufen berechnet, kein Verlängerungsdatum verfolgt und kein Compliance-Risiko durch eine versäumte Zahlung befürchtet werden. Auf der IronOCR Lizenzseite ist detailliert beschrieben, was die einzelnen Stufen abdecken.

Erkennungsaufrufe, die Absicht ausdrücken, nicht Infrastruktur. Nach der Migration ist jeder Erkennungsaufruf ocr.Read("document"). Die RecognitionSettings-Konstruktion, DetectAreasMode-Auswahl und PreprocessingFilter-Befüllung, die jedem Aspose.OCR-Aufruf vorausgegangen sind, verschwinden vollständig. Neue Ingenieure, die die OCR-Schicht der Codebasis lesen, sehen die geschäftliche Absicht – "lesen Sie dieses Dokument" – anstatt eines Konfigurationsobjekts, das vor Beginn der eigentlichen Arbeit zusammengestellt wird. Die IronTesseract-API-Referenz umfasst alle verfügbaren Konfigurationseigenschaften.

Unterstützung für verschlüsselte PDFs ohne zusätzliches Produkt. Dokumentenverarbeitungsprozesse in Enterprise verarbeiten routinemäßig passwortgeschützte PDFs. Nach der Migration werden sie von input.LoadPdf("doc.pdf", Password: "secret") nativ bearbeitet. Es muss kein Aspose.PDF-Abonnement verwaltet werden, keine Entschlüsselungs-zu-Bild-Pipeline muss gewartet werden und es muss kein zweites Verlängerungsdatum verfolgt werden. Jedes PDF-Format im Entwicklungsprozess durchläuft ein Paket, eine Lizenz und einen Codepfad. Die Anleitung zur PDF-Eingabe behandelt Seitenbereiche, nicht zusammenhängende Auswahl und Stream-Eingabe.

Strukturierte Ergebnisdaten auf Wort- und Zeichenebene. result.Pages[n].Words gibt eine Sammlung zurück, in der jedes Wort seinen Begrenzungsrahmen, seinen Text und seine individuelle Vertrauensbewertung trägt. Die Geometrie von Aspose.OCR auf Bereichsebene deckt Regionen ab, nicht einzelne Token. Nach der Migration können Dokumentenlayout-Parser, Formularfeld-Extraktoren und Rechnungsverarbeitungspipelines ohne zusätzliche Verarbeitungsschritte auf die Positionierung pro Wort zugreifen. Die vollständige Ergebnishierarchie finden Sie auf der Seite mit den OCR-Ergebnissen .

**Bereitstellung mit einem einzigen Paket auf allen Plattformen.**IronOCR wird als ein einziges NuGet Paket bereitgestellt, das unter Windows, Linux, macOS, Docker, Azure App Service und AWS Lambda ohne plattformspezifische Konfiguration läuft. Aspose.OCR funktioniert plattformübergreifend, erfordert aber in Containerumgebungen möglicherweise Anpassungen der nativen Bibliothek. Nach der Migration ist das Dockerfile für einen OCR-Dienst ein standardmäßiges .NET Basisimage, für das außer der Paketinstallation keine OCR-spezifischen Einrichtungsschritte erforderlich sind. Die Bereitstellungsleitfäden umfassen Docker , Azure , AWS und Linux .

Barcode-Lesen im selben Durchgang wie OCR. Das Setzen von ocr.Configuration.ReadBarCodes = true extrahiert Barcodes, QR-Codes und Code-128-Symbole aus demselben Bild in einem Motordurchgang. Aspose.OCR verfügt über keine Barcode-Funktionalität – eine separate Barcode-Bibliothek wäre erforderlich. Nach der Migration werden Dokumente, die gedruckten Text mit Barcodes mischen (Versandetiketten, Inventarformulare, Veranstaltungstickets), durch einen einzelnen Aufruf gehandhabt, wobei Ergebnisse auf result.Barcodes vorliegen. Eine Anleitung zur Barcode-OCR mit Informationen zu den unterstützten Symbologien finden Sie hier.

Hinweis:: Aspose und Tesseract sind eingetragene Marken ihrer jeweiligen Eigentümer. Diese Seite ist weder mit Aspose Pty Ltd noch mit Google verbunden, anerkannt oder gesponsert. 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.