
API de digitalização de recibos: Extraia dados de recibos usando C# e IronOCR
APIs de digitalização de recibos automatizam a extração de dados de recibos usando tecnologia OCR, reduzindo significativamente erros de entrada manual e acelerando o processamento. Este guia mostra como usar o IronOCR em C# para extrair com precisão nomes de fornecedores, datas, itens, preços e totais de imagens de recibos, com pré-processamento de imagem embutido e suporte para múltiplos formatos.
Por Que Escolher o IronOCR para Digitalização de Recibos?
O IronOCR é uma biblioteca OCR flexível que oferece extração de texto confiável de documentos escaneados, imagens e PDFs. Com algoritmos avançados, visão computacional e modelos de aprendizado de máquina, o IronOCR garante alta precisão mesmo em cenários desafiadores. A biblioteca suporta múltiplos idiomas e estilos de fonte, tornando-a adequada para aplicações globais. Ao incorporar o IronOCR em suas aplicações, você pode automatizar a entrada de dados e a análise de texto, aumentando a produtividade.
Como o IronOCR Extrai Texto de Imagens de Recibos?
O IronOCR recupera texto de documentos, fotografias, capturas de tela e transmissões ao vivo de câmera como respostas JSON. Usando algoritmos sofisticados e aprendizado de máquina, o IronOCR analisa dados de imagem, reconhece caracteres e os converte em texto legível por máquina. A biblioteca usa a tecnologia Tesseract 5 aprimorada com melhorias proprietárias para obter maior precisão.
Por Que o IronOCR é Excelente para Processamento de Recibos?
O IronOCR se destaca ao lidar com escaneamentos de baixa qualidade, diferentes formatos de recibos e orientações distintas. Filtros embutidos de pré-processamento de imagem melhoram automaticamente a qualidade da imagem antes do processamento, garantindo resultados ótimos mesmo em recibos amassados ou desbotados.
O Que Eu Preciso para Usar o IronOCR?
Antes de trabalhar com o IronOCR, certifique-se de que estes pré-requisitos estejam em vigor:
Quais Ambientes de Desenvolvimento são Suportados?
- Ambiente de Desenvolvimento: Instale um IDE adequado como o Visual Studio. O IronOCR suporta Windows, Linux, macOS, Azure e AWS.
Quais Habilidades de Programação São Necessárias?
- Conhecimento de C#: Compreensão básica de C# ajuda a modificar exemplos de código. IronOCR fornece exemplos simples e documentação da API.
Quais dependências de software são necessárias?
- Instalação do IronOCR: Instale via Gerenciador de Pacotes NuGet. Dependências específicas da plataforma podem ser necessárias.
Uma chave de licença é necessária?
- Chave de Licença (Opcional): Teste gratuito disponível; uso em produção requer uma licença.
Como criar um novo projeto do Visual Studio para escaneamento de recibo?
Como iniciar um novo projeto no Visual Studio?
Abra o Visual Studio e vá para Arquivos, depois passe o mouse sobre Novo e clique em Projeto.
Imagem de Novo Projeto
Qual modelo de projeto devo escolher?
Selecione Aplicativo de Console e clique em Avançar. Este modelo é ideal para aprender IronOCR antes de implementar em aplicações web.
Aplicativo de Console
Como devo nomear meu projeto de escaneamento de recibo?
Escreva o nome e localização do seu projeto, depois clique em Avançar. Escolha um nome descritivo como "ReceiptScannerAPI".
Configuração do projeto
Qual Versão do .NET Framework Devo Selecionar?
Selecione .NET 5.0 ou posterior para compatibilidade ideal, então clique em Criar.
Estrutura Alvo
Como instalar o IronOCR no meu projeto?
Duas formas simples de instalação estão disponíveis:
Como usar o método do Gerenciador de Pacotes NuGet?
Vá para Ferramentas > Gerenciador de Pacotes NuGet > Gerenciar Pacotes NuGet para a Solução
Gerenciador de Pacotes NuGet
Procure por IronOCR e instale o pacote. Para recibos em idiomas não-ingleses, instale pacotes específicos de idiomas.
IronOCR
Como usar a instalação pela linha de comando?
-
Vá para Ferramentas > Gerenciador de Pacotes NuGet > Console do Gerenciador de Pacotes
-
Insira este comando:
Console do Gerenciador de Pacotes
Como posso extrair rapidamente dados de recibos com IronOCR?
Extraia dados de recibos com apenas algumas linhas de código:
-
1Install IronOCR with NuGet Package Manager
-
2Copie e execute este trecho de código.
using IronOcr; using System; var ocr = new IronTesseract(); // Configure for receipt scanning ocr.Configuration.ReadBarCodes = true; ocr.Configuration.WhiteListCharacters = "0123456789.$,ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz% "; using (var input = new OcrInput(@"receipt.jpg")) { // Apply automatic image enhancement input.DeNoise(); input.Deskew(); input.EnhanceResolution(225); // Extract text from receipt var result = ocr.Read(input); // Display extracted text and confidence Console.WriteLine($"Extracted Text:\n{result.Text}"); Console.WriteLine($"\nConfidence: {result.Confidence}%"); }C# -
3Implante para testar em seu ambiente de produção.
Comece a usar IronOCR em seu projeto hoje com uma avaliação gratuita
Como extraio dados estruturados de imagens de recibos?
IronOCR extrai itens de linha, preços, impostos e totais de vários tipos de documentos. A biblioteca suporta PDFs, TIFFs de múltiplas páginas, e vários formatos de imagem.
using IronOcr;
using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;
class ReceiptScanner
{
static void Main()
{
var ocr = new IronTesseract();
// Configure OCR for optimal receipt reading
ocr.Configuration.WhiteListCharacters = "0123456789.$,ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz% ";
ocr.Configuration.BlackListCharacters = "~`@#*_}{][|\\";
ocr.Configuration.TesseractVersion = TesseractVersion.Tesseract5;
// Load the image of the receipt
using (var input = new OcrInput(@"r2.png"))
{
// Apply image enhancement filters
input.Deskew(); // Fix image rotation
input.EnhanceResolution(225); // Optimal DPI for receipts
input.DeNoise(); // Remove background noise
input.Sharpen(); // Improve text clarity
// Perform OCR on the input image
var result = ocr.Read(input);
// Regular expression patterns to extract relevant details from the OCR result
var descriptionPattern = @"\w+\s+(.*?)\s+(\d+\.\d+)\s+Units\s+(\d+\.\d+)\s+Tax15%\s+\$(\d+\.\d+)";
var pricePattern = @"\$\d+(\.\d{2})?";
var datePattern = @"\d{1,2}[/-]\d{1,2}[/-]\d{2,4}";
// Variables to store extracted data
var descriptions = new List<string>();
var unitPrices = new List<decimal>();
var taxes = new List<decimal>();
var amounts = new List<decimal>();
var lines = result.Text.Split('\n');
foreach (var line in lines)
{
// Match each line against the description pattern
var descriptionMatch = Regex.Match(line, descriptionPattern);
if (descriptionMatch.Success)
{
descriptions.Add(descriptionMatch.Groups[1].Value.Trim());
unitPrices.Add(decimal.Parse(descriptionMatch.Groups[2].Value));
// Calculate tax and total amount for each item
var tax = unitPrices[unitPrices.Count - 1] * 0.15m;
taxes.Add(tax);
amounts.Add(unitPrices[unitPrices.Count - 1] + tax);
}
// Extract date if found
var dateMatch = Regex.Match(line, datePattern);
if (dateMatch.Success)
{
Console.WriteLine($"Receipt Date: {dateMatch.Value}");
}
}
// Output the extracted data
for (int i = 0; i < descriptions.Count; i++)
{
Console.WriteLine($"Description: {descriptions[i]}");
Console.WriteLine($"Quantity: 1.00 Units");
Console.WriteLine($"Unit Price: ${unitPrices[i]:0.00}");
Console.WriteLine($"Taxes: ${taxes[i]:0.00}");
Console.WriteLine($"Amount: ${amounts[i]:0.00}");
Console.WriteLine("-----------------------");
}
// Calculate and display totals
var subtotal = unitPrices.Sum();
var totalTax = taxes.Sum();
var grandTotal = amounts.Sum();
Console.WriteLine($"\nSubtotal: ${subtotal:0.00}");
Console.WriteLine($"Total Tax: ${totalTax:0.00}");
Console.WriteLine($"Grand Total: ${grandTotal:0.00}");
}
}
}Imports IronOcr
Imports System
Imports System.Collections.Generic
Imports System.Text.RegularExpressions
Class ReceiptScanner
Shared Sub Main()
Dim ocr = New IronTesseract()
' Configure OCR for optimal receipt reading
ocr.Configuration.WhiteListCharacters = "0123456789.$,ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz% "
ocr.Configuration.BlackListCharacters = "~`@#*_}{][|\"
ocr.Configuration.TesseractVersion = TesseractVersion.Tesseract5
' Load the image of the receipt
Using input = New OcrInput("r2.png")
' Apply image enhancement filters
input.Deskew() ' Fix image rotation
input.EnhanceResolution(225) ' Optimal DPI for receipts
input.DeNoise() ' Remove background noise
input.Sharpen() ' Improve text clarity
' Perform OCR on the input image
Dim result = ocr.Read(input)
' Regular expression patterns to extract relevant details from the OCR result
Dim descriptionPattern = "\w+\s+(.*?)\s+(\d+\.\d+)\s+Units\s+(\d+\.\d+)\s+Tax15%\s+\$(\d+\.\d+)"
Dim pricePattern = "\$\d+(\.\d{2})?"
Dim datePattern = "\d{1,2}[/-]\d{1,2}[/-]\d{2,4}"
' Variables to store extracted data
Dim descriptions = New List(Of String)()
Dim unitPrices = New List(Of Decimal)()
Dim taxes = New List(Of Decimal)()
Dim amounts = New List(Of Decimal)()
Dim lines = result.Text.Split(ControlChars.Lf)
For Each line In lines
' Match each line against the description pattern
Dim descriptionMatch = Regex.Match(line, descriptionPattern)
If descriptionMatch.Success Then
descriptions.Add(descriptionMatch.Groups(1).Value.Trim())
unitPrices.Add(Decimal.Parse(descriptionMatch.Groups(2).Value))
' Calculate tax and total amount for each item
Dim tax = unitPrices(unitPrices.Count - 1) * 0.15D
taxes.Add(tax)
amounts.Add(unitPrices(unitPrices.Count - 1) + tax)
End If
' Extract date if found
Dim dateMatch = Regex.Match(line, datePattern)
If dateMatch.Success Then
Console.WriteLine($"Receipt Date: {dateMatch.Value}")
End If
Next
' Output the extracted data
For i As Integer = 0 To descriptions.Count - 1
Console.WriteLine($"Description: {descriptions(i)}")
Console.WriteLine("Quantity: 1.00 Units")
Console.WriteLine($"Unit Price: ${unitPrices(i):0.00}")
Console.WriteLine($"Taxes: ${taxes(i):0.00}")
Console.WriteLine($"Amount: ${amounts(i):0.00}")
Console.WriteLine("-----------------------")
Next
' Calculate and display totals
Dim subtotal = unitPrices.Sum()
Dim totalTax = taxes.Sum()
Dim grandTotal = amounts.Sum()
Console.WriteLine(vbCrLf & $"Subtotal: ${subtotal:0.00}")
Console.WriteLine($"Total Tax: ${totalTax:0.00}")
Console.WriteLine($"Grand Total: ${grandTotal:0.00}")
End Using
End Sub
End ClassQuais técnicas melhoram a precisão do escaneamento de recibo?
Técnicas-chave para escaneamento preciso de recibos:
- Lista branca de caracteres: Limita o reconhecimento a caracteres esperados
- Pré-processamento de imagens: Usa deskewing, aprimoramento de resolução, e redução de ruído
- Correspondência de padrões: Extrai dados estruturados usando expressões regulares
- Avaliação de confiança: Valida resultados com base na confiança de reconhecimento
Saída
Como extraio o conteúdo completo do recibo?
Extraia todo o conteúdo do recibo com formatação preservada:
using IronOcr;
using System;
using System.Linq;
class WholeReceiptExtractor
{
static void Main()
{
var ocr = new IronTesseract();
// Configure for receipt scanning
ocr.Configuration.ReadBarCodes = true; // Enable barcode detection
ocr.Configuration.TesseractVersion = TesseractVersion.Tesseract5; // Use latest engine
ocr.Configuration.EngineMode = TesseractEngineMode.TesseractAndLstm; // Best accuracy
using (var input = new OcrInput(@"r3.png"))
{
// Apply automatic image correction
input.WithTitle("Receipt Scan");
// Use computer vision to find text regions
var textRegions = input.FindTextRegions();
Console.WriteLine($"Found {textRegions.Count()} text regions");
// Apply optimal filters for receipt processing
input.ApplyOcrInputFilters();
// Perform OCR on the entire receipt
var result = ocr.Read(input);
// Display extracted text
Console.WriteLine("=== EXTRACTED RECEIPT TEXT ===");
Console.WriteLine(result.Text);
// Get detailed results
Console.WriteLine($"\n=== OCR STATISTICS ===");
Console.WriteLine($"OCR Confidence: {result.Confidence:F2}%");
Console.WriteLine($"Pages Processed: {result.Pages.Length}");
Console.WriteLine($"Paragraphs Found: {result.Paragraphs.Length}");
Console.WriteLine($"Lines Detected: {result.Lines.Length}");
Console.WriteLine($"Words Recognized: {result.Words.Length}");
// Extract any barcodes found
if (result.Barcodes.Any())
{
Console.WriteLine("\n=== BARCODES DETECTED ===");
foreach(var barcode in result.Barcodes)
{
Console.WriteLine($"Type: {barcode.Type}");
Console.WriteLine($"Value: {barcode.Value}");
Console.WriteLine($"Location: X={barcode.X}, Y={barcode.Y}");
}
}
// Save as searchable PDF
result.SaveAsSearchablePdf("receipt_searchable.pdf");
Console.WriteLine("\nSearchable PDF saved as: receipt_searchable.pdf");
// Export as hOCR for preservation
result.SaveAsHocrFile("receipt_hocr.html");
Console.WriteLine("hOCR file saved as: receipt_hocr.html");
}
}
}Imports IronOcr
Imports System
Imports System.Linq
Class WholeReceiptExtractor
Shared Sub Main()
Dim ocr = New IronTesseract()
' Configure for receipt scanning
ocr.Configuration.ReadBarCodes = True ' Enable barcode detection
ocr.Configuration.TesseractVersion = TesseractVersion.Tesseract5 ' Use latest engine
ocr.Configuration.EngineMode = TesseractEngineMode.TesseractAndLstm ' Best accuracy
Using input = New OcrInput("r3.png")
' Apply automatic image correction
input.WithTitle("Receipt Scan")
' Use computer vision to find text regions
Dim textRegions = input.FindTextRegions()
Console.WriteLine($"Found {textRegions.Count()} text regions")
' Apply optimal filters for receipt processing
input.ApplyOcrInputFilters()
' Perform OCR on the entire receipt
Dim result = ocr.Read(input)
' Display extracted text
Console.WriteLine("=== EXTRACTED RECEIPT TEXT ===")
Console.WriteLine(result.Text)
' Get detailed results
Console.WriteLine(vbCrLf & "=== OCR STATISTICS ===")
Console.WriteLine($"OCR Confidence: {result.Confidence:F2}%")
Console.WriteLine($"Pages Processed: {result.Pages.Length}")
Console.WriteLine($"Paragraphs Found: {result.Paragraphs.Length}")
Console.WriteLine($"Lines Detected: {result.Lines.Length}")
Console.WriteLine($"Words Recognized: {result.Words.Length}")
' Extract any barcodes found
If result.Barcodes.Any() Then
Console.WriteLine(vbCrLf & "=== BARCODES DETECTED ===")
For Each barcode In result.Barcodes
Console.WriteLine($"Type: {barcode.Type}")
Console.WriteLine($"Value: {barcode.Value}")
Console.WriteLine($"Location: X={barcode.X}, Y={barcode.Y}")
Next
End If
' Save as searchable PDF
result.SaveAsSearchablePdf("receipt_searchable.pdf")
Console.WriteLine(vbCrLf & "Searchable PDF saved as: receipt_searchable.pdf")
' Export as hOCR for preservation
result.SaveAsHocrFile("receipt_hocr.html")
Console.WriteLine("hOCR file saved as: receipt_hocr.html")
End Using
End Sub
End Class
Saída da API de digitalização de recibo
Quais recursos avançados melhoram a digitalização de recibos?
IronOCR oferece vários recursos avançados que melhoram significativamente a precisão da digitalização de recibos:
Quais idiomas o IronOCR suporta?
- Suporte a vários idiomas: Procese recibos em 125+ idiomas ou múltiplos idiomas em um documento.
O IronOCR pode ler códigos de barras em recibos?
- Leitura de código de barras: Detecta e lê automaticamente códigos de barras e códigos QR.
Como a visão computacional ajuda no processamento de recibos?
- Visão Computacional: Use detecção de texto avançada para localizar regiões de texto antes do OCR.
Posso treinar modelos personalizados para formatos únicos de recibo?
- Treinamento Personalizado: Treine fontes personalizadas para formatos de recibo especializados.
Como posso melhorar o desempenho para processamento em massa?
- Otimização de Desempenho: Implemente multithreading e processamento assíncrono para operações em massa.
// Example: Async receipt processing for high-volume scenarios
using IronOcr;
using System;
using System.Threading.Tasks;
using System.Collections.Generic;
using System.IO;
class BulkReceiptProcessor
{
static async Task Main()
{
var ocr = new IronTesseract();
// Configure for optimal performance
ocr.Configuration.TesseractVersion = TesseractVersion.Tesseract5;
ocr.Configuration.UseMultiThreading = true;
ocr.Configuration.ProcessorCount = Environment.ProcessorCount;
// Process multiple receipts asynchronously
var receiptFiles = Directory.GetFiles(@"C:\Receipts\", "*.jpg");
var tasks = new List<Task<OcrResult>>();
foreach (var file in receiptFiles)
{
tasks.Add(ProcessReceiptAsync(ocr, file));
}
// Wait for all receipts to be processed
var results = await Task.WhenAll(tasks);
// Aggregate results
decimal totalAmount = 0;
foreach (var result in results)
{
// Extract total from each receipt
var match = System.Text.RegularExpressions.Regex.Match(
result.Text, @"Total:?\s*\$?(\d+\.\d{2})");
if (match.Success && decimal.TryParse(match.Groups[1].Value, out var amount))
{
totalAmount += amount;
}
}
Console.WriteLine($"Processed {results.Length} receipts");
Console.WriteLine($"Combined total: ${totalAmount:F2}");
}
static async Task<OcrResult> ProcessReceiptAsync(IronTesseract ocr, string filePath)
{
using (var input = new OcrInput(filePath))
{
// Apply preprocessing
input.DeNoise();
input.Deskew();
input.EnhanceResolution(200);
// Process asynchronously
return await ocr.ReadAsync(input);
}
}
}' Example: Async receipt processing for high-volume scenarios
Imports IronOcr
Imports System
Imports System.Threading.Tasks
Imports System.Collections.Generic
Imports System.IO
Class BulkReceiptProcessor
Shared Async Function Main() As Task
Dim ocr = New IronTesseract()
' Configure for optimal performance
ocr.Configuration.TesseractVersion = TesseractVersion.Tesseract5
ocr.Configuration.UseMultiThreading = True
ocr.Configuration.ProcessorCount = Environment.ProcessorCount
' Process multiple receipts asynchronously
Dim receiptFiles = Directory.GetFiles("C:\Receipts\", "*.jpg")
Dim tasks = New List(Of Task(Of OcrResult))()
For Each file In receiptFiles
tasks.Add(ProcessReceiptAsync(ocr, file))
Next
' Wait for all receipts to be processed
Dim results = Await Task.WhenAll(tasks)
' Aggregate results
Dim totalAmount As Decimal = 0
For Each result In results
' Extract total from each receipt
Dim match = System.Text.RegularExpressions.Regex.Match(result.Text, "Total:?\s*\$?(\d+\.\d{2})")
If match.Success AndAlso Decimal.TryParse(match.Groups(1).Value, amount) Then
totalAmount += amount
End If
Next
Console.WriteLine($"Processed {results.Length} receipts")
Console.WriteLine($"Combined total: ${totalAmount:F2}")
End Function
Shared Async Function ProcessReceiptAsync(ocr As IronTesseract, filePath As String) As Task(Of OcrResult)
Using input = New OcrInput(filePath)
' Apply preprocessing
input.DeNoise()
input.Deskew()
input.EnhanceResolution(200)
' Process asynchronously
Return Await ocr.ReadAsync(input)
End Using
End Function
End ClassComo lido com desafios comuns de digitalização de recibos?
A digitalização de recibos apresenta desafios únicos que o IronOCR ajuda a resolver:
Como lido com imagens de recibos de baixa qualidade?
- Imagens de baixa qualidade: Use o Assistente de Filtro para encontrar automaticamente as configurações ótimas de pré-processamento.
O que fazer com recibos enviesados ou girados?
- Recibos enviesados ou girados: A detecção automática de rotação de página garante a orientação correta.
Como processo recibos apagados ou com baixo contraste?
- Texto apagado ou de baixo contraste: Aplique correção de cor e filtros de aprimoramento.
O IronOCR pode lidar com recibos amassados ou danificados?
- Recibos amassados ou danificados: Pré-processamento avançado recupera texto de imagens desafiadoras.
Como gerencio diferentes formatos e layouts de recibos?
Os formatos de recibo variam amplamente entre os varejistas. IronOCR oferece abordagens flexíveis:
using IronOcr;
using System;
using System.Collections.Generic;
using System.Linq;
class ReceiptLayoutHandler
{
static void Main()
{
var ocr = new IronTesseract();
// Configure for different receipt layouts
ocr.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.AutoOsd;
ocr.Configuration.EngineMode = TesseractEngineMode.TesseractAndLstm;
using (var input = new OcrInput(@"complex_receipt.jpg"))
{
// Apply region-specific processing
var cropRegion = new CropRectangle(x: 0, y: 100, width: 400, height: 800);
input.AddImage(@"complex_receipt.jpg", cropRegion);
// Process with confidence tracking
var result = ocr.Read(input);
// Parse using confidence scores
var highConfidenceLines = result.Lines
.Where(line => line.Confidence > 85)
.Select(line => line.Text)
.ToList();
// Extract data with fallback strategies
var total = ExtractTotal(highConfidenceLines)
?? ExtractTotalAlternative(result.Text);
Console.WriteLine($"Receipt Total: {total}");
}
}
static decimal? ExtractTotal(List<string> lines)
{
// Primary extraction method
foreach (var line in lines)
{
if (line.Contains("TOTAL") &&
System.Text.RegularExpressions.Regex.IsMatch(line, @"\d+\.\d{2}"))
{
var match = System.Text.RegularExpressions.Regex.Match(line, @"(\d+\.\d{2})");
if (decimal.TryParse(match.Value, out var total))
return total;
}
}
return null;
}
static decimal? ExtractTotalAlternative(string fullText)
{
// Fallback extraction method
var pattern = @"(?:Total|TOTAL|Grand Total|Amount Due).*?(\d+\.\d{2})";
var match = System.Text.RegularExpressions.Regex.Match(fullText, pattern);
if (match.Success && decimal.TryParse(match.Groups[1].Value, out var total))
return total;
return null;
}
}Imports IronOcr
Imports System
Imports System.Collections.Generic
Imports System.Linq
Class ReceiptLayoutHandler
Shared Sub Main()
Dim ocr = New IronTesseract()
' Configure for different receipt layouts
ocr.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.AutoOsd
ocr.Configuration.EngineMode = TesseractEngineMode.TesseractAndLstm
Using input = New OcrInput("complex_receipt.jpg")
' Apply region-specific processing
Dim cropRegion = New CropRectangle(x:=0, y:=100, width:=400, height:=800)
input.AddImage("complex_receipt.jpg", cropRegion)
' Process with confidence tracking
Dim result = ocr.Read(input)
' Parse using confidence scores
Dim highConfidenceLines = result.Lines _
.Where(Function(line) line.Confidence > 85) _
.Select(Function(line) line.Text) _
.ToList()
' Extract data with fallback strategies
Dim total = ExtractTotal(highConfidenceLines) _
OrElse ExtractTotalAlternative(result.Text)
Console.WriteLine($"Receipt Total: {total}")
End Using
End Sub
Shared Function ExtractTotal(lines As List(Of String)) As Decimal?
' Primary extraction method
For Each line In lines
If line.Contains("TOTAL") AndAlso _
System.Text.RegularExpressions.Regex.IsMatch(line, "\d+\.\d{2}") Then
Dim match = System.Text.RegularExpressions.Regex.Match(line, "(\d+\.\d{2})")
Dim total As Decimal
If Decimal.TryParse(match.Value, total) Then
Return total
End If
End If
Next
Return Nothing
End Function
Shared Function ExtractTotalAlternative(fullText As String) As Decimal?
' Fallback extraction method
Dim pattern = "(?:Total|TOTAL|Grand Total|Amount Due).*?(\d+\.\d{2})"
Dim match = System.Text.RegularExpressions.Regex.Match(fullText, pattern)
Dim total As Decimal
If match.Success AndAlso Decimal.TryParse(match.Groups(1).Value, total) Then
Return total
End If
Return Nothing
End Function
End ClassQuais aspectos principais devo lembrar sobre APIs de digitalização de recibos?
APIs de digitalização de recibos como IronOCR oferecem soluções confiáveis para automatizar a extração de dados de recibos. Usando tecnologia avançada de OCR, as empresas podem extrair automaticamente nomes de fornecedores, datas de compra, listas detalhadas, preços, impostos e totais. Com suporte para múltiplos idiomas, moedas e suporte a código de barras, as empresas podem simplificar a gestão de recibos, economizar tempo e tomar decisões baseadas em dados.
IronOCR fornece as ferramentas que os desenvolvedores precisam para extração de texto precisa e eficiente, permitindo automação de tarefas e eficiência aprimorada. O conjunto de recursos completo da biblioteca inclui suporte para vários tipos de documentos e melhorias recentes como redução de memória em 98%.
Cumprindo os pré-requisitos e integrando o IronOCR, você pode revelar os benefícios do processamento automatizado de recibos. A documentação da biblioteca, exemplos e guias de solução de problemas garantem uma implementação tranquila.
Para mais informações, visite a página de licenciamento ou explore o tutorial do C# Tesseract OCR.

Artigos relacionados

