Zum Fußzeileninhalt springen
VERWENDUNG VON IRONOCR

Rechnungs-OCR-API (Entwicklertutorial)

Die Invoice OCR API automatisiert die Extraktion von Rechnungsdaten mithilfe von maschinellem Lernen und eliminiert so manuelle Eingabefehler. Gleichzeitig werden Lieferantendetails, Rechnungsnummern und Preise sowohl aus digitalen als auch aus gescannten Dokumenten präzise erfasst. Dieses Tutorial zeigt, wie man mit IronOCR eine Lösung zur Rechnungserkennung (OCR) erstellt.

Durch den Einsatz von maschinellem Lernen und Computer Vision wandelt die Invoice OCR-Technologie Rechnungsdaten in Formate um, die für die automatisierte Verarbeitung geeignet sind. Sie lernen, wie Sie häufige Herausforderungen wie Verzögerungen, Kosten und Fehler bei der manuellen Dateneingabe bewältigen und gleichzeitig Lieferanteninformationen, Rechnungsnummern und Preise aus jedem Rechnungsformat präzise extrahieren.

Dieser Artikel verwendet IronOCR , eine führende OCR-API für Rechnungen für .NET-Entwickler.

Was ist IronOCR?

IronOCR, entwickelt von Iron Software, bietet umfassende OCR-Tools für Entwickler. Es nutzt maschinelles Lernen und Computer Vision, um Text aus gescannten Dokumenten, Bildern und PDFs zu extrahieren, wodurch eine automatisierte Verarbeitung ermöglicht wird. Die APIs lassen sich nahtlos in verschiedene Sprachen und Plattformen integrieren, wodurch Fehler bei der manuellen Dateneingabe reduziert und die Effizienz gesteigert werden. Die extrahierten Daten fließen direkt in bestehende Systeme zur Analyse und Entscheidungsfindung ein. Funktionen wie Bildvorverarbeitung , Barcode-Erkennung und flexibles Datei-Parsing erhöhen seine Vielseitigkeit. IronOCR ermöglicht es Entwicklern, eine robuste Texterkennung in ihre Anwendungen zu integrieren.

Die Bibliothek unterstützt 125 internationale Sprachen durch spezielle Sprachpakete und ist damit ideal für die globale Rechnungsverarbeitung geeignet. Zu den erweiterten Funktionen gehört Computer Vision zur automatischen Texterkennung , was insbesondere bei Rechnungen mit unterschiedlichen Layouts nützlich ist. Darüber hinaus bietet IronOCR Multithread-Verarbeitungsfunktionen , um die Verarbeitung großer Rechnungsmengen effizient zu bewältigen.

Warum sollte ich IronOCR für die Rechnungsverarbeitung verwenden?

IronOCR bietet überzeugende Vorteile für Anwendungen zur Rechnungsverarbeitung. Erstens bietet es dank seiner optimierten Tesseract 5-Engine , die speziell für .NET-Anwendungen entwickelt wurde, eine außergewöhnliche Genauigkeit. Die Bibliothek verarbeitet verschiedene Rechnungsformate, von gescannten Dokumenten bis hin zu PDF-Dateien und sogar Scans mit geringer Qualität .

Integrierte Bildoptimierungsfilter verbessern automatisch die Bildqualität vor der Verarbeitung, was zu einer genaueren Textextraktion führt. Für Rechnungen mit besonderen Anforderungen unterstützt IronOCR das Training benutzerdefinierter Sprachen und ermöglicht so die Optimierung für spezielle Schriftarten oder Formate, die häufig in Ihren Rechnungsarten vorkommen.

Was unterscheidet IronOCR von anderen OCR-Bibliotheken?

IronOCR zeichnet sich durch seine einfache Einzeilen-OCR-Funktion aus und bietet gleichzeitig Funktionen auf Unternehmensebene. Im Gegensatz zu herkömmlichen Tesseract-Implementierungen bietet IronOCR eine verwaltete .NET-API, die komplexe Operationen nahtlos abwickelt. Die Bibliothek bietet spezielle Methoden zum Lesen von Dokumenten für verschiedene Dokumenttypen, einschließlich einer speziellen Unterstützung für das Lesen von Tabellen in Dokumenten , was für Rechnungspositionen unerlässlich ist.

Der Filterassistent ermittelt automatisch die besten Vorverarbeitungseinstellungen für Ihre spezifischen Rechnungsbilder und macht so das Rätselraten bei der Optimierung überflüssig. IronOCR bietet außerdem umfassende Debugging-Funktionen , die es Entwicklern ermöglichen, zu visualisieren, was die OCR-Engine sieht, und Extraktionsprobleme effektiv zu beheben.

Welche Voraussetzungen benötige ich?

Bevor Sie mit IronOCR arbeiten, stellen Sie sicher, dass folgende Voraussetzungen erfüllt sind:

  1. Eine geeignete Entwicklungsumgebung mit einer installierten IDE wie Visual Studio.
  2. Grundlegendes Verständnis der C#-Programmierung, um Codebeispiele effektiv zu verstehen und anzupassen.
  3. Die IronOCR-Bibliothek wurde über den NuGet-Paketmanager oder die Befehlszeile in Ihr Projekt installiert.

Wenn Sie diese Voraussetzungen erfüllen, sind Sie bestens gerüstet, um erfolgreich mit IronOCR zu arbeiten.

IronOCR bietet umfassende Einrichtungsanleitungen für Windows , Linux und macOS . Die Bibliothek unterstützt die Cloud-Bereitstellung mit spezifischen Tutorials für AWS Lambda und Azure Functions .

Welche Version von Visual Studio sollte ich verwenden?

IronOCR unterstützt Visual Studio-Versionen von 2017 bis zu den neuesten Versionen. Für optimale Kompatibilität und Zugriff auf die neuesten C#-Funktionen wird Visual Studio 2019 oder 2022 empfohlen. Die Bibliothek ist vollständig kompatibel mit .NET Framework, .NET Core und .NET 5+ und gewährleistet so Flexibilität in Ihrer Entwicklungsumgebung.

Für die plattformübergreifende Entwicklung eignet sich Visual Studio Code mit der C#-Erweiterung gut. Mobile-Entwickler können die Anleitungen von IronOCR für Android- und iOS -Implementierungen nutzen, wodurch es sich auch für .NET MAUI-Anwendungen eignet.

Welche C#-Kenntnisse benötige ich?

Für die grundlegende Implementierung einer OCR-Lösung für Rechnungen reichen mittlere C#-Kenntnisse aus. Sie sollten sich mit Folgendem wohlfühlen:

  • Konzepte der objektorientierten Programmierung
  • Arbeiten mit Streams und Datei-E/A
  • Grundlegende async/await-Muster
  • Reguläre Ausdrücke für die Mustererkennung
  • Ausnahmebehandlung für robustes Fehlermanagement

Dank des intuitiven API-Designs von IronOCR sind keine tiefgreifenden Fachkenntnisse in Bildverarbeitung oder maschinellem Lernen erforderlich. Die Bibliothek übernimmt komplexe Operationen intern, sodass Sie sich auf die Geschäftslogik konzentrieren können. Anfänger können mit einfachen OCR-Beispielen beginnen.

Wie erstelle ich ein neues Visual Studio-Projekt?

Um mit IronOCR zu beginnen, erstellen Sie zunächst ein neues Visual Studio-Projekt.

Öffnen Sie Visual Studio, gehen Sie zu Dateien, bewegen Sie den Mauszeiger über Neu und klicken Sie auf Projekt.

Die Visual Studio IDE zeigt das geöffnete Menü "Datei" mit den hervorgehobenen Optionen "Neu" und "Projekt" und demonstriert damit den ersten Schritt zur Erstellung eines neuen Invoice OCR API-Projekts. Neues Projekt

Im neuen Fenster wählen Sie "Konsolenanwendung" und klicken auf "Weiter".

Der Dialog "Neues Projekt erstellen" von Visual Studio zeigt verschiedene Projektvorlagen an. Die Option "Konsolenanwendung" ist hervorgehoben, um eine .NET Core-Befehlszeilenanwendung zu erstellen, die für die OCR-Verarbeitung von Rechnungen geeignet ist. Konsolenanwendung

Ein neues Fenster erscheint. Geben Sie den Projektnamen und den Projektort ein und klicken Sie dann auf Weiter.

Das neue Projektkonfigurationsfenster von Visual Studio zeigt die Projekteinstellungen für eine Konsolenanwendung namens "IronOCR" mit der Sprachauswahl C# und der Zielplattform Windows für die Implementierung der Rechnungs-OCR-API. Projektkonfiguration

Wählen Sie abschließend das Zielframework aus und klicken Sie auf Erstellen.

Der Visual Studio-Projekterstellungsassistent zeigt den Schritt "Zusätzliche Informationen" an, wobei das .NET Framework 5.0 für optimale IronOCR-Kompatibilität in der Rechnungsverarbeitungsanwendung ausgewählt ist. Ziel-Framework

Ihr neues Visual Studio-Projekt ist fertig. Lassen Sie uns IronOCR installieren.

Welcher Projekttyp eignet sich am besten für OCR-Anwendungen?

Obwohl dieses Tutorial der Einfachheit halber eine Konsolenanwendung verwendet, unterstützt IronOCR verschiedene Projekttypen:

  • Konsolenanwendungen : Ideal für die Stapelverarbeitung oder Kommandozeilen-Tools
  • Webanwendungen : Ideal zum Erstellen von APIs oder webbasierten Diensten
  • Windows Forms/WPF : Geeignet für Desktop-Anwendungen mit grafischer Benutzeroberfläche
  • .NET MAUI-Apps : Für plattformübergreifende Lösungen

Für die Verarbeitung großer Datenmengen empfiehlt sich die Implementierung von IronOCR in einer Windows-Dienst- oder Microservices-Architektur. Die Fortschrittsverfolgungsfunktionen der Bibliothek erleichtern die Überwachung von langlaufenden Vorgängen.

Welche .NET Framework-Version sollte ich anvisieren?

IronOCR bietet umfassende Kompatibilität mit verschiedenen .NET-Versionen . Für neue Projekte empfiehlt sich .NET 6.0 oder höher, um optimale Leistung und die neuesten Funktionen zu gewährleisten. Die Bibliothek bietet eine hervorragende Abwärtskompatibilität:

  • .NET Framework 4.6.2+ : Für ältere Unternehmensanwendungen
  • .NET Core 3.1 : Langfristige Unterstützung für stabile Bereitstellungen
  • .NET 5.0+ : Modernes Framework mit Leistungsverbesserungen
  • .NET Standard 2.0 : Maximale Kompatibilität über verschiedene Plattformen hinweg

Bei der Bereitstellung in Docker-Containern bietet .NET 6.0 oder höher kleinere Image-Größen und eine bessere Performance. Für Azure Functions werden sowohl .NET 6.0 als auch .NET Framework unterstützt.

Wie installiere ich IronOCR?

Es gibt zwei einfache Methoden zum Herunterladen und Installieren von IronOCR:

  1. Verwenden des Visual Studio NuGet-Paketmanagers
  2. Verwenden der Visual Studio-Befehlszeile

Wann sollte ich den NuGet-Paketmanager und wann die Befehlszeile verwenden?

Wählen Sie je nach Ihrem Arbeitsablauf zwischen der grafischen Benutzeroberfläche des NuGet-Paketmanagers und der Befehlszeile:

Die Benutzeroberfläche des NuGet-Paketmanagers funktioniert am besten, wenn:

  • Sie sind neu bei NuGet-Paketen
  • Sie möchten die IronOCR-Sprachpakete durchsuchen
  • Sie bevorzugen eine visuelle Bestätigung
  • Sie verwalten mehrere Pakete

Die Befehlszeile (Paket-Manager-Konsole) ist besonders geeignet, wenn:

  • Sie sind mit Befehlsschnittstellen vertraut.
  • Sie folgen vorgegebenen Bereitstellungsskripten Sie benötigen schnell bestimmte Versionen.
  • Sie verwenden erweiterte Installationsoptionen

Beide Methoden erzielen identische Ergebnisse – wählen Sie je nach Komfort und Anforderungen.

Welche zusätzlichen Sprachpakete benötige ich möglicherweise?

IronOCR unterstützt 125 internationale Sprachen durch spezielle Pakete. Für die Rechnungsverarbeitung sollten Sie Folgendes beachten:

Sprachpakete werden zusammen mit dem Hauptpaket IronOCR installiert und verbessern die Genauigkeit bei nicht-englischen Texten erheblich.

Verwendung des Visual Studio NuGet Package Manager

Binden Sie IronOCR mithilfe des Visual Studio NuGet-Paketmanagers in Ihr C#-Projekt ein.

Navigieren Sie zu Tools > NuGet-Paket-Manager > NuGet-Pakete für die Projektmappe verwalten

Die Visual Studio IDE zeigt die NuGet-Paketmanager-Oberfläche mit den Suchergebnissen für das IronOCR-Paket an und stellt Installationsoptionen sowie Paketdetails für die Einrichtung der OCR-Funktion für Rechnungen bereit. NuGet-Paket-Manager

Suchen Sie nach IronOCR und installieren Sie das Paket in Ihrem Projekt.

Die NuGet-Paketmanager-Oberfläche zeigt IronOCR v2022.1.0 und zugehörige Sprachpakete an, darunter OCR-Funktionen für Arabisch, Hebräisch und Spanisch, mit Versionsnummern und Beschreibungen für jedes spezialisierte Erkennungspaket. IronOCR-Paket im NuGet-Paket-Manager UI auswählen

Installieren Sie zusätzliche Sprachpakete mit der gleichen Methode.

Verwendung der Visual Studio Befehlszeile

  1. Gehen Sie in Visual Studio zu Tools > NuGet-Paket-Manager > Paket-Manager-Konsole
  2. Geben Sie diesen Befehl in der Paket-Manager-Konsole ein:

    Install-Package IronOcr

Die Visual Studio-Paket-Manager-Konsole zeigt die erfolgreiche Ausführung des Befehls "Install-Package IronOCR" und demonstriert damit die Installationsmethode der OCR-Bibliothek über die Befehlszeile. Paket-Manager-Konsole

Das Paket wird heruntergeladen und in Ihrem aktuellen Projekt installiert und ist sofort einsatzbereit.

Wie extrahiere ich Daten aus Rechnungen mit IronOCR?

Mit IronOCR lassen sich Rechnungsdaten ganz einfach und mit nur wenigen Codezeilen extrahieren. Dies ersetzt die manuelle Dateneingabe und optimiert Ihren Arbeitsablauf.

Hier ist eine Beispielrechnung zur Textextraktion:

Beispielrechnung mit Kundendaten, Rechnungsnummer INV/2023/00039, drei Positionen für Reinigungsdienstleistungen im Gesamtwert von 80,50 $, zeigt ein typisches Rechnungsformat für die OCR-Extraktion. Die Musterrechnung

Lassen Sie uns alle Daten aus dieser Rechnung extrahieren:

using IronOcr;
using System;

// Initialize a new instance of the IronTesseract class
// This is the main OCR engine that will process our invoice
var ocr = new IronTesseract();

// Configure OCR settings for better invoice processing
ocr.Configuration.BlackListCharacters = "~`$#^*_}{]___PROTECTED_LINK_48___ method from ___PROTECTED_LINK_49___ class. Key enhancements include:

- **Image preprocessing**: ___PROTECTED_LINK_50___ corrects tilted scans; ___PROTECTED_LINK_51___ removes artifacts
- **Resolution enhancement**: Setting ___PROTECTED_LINK_52___ improves recognition
- **Character blacklisting**: Prevents common OCR misinterpretations
- **Confidence scoring**: Assesses extraction reliability

!___PROTECTED_LINK_53___
**Invoice Parser**

### How Do I Handle Different Invoice Formats?

Invoice formats vary between vendors, but IronOCR provides flexible solutions:

1. **Template-based**: Define ___PROTECTED_LINK_54___
2. **Computer vision**: Use ___PROTECTED_LINK_55___ to locate text
3. **Table extraction**: Leverage ___PROTECTED_LINK_56___ for line items
4. **Multi-format**: Process ___PROTECTED_LINK_57___, ___PROTECTED_LINK_58___, and ___PROTECTED_LINK_59___

For complex layouts, implement the ___PROTECTED_LINK_60___ which uses machine learning to identify structures automatically.

### What Are Common Extraction Patterns for Invoice Data?

Invoice data follows recognizable patterns extractable using regular expressions with OCR results:

```csharp
using IronOcr;
using System;
using System.Text.`RegularExpressions`;
using System.Collections.Generic;

public class `InvoiceDataExtractor`
{
    private readonly `IronTesseract` ocr;

    public `InvoiceDataExtractor`()
    {
        ocr = new `IronTesseract`();
        // Configure for optimal invoice reading
        `ocr.Configuration`.`ReadBarcodes` = true; // Many invoices include barcodes
        `ocr.Configuration`.`TesseractVersion` = `TesseractVersion`.Tesseract5;
    }

    public `InvoiceData` `ExtractInvoiceData`(string imagePath)
    {
        var invoiceData = new `InvoiceData`();

        using (var input = new `OcrInput`(imagePath))
        {
            // Apply filters for better accuracy
            input.`EnhanceResolution`(300);
            `input.Sharpen`();

            var result = `ocr.Read`(input);
            var text = `result.Text`;

            // Extract invoice number
            invoiceData.`InvoiceNumber` = `ExtractPattern`(text, 
                @"INV[/-]?\d{4}[/-]?\d{5}|Invoice\s*#?\s*:?\s*(\d+)");

            // Extract dates
            invoiceData.`InvoiceDate` = `ExtractDate`(text, 
                @"Invoice\s*Date\s*:?\s*(\d{1,2}[/-]\d{1,2}[/-]\d{2,4})");
            invoiceData.`DueDate` = `ExtractDate`(text, 
                @"Due\s*Date\s*:?\s*(\d{1,2}[/-]\d{1,2}[/-]\d{2,4})");

            // Extract amounts
            `invoiceData.Total` = `ExtractAmount`(text, 
                @"Total\s*:?\s*\$?\s*([\d,]+\.?\d*)");
            `invoiceData.Tax` = `ExtractAmount`(text, 
                @"Tax\s*:?\s*\$?\s*([\d,]+\.?\d*)");

            // Extract vendor information
            invoiceData.`VendorName` = `ExtractVendorName`(text);

            // Extract line items using table detection
            invoiceData.`LineItems` = `ExtractLineItems`(result);

            // Extract any barcodes found
            if (`result.Barcodes`.Length > 0)
            {
                invoiceData.`BarcodeValues` = new List<string>();
                foreach (var barcode in `result.Barcodes`)
                {
                    invoiceData.`BarcodeValues`.Add(`barcode.Value`);
                }
            }
        }

        return invoiceData;
    }

    private string `ExtractPattern`(string text, string pattern)
    {
        var match = Regex.Match(text, pattern, `RegexOptions`.`IgnoreCase`);
        return `match.Success` ? `match.Value` : `string.Empty`;
    }

    private `DateTime`? `ExtractDate`(string text, string pattern)
    {
        var match = Regex.Match(text, pattern, `RegexOptions`.`IgnoreCase`);
        if (`match.Success` && `match.Groups`.Count > 1)
        {
            if (`DateTime`.`TryParse`(`match.Groups`[1].Value, out `DateTime` date))
                return date;
        }
        return null;
    }

    private decimal `ExtractAmount`(string text, string pattern)
    {
        var match = Regex.Match(text, pattern, `RegexOptions`.`IgnoreCase`);
        if (`match.Success` && `match.Groups`.Count > 1)
        {
            var amountStr = `match.Groups`[1].Value.Replace(",", "");
            if (decimal.`TryParse`(amountStr, out decimal amount))
                return amount;
        }
        return 0;
    }

    private string `ExtractVendorName`(string text)
    {
        // Usually the vendor name appears in the first few lines
        var lines = `text.Split`('\n');
        if (`lines.Length` > 0)
        {
            // Simple heuristic: first non-empty line that's not a common header
            foreach (var line in lines)
            {
                var trimmed = `line.Trim`();
                if (!string.`IsNullOrEmpty`(trimmed) && 
                    !trimmed.`ToLower`().Contains("invoice") &&
                    `trimmed.Length` > 3)
                {
                    return trimmed;
                }
            }
        }
        return `string.Empty`;
    }

    private List<`LineItem`> `ExtractLineItems`(`OcrResult` result)
    {
        var lineItems = new List<`LineItem`>();

        // Use IronOCR's table detection capabilities
        if (`result.Tables` != null && `result.Tables`.Count > 0)
        {
            foreach (var table in `result.Tables`)
            {
                // Process each row as a potential line item
                for (int i = 1; i < table.`RowCount`; i++) // Skip header row
                {
                    var item = new `LineItem`
                    {
                        Description = table[i, 0]?.Text ?? "",
                        Quantity = `ParseQuantity`(table[i, 1]?.Text),
                        `UnitPrice` = `ParseAmount`(table[i, 2]?.Text),
                        Total = `ParseAmount`(table[i, 3]?.Text)
                    };

                    if (!string.`IsNullOrEmpty`(`item.Description`))
                        `lineItems.Add`(item);
                }
            }
        }

        return lineItems;
    }

    private int `ParseQuantity`(string text)
    {
        if (string.`IsNullOrEmpty`(text)) return 0;
        var cleaned = Regex.Replace(text, @"[^\d]", "");
        return int.`TryParse`(cleaned, out int qty) ? qty : 0;
    }

    private decimal `ParseAmount`(string text)
    {
        if (string.`IsNullOrEmpty`(text)) return 0;
        var cleaned = Regex.Replace(text, @"[^\d.]", "");
        return decimal.`TryParse`(cleaned, out decimal amt) ? amt : 0;
    }
}

// Data classes for structured invoice information
public class `InvoiceData`
{
    public string `InvoiceNumber` { get; set; }
    public `DateTime`? `InvoiceDate` { get; set; }
    public `DateTime`? `DueDate` { get; set; }
    public string `VendorName` { get; set; }
    public decimal Total { get; set; }
    public decimal Tax { get; set; }
    public List<`LineItem`> `LineItems` { get; set; }
    public List<string> `BarcodeValues` { get; set; }
}

public class `LineItem`
{
    public string Description { get; set; }
    public int Quantity { get; set; }
    public decimal `UnitPrice` { get; set; }
    public decimal Total { get; set; }
}
using IronOcr;
using System;

// Initialize a new instance of the IronTesseract class
// This is the main OCR engine that will process our invoice
var ocr = new IronTesseract();

// Configure OCR settings for better invoice processing
ocr.Configuration.BlackListCharacters = "~`$#^*_}{]___PROTECTED_LINK_48___ method from ___PROTECTED_LINK_49___ class. Key enhancements include:

- **Image preprocessing**: ___PROTECTED_LINK_50___ corrects tilted scans; ___PROTECTED_LINK_51___ removes artifacts
- **Resolution enhancement**: Setting ___PROTECTED_LINK_52___ improves recognition
- **Character blacklisting**: Prevents common OCR misinterpretations
- **Confidence scoring**: Assesses extraction reliability

!___PROTECTED_LINK_53___
**Invoice Parser**

### How Do I Handle Different Invoice Formats?

Invoice formats vary between vendors, but IronOCR provides flexible solutions:

1. **Template-based**: Define ___PROTECTED_LINK_54___
2. **Computer vision**: Use ___PROTECTED_LINK_55___ to locate text
3. **Table extraction**: Leverage ___PROTECTED_LINK_56___ for line items
4. **Multi-format**: Process ___PROTECTED_LINK_57___, ___PROTECTED_LINK_58___, and ___PROTECTED_LINK_59___

For complex layouts, implement the ___PROTECTED_LINK_60___ which uses machine learning to identify structures automatically.

### What Are Common Extraction Patterns for Invoice Data?

Invoice data follows recognizable patterns extractable using regular expressions with OCR results:

```csharp
using IronOcr;
using System;
using System.Text.`RegularExpressions`;
using System.Collections.Generic;

public class `InvoiceDataExtractor`
{
    private readonly `IronTesseract` ocr;

    public `InvoiceDataExtractor`()
    {
        ocr = new `IronTesseract`();
        // Configure for optimal invoice reading
        `ocr.Configuration`.`ReadBarcodes` = true; // Many invoices include barcodes
        `ocr.Configuration`.`TesseractVersion` = `TesseractVersion`.Tesseract5;
    }

    public `InvoiceData` `ExtractInvoiceData`(string imagePath)
    {
        var invoiceData = new `InvoiceData`();

        using (var input = new `OcrInput`(imagePath))
        {
            // Apply filters for better accuracy
            input.`EnhanceResolution`(300);
            `input.Sharpen`();

            var result = `ocr.Read`(input);
            var text = `result.Text`;

            // Extract invoice number
            invoiceData.`InvoiceNumber` = `ExtractPattern`(text, 
                @"INV[/-]?\d{4}[/-]?\d{5}|Invoice\s*#?\s*:?\s*(\d+)");

            // Extract dates
            invoiceData.`InvoiceDate` = `ExtractDate`(text, 
                @"Invoice\s*Date\s*:?\s*(\d{1,2}[/-]\d{1,2}[/-]\d{2,4})");
            invoiceData.`DueDate` = `ExtractDate`(text, 
                @"Due\s*Date\s*:?\s*(\d{1,2}[/-]\d{1,2}[/-]\d{2,4})");

            // Extract amounts
            `invoiceData.Total` = `ExtractAmount`(text, 
                @"Total\s*:?\s*\$?\s*([\d,]+\.?\d*)");
            `invoiceData.Tax` = `ExtractAmount`(text, 
                @"Tax\s*:?\s*\$?\s*([\d,]+\.?\d*)");

            // Extract vendor information
            invoiceData.`VendorName` = `ExtractVendorName`(text);

            // Extract line items using table detection
            invoiceData.`LineItems` = `ExtractLineItems`(result);

            // Extract any barcodes found
            if (`result.Barcodes`.Length > 0)
            {
                invoiceData.`BarcodeValues` = new List<string>();
                foreach (var barcode in `result.Barcodes`)
                {
                    invoiceData.`BarcodeValues`.Add(`barcode.Value`);
                }
            }
        }

        return invoiceData;
    }

    private string `ExtractPattern`(string text, string pattern)
    {
        var match = Regex.Match(text, pattern, `RegexOptions`.`IgnoreCase`);
        return `match.Success` ? `match.Value` : `string.Empty`;
    }

    private `DateTime`? `ExtractDate`(string text, string pattern)
    {
        var match = Regex.Match(text, pattern, `RegexOptions`.`IgnoreCase`);
        if (`match.Success` && `match.Groups`.Count > 1)
        {
            if (`DateTime`.`TryParse`(`match.Groups`[1].Value, out `DateTime` date))
                return date;
        }
        return null;
    }

    private decimal `ExtractAmount`(string text, string pattern)
    {
        var match = Regex.Match(text, pattern, `RegexOptions`.`IgnoreCase`);
        if (`match.Success` && `match.Groups`.Count > 1)
        {
            var amountStr = `match.Groups`[1].Value.Replace(",", "");
            if (decimal.`TryParse`(amountStr, out decimal amount))
                return amount;
        }
        return 0;
    }

    private string `ExtractVendorName`(string text)
    {
        // Usually the vendor name appears in the first few lines
        var lines = `text.Split`('\n');
        if (`lines.Length` > 0)
        {
            // Simple heuristic: first non-empty line that's not a common header
            foreach (var line in lines)
            {
                var trimmed = `line.Trim`();
                if (!string.`IsNullOrEmpty`(trimmed) && 
                    !trimmed.`ToLower`().Contains("invoice") &&
                    `trimmed.Length` > 3)
                {
                    return trimmed;
                }
            }
        }
        return `string.Empty`;
    }

    private List<`LineItem`> `ExtractLineItems`(`OcrResult` result)
    {
        var lineItems = new List<`LineItem`>();

        // Use IronOCR's table detection capabilities
        if (`result.Tables` != null && `result.Tables`.Count > 0)
        {
            foreach (var table in `result.Tables`)
            {
                // Process each row as a potential line item
                for (int i = 1; i < table.`RowCount`; i++) // Skip header row
                {
                    var item = new `LineItem`
                    {
                        Description = table[i, 0]?.Text ?? "",
                        Quantity = `ParseQuantity`(table[i, 1]?.Text),
                        `UnitPrice` = `ParseAmount`(table[i, 2]?.Text),
                        Total = `ParseAmount`(table[i, 3]?.Text)
                    };

                    if (!string.`IsNullOrEmpty`(`item.Description`))
                        `lineItems.Add`(item);
                }
            }
        }

        return lineItems;
    }

    private int `ParseQuantity`(string text)
    {
        if (string.`IsNullOrEmpty`(text)) return 0;
        var cleaned = Regex.Replace(text, @"[^\d]", "");
        return int.`TryParse`(cleaned, out int qty) ? qty : 0;
    }

    private decimal `ParseAmount`(string text)
    {
        if (string.`IsNullOrEmpty`(text)) return 0;
        var cleaned = Regex.Replace(text, @"[^\d.]", "");
        return decimal.`TryParse`(cleaned, out decimal amt) ? amt : 0;
    }
}

// Data classes for structured invoice information
public class `InvoiceData`
{
    public string `InvoiceNumber` { get; set; }
    public `DateTime`? `InvoiceDate` { get; set; }
    public `DateTime`? `DueDate` { get; set; }
    public string `VendorName` { get; set; }
    public decimal Total { get; set; }
    public decimal Tax { get; set; }
    public List<`LineItem`> `LineItems` { get; set; }
    public List<string> `BarcodeValues` { get; set; }
}

public class `LineItem`
{
    public string Description { get; set; }
    public int Quantity { get; set; }
    public decimal `UnitPrice` { get; set; }
    public decimal Total { get; set; }
}
$vbLabelText   $csharpLabel

Rechnungsverarbeitung zur Extraktion spezifischer Daten aus Rechnungen

Mit diesem Code können Sie spezifische Rechnungsdaten wie Kundenrechnungsnummern extrahieren:

using IronOcr;
using System;
using System.Text.`RegularExpressions`;

// Initialize a new instance of the `IronTesseract` class
var ocr = new `IronTesseract`();

// Use the `OcrInput` object to load the image file
using (var input = new `OcrInput`(@"`r2.png`"))
{
    // Perform OCR on the image
    var result = `ocr.Read`(input);

    // Define a regular expression pattern for the invoice number
    var linePattern = @"INV\/\d{4}\/\d{5}";

    // Match the pattern in the extracted text
    var lineMatch = Regex.Match(`result.Text`, linePattern);

    // Check if the pattern matches any part of the text
    if (`lineMatch.Success`)
    {
        // If a match is found, print the invoice number
        var lineValue = `lineMatch.Value`;
        Console.`WriteLine`("Customer Invoice number: " + lineValue);
    }
}
using IronOcr;
using System;
using System.Text.`RegularExpressions`;

// Initialize a new instance of the `IronTesseract` class
var ocr = new `IronTesseract`();

// Use the `OcrInput` object to load the image file
using (var input = new `OcrInput`(@"`r2.png`"))
{
    // Perform OCR on the image
    var result = `ocr.Read`(input);

    // Define a regular expression pattern for the invoice number
    var linePattern = @"INV\/\d{4}\/\d{5}";

    // Match the pattern in the extracted text
    var lineMatch = Regex.Match(`result.Text`, linePattern);

    // Check if the pattern matches any part of the text
    if (`lineMatch.Success`)
    {
        // If a match is found, print the invoice number
        var lineValue = `lineMatch.Value`;
        Console.`WriteLine`("Customer Invoice number: " + lineValue);
    }
}
$vbLabelText   $csharpLabel

Die Visual Studio-Debugkonsole zeigt die erfolgreiche PDF-Erstellung mit der Kundenrechnungsnummer INV/2023/00039 an, die mit IronOCR extrahiert wurde. Dies bestätigt, dass der OCR-Prozess fehlerfrei abgeschlossen wurde. Rechnung Scanning

Für komplexe Extraktionsszenarien verwenden Sie spezielle OCR-Konfigurationen , um die Verarbeitung für Ihre Rechnungstypen zu optimieren. Die Klasse "OcrResult" liefert detaillierte Informationen zu jedem erkannten Element, einschließlich Koordinaten und Konfidenzwerten zur Validierung.

Was sind die wichtigsten Vorteile der Invoice OCR API?

Die Invoice OCR API von IronOCR revolutioniert die Rechnungsverarbeitung durch maschinelles Lernen und Computer Vision. Diese Technologie wandelt Rechnungstexte in maschinenlesbare Formate um und vereinfacht so die Datenextraktion für Analyse, Integration und Prozessverbesserung. Es bietet eine robuste Automatisierung für die Rechnungsverarbeitung, verbessert die Genauigkeit und optimiert Arbeitsabläufe wie die Kreditorenbuchhaltung.

IronOCR bietet außergewöhnliche Genauigkeit durch optimierte Tesseract-Ergebnisse ohne zusätzliche Konfiguration. Sie unterstützt Multipage frame TIFF, PDF-Dateien und alle gängigen Bildformate. Das Auslesen von Barcodes aus Bildern eröffnet eine weitere Extraktionsdimension.

Wichtigste Vorteile der Rechnungsverarbeitung:

  1. Zeitersparnis : Stunden auf Sekunden reduzieren
  2. Genauigkeit : Minimieren Sie Fehler durch Konfidenzbewertung.
  3. Skalierbarkeit : Tausende Prozesse mit Multithreading verarbeiten
  4. Integration : Export in durchsuchbare PDFs oder strukturierte Formate
  5. Kostenreduzierung : Niedrigere Betriebskosten

Die flexible Bereitstellung der Bibliothek ermöglicht die Integration in bestehende Systeme – lokal, in der Cloud oder hybrid. Dank der Unterstützung für Docker , Azure und AWS skaliert IronOCR mit Ihren Bedürfnissen.

Produktionsumgebungen profitieren von den Lizenzierungsoptionen von IronOCR, einschließlich dediziertem Support und regelmäßigen Updates . Die Fehlerbehebungsleitfäden und der technische Support der Bibliothek gewährleisten eine reibungslose Implementierung.

Besuchen Sie die Homepage für weitere Informationen zu IronOCR. Weitere Anleitungen zur Rechnungs-OCR finden Sie in diesem ausführlichen Leitfaden zur Rechnungs-OCR . Um mehr über die Verwendung von Computer Vision für Rechnungsfelder zu erfahren, sehen Sie sich dieses Computer-Vision-Tutorial an.

Häufig gestellte Fragen

Wie kann ich die Rechnungsdatenverarbeitung mit OCR automatisieren?

Sie können IronOCR verwenden, um die Rechnungsdatenverarbeitung zu automatisieren, indem Sie seine maschinellen Lernalgorithmen nutzen. IronOCR extrahiert Details wie Lieferanteninformationen, Rechnungsnummern und Preise aus digitalen und gescannten Rechnungen, wodurch manuelle Eingabefehler reduziert und die Effizienz gesteigert wird.

Welche Schritte sind bei der Einrichtung einer Rechnungs-OCR-API beteiligt?

Um eine Rechnungs-OCR-API mit IronOCR einzurichten, beginnen Sie mit dem Herunterladen und Installieren der Bibliothek über den NuGet Package Manager von Visual Studio. Erstellen Sie anschließend ein neues C#-Projekt, integrieren Sie IronOCR und verwenden Sie seine Methoden, um Bilddateien zu laden und zu lesen, um Text zu extrahieren.

Kann IronOCR spezifische Daten wie Rechnungsnummern extrahieren?

Ja, IronOCR kann spezifische Daten wie Rechnungsnummern extrahieren. Es nutzt reguläre Ausdrücke, um Muster im extrahierten Text zu erkennen, sodass Sie spezifische Informationen aus Rechnungen entnehmen können.

Welche Merkmale von IronOCR sind vorteilhaft für die Rechnungsverarbeitung?

IronOCR umfasst Funktionen wie Bildvorverarbeitung, Barcode-Erkennung und Dateiparsing. Diese verbessern seine Fähigkeit, Text aus verschiedenen Rechnungsformaten genau zu extrahieren und zu verarbeiten, was die Datenerfassung und Workflow-Effizienz steigert.

Wie kann die Bildvorverarbeitung die OCR-Ergebnisse verbessern?

Die Bildvorverarbeitung in IronOCR hilft, OCR-Ergebnisse zu verbessern, indem die Bildqualität vor der Textextraktion optimiert wird. Dies beinhaltet Vorgänge wie Kontrasteinstellung und Rauschunterdrückung, die zu einer genaueren Datenerfassung aus Rechnungen führen können.

Ist es möglich, IronOCR für sowohl digitale als auch gescannte Rechnungen zu verwenden?

Ja, IronOCR ist in der Lage, sowohl digitale als auch gescannte Rechnungen zu verarbeiten. Es verwendet fortschrittliche maschinelle Lern- und Computervisionstechniken, um Text aus verschiedenen Formaten und Bildqualitäten genau zu extrahieren.

Wie geht IronOCR mit verschiedenen Seitenformaten und Dateitypen um?

IronOCR unterstützt mehrere Seitenformate und beliebte Bild- und PDF-Dateitypen. Es kann effizient Text aus komplexen Dokumenten extrahieren, was es vielseitig für verschiedene Rechnungsverarbeitungsanwendungen macht.

Wo finden Entwickler Tutorials zur Verwendung von IronOCR?

Entwickler können Tutorials und zusätzliche Ressourcen auf der IronOCR-Website finden. Die Seite bietet eine Vielzahl an Lernmaterialien, einschließlich Anleitungen und Blogbeiträge zur Anwendung von IronOCR in unterschiedlichen Szenarien.

Kannaopat Udonpant
Software Ingenieur
Bevor er Software-Ingenieur wurde, absolvierte Kannapat ein PhD in Umweltressourcen an der Hokkaido University in Japan. Während seines Studiums wurde Kannapat auch Mitglied des Vehicle Robotics Laboratory, das Teil der Fakultät für Bioproduktionstechnik ist. Im Jahr 2022 nutzte er seine C#-Kenntnisse, um dem Engineering-Team von Iron Software ...
Weiterlesen