
Escáner de Recibos OCR en C# con TicketBAI, AEAT y LOPDGDD | IronOCR España
Este tutorial está diseñado para ayudar a los principiantes a crear un Escáner de Recibos OCR usando IronOCR, una API OCR en C#. Al final de esta guía, comprenderás cómo implementar el reconocimiento óptico de caracteres (OCR) para convertir diferentes tipos de archivos de recibos en datos editables y buscables usando la API OCR de recibos. Esta tecnología puede ser un cambio de juego para las empresas que buscan automatizar la gestión de gastos y minimizar la entrada manual de datos.
En España, el escaneado de recibos adquiere una dimensión regulatoria adicional. Los sistemas TicketBAI —implantados en el País Vasco para garantizar la trazabilidad de las operaciones B2C— exigen que los tickets emitidos incluyan un código QR y un identificador único. Un escáner OCR debe ser capaz de extraer estos campos específicos, además del NIF/CIF del emisor, la fecha de operación y el importe con IVA desglosado. La Agencia Estatal de Administración Tributaria (AEAT) requiere que los datos de recibos B2B se integren en el sistema SII (Suministro Inmediato de Información) para determinados contribuyentes. Asimismo, la LOPDGDD establece que el procesamiento OCR de recibos que contengan datos personales de clientes debe limitarse a los campos estrictamente necesarios para la finalidad fiscal (principio de minimización de datos). IronOCR permite implementar todas estas restricciones mediante su funcionalidad de extracción por regiones y su procesamiento completamente local. ¡Comencemos!
How To Create an OCR Receipt Scanner In C#
- Crea un proyecto de consola en C# en Visual Studio.
- Instala la biblioteca OCR utilizando el Administrador de Paquetes NuGet.
- Cargue el recibo en el programa utilizando el método
OcrInput. - Extraiga el texto utilizando el método
Read. - Muestra el texto extraído en la consola.
Requisitos previos
Antes de sumergirnos en la parte de codificación, asegúrate de tener lo siguiente:
- Visual Studio: Este será nuestro entorno de desarrollo integrado (IDE), donde escribiremos y ejecutaremos nuestro código C#.
- Biblioteca IronOCR: Utilizaremos IronOCR, una biblioteca OCR avanzada que se puede integrar fácilmente en aplicaciones C#.
- Recibo de muestra: Un archivo de imagen de un recibo llamado Sample_Receipt.jpg, que utilizaremos para probar nuestra implementación de OCR.

Paso 1: Configuración del proyecto
Abrir Visual Studio: Busca el icono de Visual Studio en el escritorio o en el menú de aplicaciones y haz doble clic en él para abrir el programa.
Crear un nuevo proyecto: Una vez abierto Visual Studio, aparecerá una ventana de inicio. Haz clic en el botón "Crear nuevo proyecto". Si ya has abierto Visual Studio y no ves la ventana de inicio, puedes acceder a ella haciendo clic en Archivo > Nuevo > Proyecto desde el menú superior.
Selecciona el tipo de proyecto: En la ventana "Crear un nuevo proyecto", verás una variedad de plantillas de proyecto. En el cuadro de búsqueda, escribe "Aplicación de Consola" para filtrar las opciones, luego selecciona Aplicación de Consola (.NET Core) o Aplicación de Consola (.NET Framework), dependiendo de tu preferencia y compatibilidad. Luego haz clic en el botón Siguiente.
Configurar su nuevo proyecto: Ahora verá una pantalla titulada "Configurar su nuevo proyecto".
- En el campo "Nombre del proyecto", introduce
OCRReceiptScannercomo nombre de tu proyecto. - Elige o confirma la ubicación donde se guardará tu proyecto en el campo Ubicación.
- Opcionalmente, también puedes especificar un nombre de solución si deseas que sea diferente al nombre del proyecto.
- Haz clic en el botón Siguiente después de completar estos detalles.
Información Adicional: Es posible que se te pida seleccionar el .NET Framework de destino. Elige la versión más reciente (a menos que tengas requisitos específicos de compatibilidad) y haz clic en Crear.
Paso 2: Integración de IronOCR
Antes de poder usar la biblioteca IronOCR, necesitamos incluirla en nuestro proyecto. Siga estos pasos:
-
Haz clic derecho en tu proyecto en el Explorador de Soluciones.
-
Elige "Administrar paquetes NuGet".
-
En la ventana del Administrador de Paquetes NuGet, verás varias pestañas como Explorar, Instalado, Actualizaciones y Consolidar. Haz clic en la pestaña Explorar.
-
En el cuadro de búsqueda, escribe IronOcr. Este es el nombre de la biblioteca que deseamos agregar a nuestro proyecto. Presiona enter para buscar.
-
Los resultados de la búsqueda mostrarán el paquete de la biblioteca IronOCR. Debería ser uno de los primeros resultados que veas. Haga clic en él para seleccionarlo.
-
Después de seleccionar el paquete IronOCR, notarás un panel en el lado derecho que muestra la información del paquete, incluida su descripción y versión. También hay un botón Instalar en este panel.

-
Haz clic en el botón Instalar. Esta acción podría invitarte a revisar los cambios y mostrar una lista de dependencias que se incluirán junto con IronOcr. Revisa los cambios y las dependencias, y si todo se ve correcto, confirma y procede con la instalación.
Paso 3: Configuración del proyecto
Después de instalar IronOCR, el siguiente paso es configurar tu proyecto. Así es como:
Añadir espacios de nombres: En la parte superior de tu archivo Program.cs, incluye los siguientes espacios de nombres:
using IronOcr;
using System;Imports IronOcr
Imports SystemAjustes de configuración: Si hay algún ajuste de configuración, como una clave de API o una clave de licencia, asegúrate de incluirlo. Para IronOCR, necesitarás establecer la clave de licencia como se muestra en el código proporcionado:
License.LicenseKey = "License-Key"; // replace 'License-Key' with your keyLicense.LicenseKey = "License-Key" ' replace 'License-Key' with your keyPaso 4: Lectura del recibo
Ahora, vamos a escribir el código para leer el recibo.
Defina la ruta de acceso a su recibo: Especifique la ruta de acceso al archivo del recibo que desea escanear.
string pdfFilePath = "Sample_Receipt.jpg";Dim pdfFilePath As String = "Sample_Receipt.jpg"Bloque Try-Catch: Implementa la gestión de errores utilizando un bloque try-catch. Esto te ayudará a manejar cualquier excepción que ocurra durante el proceso OCR.
try
{
// OCR code will go here
}
catch (Exception ex)
{
// Handle exceptions here
Console.WriteLine($"An error occurred: {ex.Message}");
}Try
' OCR code will go here
Catch ex As Exception
' Handle exceptions here
Console.WriteLine($"An error occurred: {ex.Message}")
End TryPaso 5: Implementación del OCR
En el Paso 5, profundizamos en la funcionalidad central de nuestra aplicación: implementar OCR para leer e interpretar los datos de nuestro recibo. Esto implica inicializar el motor OCR, configurar la entrada, realizar la operación OCR y mostrar los resultados.
Inicializar IronTesseract
La primera parte del código crea una instancia de la clase IronTesseract:
var ocr = new IronTesseract();Dim ocr = New IronTesseract()Al crear una instancia de IronTesseract, estamos esencialmente configurando nuestra herramienta de OCR, preparándola para realizar las tareas de reconocimiento de texto. Es como encender el motor de un coche antes de poder conducirlo. Este objeto se utilizará para controlar el proceso OCR, incluidas la lectura de la entrada y la extracción de texto.
Configurar la entrada de OCR
A continuación, definimos la entrada para nuestro proceso OCR:
using (var input = new OcrInput(pdfFilePath))
{
// OCR processing will go here
}Using input = New OcrInput(pdfFilePath)
' OCR processing will go here
End UsingEn este segmento, se utiliza OcrInput para especificar el archivo que queremos procesar. pdfFilePath es una variable que contiene la ruta a nuestro archivo de recibo. Al pasar esta variable a OcrInput, le estamos diciendo al motor OCR: "Este es el archivo que quiero que leas". La instrucción using es una construcción especial de C# que garantiza que los recursos utilizados por OcrInput (como los manejadores de archivos) se liberen correctamente una vez finalizado el procesamiento. Es una forma de gestionar los recursos de manera eficiente y garantizar que tu aplicación funcione sin problemas sin uso innecesario de memoria.
Realizar OCR
Dentro del bloque using, llamamos al método Read en nuestra instancia ocr:
var result = ocr.Read(input);Dim result = ocr.Read(input)El método Read tomará la ruta del archivo de entrada como parámetro. Esta línea iniciará el escaneo del recibo. Realizará el OCR del archivo de entrada proporcionado, extraerá los datos y los almacenará en una variable result. Podemos usar el texto extraído de este método para realizar cualquier operación de texto.
Generar los resultados
Finalmente, mostramos el texto reconocido por el proceso OCR:
Console.WriteLine(result.Text);Console.WriteLine(result.Text)La variable result contiene el resultado del proceso de OCR y result.Text contiene el texto real extraído del recibo. La función Console.WriteLine toma este texto y lo muestra en la consola. Esto te permite ver y verificar los resultados del proceso OCR. Aquí está el código completo del archivo Program.cs:
using IronOcr;
using System;
class Program
{
static void Main(string[] args)
{
// Set your IronOCR license key
License.LicenseKey = "Your-License-Key";
// Define the path to the receipt image
string pdfFilePath = "Sample_Receipt.jpg";
try
{
// Initialize the OCR engine
var ocr = new IronTesseract();
// Define the input file
using (var input = new OcrInput(pdfFilePath))
{
// Perform OCR and get the result
var result = ocr.Read(input);
// Display the extracted text
Console.WriteLine(result.Text);
}
}
catch (Exception ex)
{
// Handle exceptions and log them if necessary
Console.WriteLine($"An error occurred: {ex.Message}");
}
}
}Imports IronOcr
Imports System
Class Program
Shared Sub Main(args As String())
' Set your IronOCR license key
License.LicenseKey = "Your-License-Key"
' Define the path to the receipt image
Dim pdfFilePath As String = "Sample_Receipt.jpg"
Try
' Initialize the OCR engine
Dim ocr = New IronTesseract()
' Define the input file
Using input = New OcrInput(pdfFilePath)
' Perform OCR and get the result
Dim result = ocr.Read(input)
' Display the extracted text
Console.WriteLine(result.Text)
End Using
Catch ex As Exception
' Handle exceptions and log them if necessary
Console.WriteLine($"An error occurred: {ex.Message}")
End Try
End Sub
End ClassPaso 6: Ejecutar su aplicación
- Compilar el proyecto: Haga clic en el menú "Compilar" y, a continuación, seleccione "Compilar solución".
- Ejecutar el proyecto: Pulsa F5 o haz clic en el botón "Inicio" para ejecutar tu aplicación.
Ahora, verás el texto de tu recibo mostrado en la consola. Este texto representa los datos extraídos de la imagen de tu recibo. Así es cómo escaneamos recibos usando IronOCR. Este es un ejemplo simple de cómo usar capacidades OCR para extraer datos de recibos en papel. Es una implementación muy genérica. Puedes modificar tu código para que coincida con el diseño de tus imágenes de recibo.

Después de eso, puedes usar los datos no estructurados de los recibos que obtuvimos después de escanear los recibos. Podemos obtener información importante de una sección particular del recibo. O podemos mostrar los datos del recibo de una manera más organizada. Podemos hacer una aplicación de software para escanear recibos OCR usando IronOCR. Eso nos ayudará a extraer datos precisos de los campos del recibo.
Adaptación al contexto fiscal español
Al adaptar este escáner para el mercado español, considera los siguientes puntos clave:
Extracción de CIF/NIF: los recibos españoles siempre deben incluir el NIF o CIF del emisor. Añade una expresión regular al método de extracción para capturar el patrón [A-Z0-9]\d{7}[A-Z0-9] que identifica estos identificadores fiscales.
Cumplimiento TicketBAI: en el País Vasco, el código QR de TicketBAI debe leerse mediante la funcionalidad de detección de códigos de barras de IronOCR (_ocr.Configuration.ReadBarCodes = true). El valor extraído debe almacenarse junto con los demás campos del ticket para garantizar la trazabilidad exigida por la normativa.
Integración SII para recibos B2B: si tu aplicación procesa facturas de proveedores (no solo tickets de consumidor), los datos extraídos —base imponible, cuota de IVA, NIF del proveedor, fecha de operación— deben reportarse al SII de la AEAT en un plazo de cuatro días. IronOCR proporciona la velocidad de extracción necesaria para mantener este plazo incluso en entornos de alto volumen.
LOPDGDD y datos de clientes: cuando los recibos contienen datos personales del comprador (nombre, dirección de envío), la LOPDGDD exige que estos datos no se almacenen más allá de lo necesario para la finalidad fiscal. Configura el pipeline para extraer únicamente los campos imprescindibles y elimina el escaneo en bruto una vez completada la extracción.
Conclusión
¡Felicitaciones! Has creado con éxito un escáner de recibos OCR usando C# y IronOCR. Este escáner puede aumentar significativamente la precisión de la extracción de datos para diversas necesidades empresariales como el seguimiento de gastos, la gestión de la cadena de suministro y más. Ya no habrá necesidad de revisar los recibos escaneados y extraer datos manualmente.
IronOCR ofrece una prueba gratuita, lo que permite a los usuarios explorar y evaluar sus capacidades sin coste inicial. Para aquellos que deseen integrar y aprovechar toda la gama de funciones en un entorno profesional, las licencias comienzan en $999, lo que proporciona una solución integral para las necesidades de escaneo de recibos y extracción de datos mediante OCR.
Recuerda, esto es solo el comienzo. Puedes expandir esta aplicación para soportar varios tipos de archivos, mejorar la privacidad de los datos o integrar funciones adicionales como el reconocimiento de campos específicos del recibo, como la cantidad de impuestos, la fecha, los artículos de línea, y más. Con la tecnología OCR, las posibilidades son vastas, allanando el camino para procesos empresariales más eficientes e inteligentes. ¡Feliz programación!

Artículos Relacionados

