Saltar al pie de página
USANDO IRONOCR

Cómo realizar OCR en un PDF en C#: Extraer texto de documentos escaneados con .NET

Los documentos PDF escaneados suponen un reto constante para los desarrolladores de .NET: el texto existe únicamente como imágenes, lo que hace imposible buscarlo, copiarlo o procesarlo mediante programación. El reconocimiento óptico de caracteres (OCR) resuelve esto al convertir imágenes escaneadas en datos editables y buscables, transformando documentos en papel, imágenes capturadas con una cámara o cualquier archivo PDF basado en imágenes en texto legible por máquina. Ya sea que el objetivo sea digitalizar archivos en papel, automatizar la extracción de datos o crear flujos de procesamiento de documentos, la capacidad de realizar OCR en archivos PDF en C# es una función fundamental.

IronOCR es una biblioteca OCR for .NET basada en el motor Tesseract 5 con mejoras adicionales de precisión. Permite a los desarrolladores extraer texto de cualquier documento PDF —escaneado o de otro tipo— con unas pocas líneas de código. Este artículo repasa los flujos de trabajo principales: OCR básico de PDF, procesamiento selectivo por páginas, extracción por regiones y preprocesamiento de imágenes para escaneos complejos.

¿Cómo se realiza el OCR en un PDF en C#?

La forma más rápida de extraer texto de archivos PDF en .NET comienza con la instalación de IronOCR a través de NuGet. Abra una terminal en el directorio de su proyecto y ejecute:

dotnet add package IronOcr
dotnet add package IronOcr
SHELL

Una vez instalado el paquete, el siguiente programa de nivel superior lee un PDF escaneado e imprime el texto extraído:

using IronOcr;

// Initialize the OCR engine
var ocr = new IronTesseract();

// Load the PDF and perform OCR
using var input = new OcrInput();
input.LoadPdf("scanned-report.pdf");

// Run recognition
OcrResult result = ocr.Read(input);

// Access the extracted text
string text = result.Text;
Console.WriteLine(text);
using IronOcr;

// Initialize the OCR engine
var ocr = new IronTesseract();

// Load the PDF and perform OCR
using var input = new OcrInput();
input.LoadPdf("scanned-report.pdf");

// Run recognition
OcrResult result = ocr.Read(input);

// Access the extracted text
string text = result.Text;
Console.WriteLine(text);
$vbLabelText   $csharpLabel

La clase IronTesseract envuelve Tesseract 5 con optimizaciones nativas de .NET tanto for .NET Core como for .NET Framework. El objeto OcrInput gestiona la carga de PDF y la representación interna de las páginas. Cuando se invoca Read, el proceso de OCR analiza cada página y devuelve un OcrResult que contiene el texto completo extraído, además de datos estructurados sobre párrafos, líneas, palabras y sus coordenadas de píxeles.

El resultado se puede escribir en un archivo de texto, pasar a la lógica de procesamiento posterior, almacenar en una base de datos o introducir en un proceso de indexación de documentos. Para obtener más información sobre el motor subyacente, consulte la documentación de Tesseract OCR y la referencia de la API de IronOCR.

Entrada

Cómo realizar OCR en un PDF: extraer texto de documentos escaneados con C# .NET OCR PDF: Imagen 1 - Ejemplo de entrada de PDF

Resultado

Cómo realizar OCR en un PDF: extraer texto de documentos escaneados con C# .NET OCR PDF: Imagen 2 - Salida de la consola

¿Cómo se leen páginas específicas de un PDF?

Procesar todas las páginas de un documento extenso supone una pérdida de tiempo y memoria cuando solo algunas páginas contienen contenido relevante. IronOCR te permite seleccionar páginas específicas pasando índices de página con base cero a LoadPdf:

using IronOcr;
using System.Collections.Generic;

var ocr = new IronTesseract();

// Specify pages to process (zero-based: 0 = first page)
var targetPages = new List<int> { 0, 2, 4 };

using var input = new OcrInput();
input.LoadPdf("lengthy-document.pdf", pageIndices: targetPages);

OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
using IronOcr;
using System.Collections.Generic;

var ocr = new IronTesseract();

// Specify pages to process (zero-based: 0 = first page)
var targetPages = new List<int> { 0, 2, 4 };

using var input = new OcrInput();
input.LoadPdf("lengthy-document.pdf", pageIndices: targetPages);

OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
$vbLabelText   $csharpLabel

La carga selectiva de páginas reduce tanto el tiempo de procesamiento como el consumo de memoria, lo cual es importante cuando se trabaja con archivos de varios cientos de páginas en los que solo unas pocas contienen los datos necesarios. La convención de indexación desde cero se ajusta a las colecciones estándar de .NET Standard: el índice de página 0 es la primera página del documento.

En el caso de documentos en los que no se conozcan de antemano las páginas relevantes, considere la posibilidad de realizar primero un procesamiento rápido de todo el documento con un DPI reducido para identificar los números de página y, a continuación, volver a ejecutarlo con la configuración completa solo en esas páginas.

Más información sobre el control a nivel de página en la documentación de selección de páginas de IronOCR.

¿Cómo se extraen datos de una región específica de una página?

El procesamiento de facturas, la digitalización de formularios y el análisis de documentos estructurados suelen requerir la extracción de texto de un área definida, en lugar de escanear una página completa. IronOCR admite el OCR orientado a regiones mediante el parámetro ContentAreas, que acepta una matriz de objetos Rectangle que especifican qué partes de cada página se deben analizar:

using IronOcr;
using IronSoftware.Drawing;

var ocr = new IronTesseract();

// Define the scan region: X, Y, Width, Height (all in pixels from top-left)
var invoiceFields = new Rectangle[]
{
    new Rectangle(130, 290, 250, 50)   // Invoice number field
};

using var input = new OcrInput();
input.LoadPdf("invoice.pdf", contentAreas: invoiceFields);

OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
using IronOcr;
using IronSoftware.Drawing;

var ocr = new IronTesseract();

// Define the scan region: X, Y, Width, Height (all in pixels from top-left)
var invoiceFields = new Rectangle[]
{
    new Rectangle(130, 290, 250, 50)   // Invoice number field
};

using var input = new OcrInput();
input.LoadPdf("invoice.pdf", contentAreas: invoiceFields);

OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
$vbLabelText   $csharpLabel

El constructor Rectangle toma cuatro parámetros enteros: la coordenada X, la coordenada Y, el ancho y la altura, todos medidos en píxeles desde la esquina superior izquierda de la página renderizada. Centrarse en una zona pequeña en lugar de en una página completa reduce tanto el tiempo de OCR como la probabilidad de que el motor capte ruido circundante o campos de texto no relacionados.

Para los flujos de trabajo de procesamiento de facturas por lotes, combine la extracción de regiones con la iteración sobre result.Pages para extraer datos estructurados de la misma posición de campo en cientos de documentos. Cada resultado de página muestra el texto reconocido para su área de contenido de forma independiente.

El ejemplo de áreas de contenido de IronOCR ofrece opciones de configuración adicionales para escenarios multirregionales.

Entrada

Cómo realizar OCR en un PDF: extraer texto de documentos escaneados con C# .NET OCR PDF: Imagen 3 - Ejemplo de factura

Resultado

Cómo realizar el OCR de un PDF: extraer texto de documentos escaneados con C# .NET OCR PDF: Imagen 4 - Salida de datos extraídos

¿Cómo se mejora la precisión del OCR en documentos escaneados?

Los documentos escaneados del mundo real suelen presentar problemas de calidad: páginas torcidas, baja resolución o ruido digital introducido por el hardware o el software de escaneo. IronOCR incluye un conjunto de filtros de preprocesamiento de imágenes que corrigen estos problemas antes de que se ejecute el motor de reconocimiento:

using IronOcr;

var ocr = new IronTesseract();

using var input = new OcrInput();
// Load PDF at higher DPI for improved text recognition on small fonts
input.LoadPdf("poor-quality-scan.pdf", dpi: 300);

// Apply image correction filters
input.Deskew();    // Automatically straighten rotated pages
input.DeNoise();   // Remove scanning artifacts and speckles

OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
using IronOcr;

var ocr = new IronTesseract();

using var input = new OcrInput();
// Load PDF at higher DPI for improved text recognition on small fonts
input.LoadPdf("poor-quality-scan.pdf", dpi: 300);

// Apply image correction filters
input.Deskew();    // Automatically straighten rotated pages
input.DeNoise();   // Remove scanning artifacts and speckles

OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
$vbLabelText   $csharpLabel

El parámetro dpi controla la resolución a la que se representan las páginas PDF antes de que se ejecute el reconocimiento. Los valores más altos (de 200 a 300 ppp) mejoran la precisión en documentos con texto pequeño o denso, a costa de un consumo ligeramente mayor de memoria durante el procesamiento. El método Deskew detecta y corrige la rotación de la página automáticamente. DeNoise elimina las manchas y los artefactos que pueden confundir el proceso de reconocimiento de caracteres.

Para documentos que requieran una corrección de imágenes más agresiva, IronOCR también ofrece mejora del contraste, binarización (conversión de páginas a blanco y negro) y ajustes de escala. La combinación secuencial de varios filtros permite recuperar texto utilizable de escaneos que, de otro modo, producirían resultados ilegibles. Consulte la referencia de filtros de imagen de IronOCR para obtener la lista completa de operaciones de preprocesamiento disponibles.

¿Cómo gestionáis los documentos protegidos con contraseña y los de múltiples formatos?

IronOCR no se limita a los archivos PDF estándar. La biblioteca gestiona una amplia gama de escenarios de entrada que aparecen con frecuencia en los flujos de trabajo de procesamiento de documentos.

Los archivos PDF protegidos con contraseña son compatibles pasando las credenciales durante la construcción de la entrada:

using IronOcr;

var ocr = new IronTesseract();

using var input = new OcrInput();
input.LoadPdf("protected.pdf", password: "secret123");

OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
using IronOcr;

var ocr = new IronTesseract();

using var input = new OcrInput();
input.LoadPdf("protected.pdf", password: "secret123");

OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
$vbLabelText   $csharpLabel

Los formatos de imagen (PNG, JPEG, TIFF, BMP, GIF y TIFF multipágina) se cargan con los métodos correspondientes LoadImage o LoadImageFrames. Se aplican los mismos filtros de preprocesamiento y opciones de segmentación por región, independientemente del formato de entrada.

Los documentos multilingües se gestionan a través del sistema de paquetes de idiomas de IronOCR. La biblioteca se distribuye en inglés de forma predeterminada y admite más de 125 paquetes de idiomas adicionales que cubren alfabetos latinos, cirílicos, CJK, árabes y otros. Cargue idiomas adicionales antes de llamar a Read:

var ocr = new IronTesseract();
ocr.Language = OcrLanguage.German;
var ocr = new IronTesseract();
ocr.Language = OcrLanguage.German;
$vbLabelText   $csharpLabel

Para documentos que mezclan varios idiomas en la misma página, está disponible el modo MultiLanguage. Esto resulta especialmente valioso para el procesamiento de facturas en entornos internacionales, donde los encabezados, las partidas y las direcciones pueden aparecer en diferentes idiomas.

La implementación funciona en entornos Windows, Linux, macOS y en la nube, incluidos Azure y contenedores Docker.

¿Cómo se crean archivos PDF con capacidad de búsqueda a partir de documentos escaneados?

Más allá de extraer texto en cadenas, IronOCR puede generar archivos PDF con capacidad de búsqueda: un PDF en el que la imagen escaneada original se conserva como capa visual, mientras que se incrusta una capa de texto invisible para operaciones de búsqueda y copia. Este es el formato estándar generado por escáneres de documentos profesionales.

La función de PDF con capacidad de búsqueda de IronOCR acepta un OcrResult y genera un nuevo archivo PDF:

using IronOcr;

var ocr = new IronTesseract();

using var input = new OcrInput();
input.LoadPdf("scanned-archive.pdf");

OcrResult result = ocr.Read(input);

// Save as a searchable PDF
result.SaveAsSearchablePdf("output-searchable.pdf");
using IronOcr;

var ocr = new IronTesseract();

using var input = new OcrInput();
input.LoadPdf("scanned-archive.pdf");

OcrResult result = ocr.Read(input);

// Save as a searchable PDF
result.SaveAsSearchablePdf("output-searchable.pdf");
$vbLabelText   $csharpLabel

El archivo de salida se puede abrir en cualquier lector de PDF. Las operaciones de selección, búsqueda y copia de texto funcionan en la capa de texto incrustada, al tiempo que se conserva el aspecto original del escaneo. Este formato suele ser necesario para archivos de cumplimiento normativo, repositorios de documentos legales y sistemas de gestión de contenidos Enterprise.

Para formatos de salida adicionales, el objeto OcrResult también expone puntuaciones de confianza por página, cuadros delimitadores a nivel de palabra y datos de párrafos estructurados, todos ellos útiles para tareas posteriores de clasificación o indexación.

¿Cómo se leen los BarCodes y los códigos QR junto con el texto?

Los procesos de procesamiento de documentos a menudo necesitan extraer tanto texto legible para humanos como códigos legibles para máquinas del mismo documento. IronOCR puede detectar y descodificar BarCodes y códigos QR durante la misma pasada de OCR, sin necesidad de una biblioteca independiente.

Habilite la lectura de BarCodes en la instancia IronTesseract antes del procesamiento:

using IronOcr;

var ocr = new IronTesseract();
ocr.Configuration.ReadBarCodes = true;

using var input = new OcrInput();
input.LoadPdf("shipment-labels.pdf");

OcrResult result = ocr.Read(input);

// Access recognized text
Console.WriteLine(result.Text);

// Access barcode data
foreach (var barcode in result.Barcodes)
{
    Console.WriteLine($"Type: {barcode.Format}, Value: {barcode.Value}");
}
using IronOcr;

var ocr = new IronTesseract();
ocr.Configuration.ReadBarCodes = true;

using var input = new OcrInput();
input.LoadPdf("shipment-labels.pdf");

OcrResult result = ocr.Read(input);

// Access recognized text
Console.WriteLine(result.Text);

// Access barcode data
foreach (var barcode in result.Barcodes)
{
    Console.WriteLine($"Type: {barcode.Format}, Value: {barcode.Value}");
}
$vbLabelText   $csharpLabel

Esto resulta especialmente útil para el procesamiento de etiquetas de envío, la gestión de inventario y cualquier flujo de trabajo en el que aparezcan BarCodes y texto impreso juntos en documentos escaneados. La guía de lectura de BarCodes de IronOCR cubre los formatos compatibles, incluidos Code 128, códigos QR, Data Matrix y PDF417.

¿Cuál es la diferencia entre los tipos de entrada de IronOCR?

IronOCR ofrece dos métodos principales para cargar archivos PDF, cada uno adecuado para diferentes escenarios:

Comparación de métodos de entrada de PDF de IronOCR
Acercarse Clase Mejor para Notas
Información general `OcrInput.LoadPdf()` La mayoría de los casos de uso Admite todos los filtros de preprocesamiento, selección de páginas y áreas de contenido
Específico para PDF `OcrPdfInput` Escenarios sencillos Envoltura de conveniencia; menos opciones de configuración
Archivos de imagen `OcrInput.LoadImage()` PNG, JPEG, TIFF, BMP Mismo preprocesamiento y selección de región que en el caso de los archivos PDF
TIFF multipágina `OcrInput.LoadImageFrames()` Archivos de fax, salida de escáner Procesa cada fotograma como una página independiente

Para la mayoría de los escenarios de producción, OcrInput.LoadPdf() es el enfoque recomendado, ya que expone la API completa de preprocesamiento y configuración. OcrPdfInput funciona bien para la creación rápida de prototipos o en situaciones en las que la configuración predeterminada es suficiente.

¿Cuales son tus próximos pasos?

Los ejemplos de código anteriores cubren los flujos de trabajo básicos de IronOCR para el OCR de PDF en C#. A continuación, se incluye una breve lista de verificación para dar el siguiente paso:

  • Instala el paquete: dotnet add package IronOcr o busca IronOcr en NuGet
  • Ejecute el ejemplo básico: confirme la extracción de texto de un PDF de muestra antes de desarrollar la lógica completa del proceso.
  • Aplicar preprocesamiento: si se trabaja con documentos escaneados, añadir las llamadas Deskew y DeNoise y realizar pruebas con muestras representativas
  • Explore funciones adicionales: salida en PDF con capacidad de búsqueda, lectura de BarCodes, compatibilidad con varios idiomas y salida de datos estructurados
  • Revisar la guía de implementación: los artículos sobre implementación en Azure, Docker y Linux abordan la configuración específica de cada entorno
  • Prueba la versión de prueba gratuita: Inicia una prueba gratuita para probar todas las funciones antes de adquirir una licencia
  • Obtener una licencia: Las opciones de licencia de IronOCR abarcan desde desarrolladores individuales hasta implementaciones Enterprise, con redistribución libre de regalías

Si tiene preguntas sobre casos de uso específicos, la biblioteca IronOCR ofrece artículos paso a paso que abarcan docenas de escenarios. La superficie completa de la API está documentada en la referencia de la API de IronOCR.

Preguntas Frecuentes

¿Cuál es el código mínimo necesario para realizar OCR en un PDF en C#?

Usando IronOCR, el código mínimo es: crear una instancia de IronTesseract, crear un OcrInput, llamar a input.LoadPdf con la ruta del archivo y, finalmente, llamar a ocr.Read(input). La propiedad result.Text devuelve la cadena extraída.

¿Cómo instalar IronOCR en un proyecto .NET ?

Ejecute 'dotnet add package IronOCR' en la terminal o busque IronOCR en el Administrador de paquetes NuGet dentro de Visual Studio.

¿Puede IronOCR procesar sólo páginas específicas de un PDF?

Sí. Pasar una lista Índices de página basados ​​en cero en el parámetro pageIndices de LoadPdf. Solo se renderizan y procesan las páginas especificadas, lo que reduce el tiempo y el uso de memoria.

¿Cómo extraer texto de una región específica de un PDF escaneado?

Pase una matriz de objetos Rectángulo al parámetro contentAreas de LoadPdf. Cada rectángulo especifica la posición X, la posición Y, el ancho y la altura en píxeles desde la esquina superior izquierda de la página.

¿Qué filtros de preprocesamiento proporciona IronOCR para los documentos escaneados?

IronOCR ofrece corrección de la rotación de página, eliminación de ruido (eliminación de artefactos de escaneo), mejora del contraste, binarización y ajuste de escala. Estas funciones se pueden combinar para mejorar la precisión en escaneos de baja calidad.

¿ IronOCR admite archivos PDF protegidos con contraseña?

Sí. Pase la cadena de contraseña al parámetro de contraseña de LoadPdf. La biblioteca descifra el documento antes de procesar las páginas para el OCR.

¿Puede IronOCR crear una salida PDF con capacidad de búsqueda?

Sí. Después de llamar a ocr.Read(input), llame a result.SaveAsSearchablePdf con la ruta del archivo de salida. El PDF resultante conserva el escaneo original como capa visual con una capa de texto invisible incrustada para las operaciones de búsqueda y copia.

¿Qué idiomas admite IronOCR?

IronOCR admite más de 125 paquetes de idiomas, incluyendo latín, cirílico, CJK, árabe y otros alfabetos. Configure la propiedad Language en la instancia de IronTesseract antes de ejecutar Read.

¿Puede IronOCR leer códigos de barras y códigos QR de documentos PDF?

Sí. Configure ocr.Configuration.ReadBarCodes como verdadero antes de llamar a Read. La colección OcrResult.Barcodes contiene los valores decodificados y los tipos de formato de todos los códigos detectados.

¿ IronOCR funciona en Linux y en contenedores Docker?

Sí. IronOCR admite la implementación en Windows, Linux, macOS y entornos en la nube, incluyendo contenedores de Azure y Docker. La documentación de IronSoftware incluye guías de configuración específicas para cada entorno.

Kannaopat Udonpant
Ingeniero de Software
Antes de convertirse en Ingeniero de Software, Kannapat completó un doctorado en Recursos Ambientales de la Universidad de Hokkaido en Japón. Mientras perseguía su grado, Kannapat también se convirtió en miembro del Laboratorio de Robótica de Vehículos, que es parte del Departamento de Ingeniería ...
Leer más

Equipo de soporte de Iron

Estamos disponibles online las 24 horas, 5 días a la semana.
Chat
Email
Llámame