Cómo extraer texto de imágenes en C#

Tutorial de OCR de imagen a texto en C#: Convertir imágenes a texto sin Tesseract

This article was translated from English: Does it need improvement?
Translated
View the article in English

¿Buscas convertir imágenes a texto en C# sin las complicaciones de configuraciones complejas de Tesseract? Este completo tutorial de IronOCR en C# te muestra cómo implementar un potente reconocimiento óptico de caracteres en tus aplicaciones .NET con solo unas pocas líneas de código.

Inicio rápido: Extrae texto de una imagen en una línea

Este ejemplo muestra lo fácil que es entender IronOCR: solo una línea de C# convierte tu imagen en texto. Demuestra la inicialización del motor de OCR y cómo leer y recuperar texto de inmediato sin una configuración compleja.

Nuget IconEmpieza a crear PDF con NuGet ahora:

  1. Instalar IronOCR con el gestor de paquetes NuGet

    PM > Install-Package IronOcr

  2. Copie y ejecute este fragmento de código.

    string text = new IronTesseract().Read("image.png").Text;
  3. Despliegue para probar en su entorno real

    Empieza a utilizar IronOCR en tu proyecto hoy mismo con una prueba gratuita
    arrow pointer

¿Cómo leo texto de imágenes en aplicaciones .NET?

Para lograr la funcionalidad de OCR de imagen a texto en C# en tus aplicaciones .NET, necesitarás una biblioteca OCR confiable. IronOCR proporciona una solución administrada usando la clase IronOcr.IronTesseract que maximiza tanto la precisión como la velocidad sin requerir dependencias externas.

Primero, instala IronOCR en tu proyecto de Visual Studio. Puedes descargar el DLL de IronOCR directamente o usar el Administrador de paquetes NuGet.

Install-Package IronOcr

¿Por qué elegir IronOCR para OCR de C# sin Tesseract?

Cuando necesitas convertir imágenes a texto en C#, IronOCR ofrece ventajas significativas sobre las implementaciones tradicionales de Tesseract:

  • Funciona inmediatamente en entornos .NET puros
  • No necesita instalación o configuración de Tesseract
  • Ejecuta los motores más recientes: Tesseract 5 (además de Tesseract 4 y 3)
  • Compatible con .NET Framework 4.5+, .NET Standard 2+, y .NET Core 2, 3, 5, 6, 7, 8, 9, y 10
  • Mejora la precisión y la velocidad comparado con Tesseract sin modificar
  • Soporta implementaciones en Xamarin, Mono, Azure, y Docker
  • Gestiona diccionarios complejos de Tesseract a través de paquetes NuGet
  • Maneja PDFs, TIFFs de múltiples cuadros y todos los formatos de imagen principales automáticamente
  • Corrige escaneos de baja calidad y torcidos para obtener resultados óptimos

Comience a usar IronOCR en su proyecto hoy con una prueba gratuita.

Primer Paso:
green arrow pointer

¿Cómo utilizar el tutorial de C# IronOCR para OCR básico?

Este ejemplo de C# usando Iron Tesseract demuestra la manera más simple de leer texto de una imagen con IronOCR. La clase IronOcr.IronTesseract extrae texto y lo devuelve como una cadena.

// Basic C# OCR image to text conversion using IronOCR
// This example shows how to extract text from images without complex setup

using IronOcr;
using System;

try
{
    // Initialize IronTesseract for OCR operations
    var ocrEngine = new IronTesseract();

    // Path to your image file - supports PNG, JPG, TIFF, BMP, and more
    var imagePath = @"img\Screenshot.png";

    // Create input and perform OCR to convert image to text
    using (var input = new OcrInput(imagePath))
    {
        // Read text from image and get results
        OcrResult result = ocrEngine.Read(input);

        // Display extracted text
        Console.WriteLine(result.Text);
    }
}
catch (OcrException ex)
{
    // Handle OCR-specific errors
    Console.WriteLine($"OCR Error: {ex.Message}");
}
catch (Exception ex)
{
    // Handle general errors
    Console.WriteLine($"Error: {ex.Message}");
}
// Basic C# OCR image to text conversion using IronOCR
// This example shows how to extract text from images without complex setup

using IronOcr;
using System;

try
{
    // Initialize IronTesseract for OCR operations
    var ocrEngine = new IronTesseract();

    // Path to your image file - supports PNG, JPG, TIFF, BMP, and more
    var imagePath = @"img\Screenshot.png";

    // Create input and perform OCR to convert image to text
    using (var input = new OcrInput(imagePath))
    {
        // Read text from image and get results
        OcrResult result = ocrEngine.Read(input);

        // Display extracted text
        Console.WriteLine(result.Text);
    }
}
catch (OcrException ex)
{
    // Handle OCR-specific errors
    Console.WriteLine($"OCR Error: {ex.Message}");
}
catch (Exception ex)
{
    // Handle general errors
    Console.WriteLine($"Error: {ex.Message}");
}
' Basic C# OCR image to text conversion using IronOCR
' This example shows how to extract text from images without complex setup

Imports IronOcr
Imports System

Try
	' Initialize IronTesseract for OCR operations
	Dim ocrEngine = New IronTesseract()

	' Path to your image file - supports PNG, JPG, TIFF, BMP, and more
	Dim imagePath = "img\Screenshot.png"

	' Create input and perform OCR to convert image to text
	Using input = New OcrInput(imagePath)
		' Read text from image and get results
		Dim result As OcrResult = ocrEngine.Read(input)

		' Display extracted text
		Console.WriteLine(result.Text)
	End Using
Catch ex As OcrException
	' Handle OCR-specific errors
	Console.WriteLine($"OCR Error: {ex.Message}")
Catch ex As Exception
	' Handle general errors
	Console.WriteLine($"Error: {ex.Message}")
End Try
$vbLabelText   $csharpLabel

Este código logra una precisión del 100% en imágenes claras, extrayendo el texto exactamente como aparece:

IronOCR Simple Example

In this simple example we test the accuracy of our C# OCR library to read text from a PNG Image. This is a very basic test, but things will get more complicated as the tutorial continues.

The quick brown fox jumps over the lazy dog

La clase IronTesseract maneja operaciones complejas de OCR internamente. Escanea automáticamente para alineación, optimiza la resolución y utiliza inteligencia artificial para leer texto de imagen usando IronOCR con precisión a nivel humano.

A pesar del sofisticado procesamiento que ocurre detrás de escenas, que incluye análisis de imagen, optimización del motor y reconocimiento inteligente de texto, el proceso de OCR coincide con la velocidad de lectura humana manteniendo altos niveles de precisión.

Ejemplo simple de IronOCR mostrando la conversión de imagen a texto OCR en C# con un 100% de precisión Captura de pantalla demostrando la capacidad de IronOCR para extraer texto de una imagen PNG con precisión perfecta

¿Cómo implementar OCR avanzado en C# sin configuración de Tesseract?

Para aplicaciones de producción que requieren un rendimiento óptimo al convertir imágenes a texto en C#, usa las clases OcrInput y IronTesseract juntas. Este enfoque proporciona un control detallado sobre el proceso de OCR.

Características de la clase OcrInput

  • Procesa múltiples formatos de imagen: JPEG, TIFF, GIF, BMP, PNG
  • Importa páginas completas de PDFs o páginas específicas
  • Mejora el contraste, la resolución y la calidad de la imagen automáticamente
  • Corrige rotación, ruido de escaneo, desvíos e imágenes negativas

Características de la clase IronTesseract

  • Acceso a más de 125 idiomas preempaquetados
  • Incluye motores Tesseract 5, 4 y 3
  • Especificación del tipo de documento (captura de pantalla, fragmento o documento completo)
  • Capacidades de lectura de códigos de barras integradas
  • Múltiples formatos de salida: PDFs buscables, HOCR HTML, objetos DOM, y cadenas

¿Cómo empezar a utilizar OcrInput y IronTesseract?

Aquí está una configuración recomendada para este tutorial de IronOCR en C# que funciona bien con la mayoría de los tipos de documentos:

using IronOcr;

// Initialize IronTesseract for advanced OCR operations
IronTesseract ocr = new IronTesseract();

// Create input container for processing multiple images
using (OcrInput input = new OcrInput())
{
    // Process specific pages from multi-page TIFF files
    int[] pageIndices = new int[] { 1, 2 };

    // Load TIFF frames - perfect for scanned documents
    input.LoadImageFrames(@"img\Potter.tiff", pageIndices);

    // Execute OCR to read text from image using IronOCR
    OcrResult result = ocr.Read(input);

    // Output the extracted text
    Console.WriteLine(result.Text);
}
using IronOcr;

// Initialize IronTesseract for advanced OCR operations
IronTesseract ocr = new IronTesseract();

// Create input container for processing multiple images
using (OcrInput input = new OcrInput())
{
    // Process specific pages from multi-page TIFF files
    int[] pageIndices = new int[] { 1, 2 };

    // Load TIFF frames - perfect for scanned documents
    input.LoadImageFrames(@"img\Potter.tiff", pageIndices);

    // Execute OCR to read text from image using IronOCR
    OcrResult result = ocr.Read(input);

    // Output the extracted text
    Console.WriteLine(result.Text);
}
Imports IronOcr

' Initialize IronTesseract for advanced OCR operations
Private ocr As New IronTesseract()

' Create input container for processing multiple images
Using input As New OcrInput()
	' Process specific pages from multi-page TIFF files
	Dim pageIndices() As Integer = { 1, 2 }

	' Load TIFF frames - perfect for scanned documents
	input.LoadImageFrames("img\Potter.tiff", pageIndices)

	' Execute OCR to read text from image using IronOCR
	Dim result As OcrResult = ocr.Read(input)

	' Output the extracted text
	Console.WriteLine(result.Text)
End Using
$vbLabelText   $csharpLabel

Esta configuración logra consistentemente una precisión casi perfecta en escaneos de calidad media. El método LoadImageFrames maneja de manera eficiente documentos de múltiples páginas, lo que lo hace ideal para escenarios de procesamiento por lotes.


Documento TIFF de varias páginas que muestra texto de Harry Potter listo para el procesamiento OCR de C#

Documento TIFF de muestra que demuestra las capacidades de extracción de texto de varias páginas de IronOCR

La capacidad de leer texto de imágenes y códigos de barras en documentos escaneados como TIFFs muestra cómo IronOCR simplifica tareas de OCR complejas. La biblioteca sobresale con documentos del mundo real, manejando sin problemas TIFFs de múltiples páginas y extracción de texto de PDFs.

¿Cómo gestiona IronOCR los escaneos de baja calidad?


Escaneo de baja calidad con ruido digital que demuestra las capacidades de mejora de imágenes de IronOCR

Documento de baja resolución con ruido que IronOCR puede procesar con precisión utilizando filtros de imagen

Al trabajar con escaneos imperfectos que contienen distorsión y ruido digital, IronOCR supera a otras bibliotecas OCR de C#. Está diseñado específicamente para escenarios del mundo real en lugar de imágenes de prueba prístinas.

// Advanced Iron Tesseract C# example for low-quality images
using IronOcr;
using System;

var ocr = new IronTesseract();

try
{
    using (var input = new OcrInput())
    {
        // Load specific pages from poor-quality TIFF
        var pageIndices = new int[] { 0, 1 };
        input.LoadImageFrames(@"img\Potter.LowQuality.tiff", pageIndices);

        // Apply deskew filter to correct rotation and perspective
        input.Deskew(); // Critical for improving accuracy on skewed scans

        // Perform OCR with enhanced preprocessing
        OcrResult result = ocr.Read(input);

        // Display results
        Console.WriteLine("Recognized Text:");
        Console.WriteLine(result.Text);
    }
}
catch (Exception ex)
{
    Console.WriteLine($"Error during OCR: {ex.Message}");
}
// Advanced Iron Tesseract C# example for low-quality images
using IronOcr;
using System;

var ocr = new IronTesseract();

try
{
    using (var input = new OcrInput())
    {
        // Load specific pages from poor-quality TIFF
        var pageIndices = new int[] { 0, 1 };
        input.LoadImageFrames(@"img\Potter.LowQuality.tiff", pageIndices);

        // Apply deskew filter to correct rotation and perspective
        input.Deskew(); // Critical for improving accuracy on skewed scans

        // Perform OCR with enhanced preprocessing
        OcrResult result = ocr.Read(input);

        // Display results
        Console.WriteLine("Recognized Text:");
        Console.WriteLine(result.Text);
    }
}
catch (Exception ex)
{
    Console.WriteLine($"Error during OCR: {ex.Message}");
}
' Advanced Iron Tesseract C# example for low-quality images
Imports IronOcr
Imports System

Private ocr = New IronTesseract()

Try
	Using input = New OcrInput()
		' Load specific pages from poor-quality TIFF
		Dim pageIndices = New Integer() { 0, 1 }
		input.LoadImageFrames("img\Potter.LowQuality.tiff", pageIndices)

		' Apply deskew filter to correct rotation and perspective
		input.Deskew() ' Critical for improving accuracy on skewed scans

		' Perform OCR with enhanced preprocessing
		Dim result As OcrResult = ocr.Read(input)

		' Display results
		Console.WriteLine("Recognized Text:")
		Console.WriteLine(result.Text)
	End Using
Catch ex As Exception
	Console.WriteLine($"Error during OCR: {ex.Message}")
End Try
$vbLabelText   $csharpLabel

Usando Input.Deskew(), la precisión mejora a un 99.8% en escaneos de baja calidad, casi igualando los resultados de alta calidad. Esto demuestra por qué IronOCR es la elección preferida para OCR en C# sin complicaciones de Tesseract.

Los filtros de imagen pueden aumentar ligeramente el tiempo de procesamiento pero reducen significativamente la duración total del OCR. Encontrar el equilibrio correcto depende de la calidad de tu documento.

Para la mayoría de los escenarios, Input.Deskew() y Input.DeNoise() proporcionan mejoras confiables al rendimiento del OCR. Aprende más sobre técnicas de preprocesamiento de imagen.

¿Cómo optimizar el rendimiento y la velocidad del OCR?

El factor más significativo que afecta la velocidad del OCR al convertir imágenes a texto en C# es la calidad de entrada. Un DPI más alto (~200 dpi) con ruido mínimo produce los resultados más rápidos y precisos.

Aunque IronOCR se destaca en corregir documentos imperfectos, esta mejora requiere tiempo de procesamiento adicional.

Elige formatos de imagen con artefactos mínimos de compresión. TIFF y PNG generalmente brindan resultados más rápidos que JPEG debido a un menor ruido digital.

¿Qué filtros de imagen mejoran la velocidad del OCR?

Los siguientes filtros pueden mejorar dramáticamente el rendimiento en tu flujo de trabajo de imagen a texto en OCR de C#:

  • OcrInput.Rotate(double degrees): Rota las imágenes en el sentido de las agujas del reloj (negativo para sentido antihorario)
  • OcrInput.Binarize(): Convierte a blanco y negro, mejorando el rendimiento en escenarios de bajo contraste
  • OcrInput.ToGrayScale(): Convierte a escala de grises para posibles mejoras de velocidad
  • OcrInput.Contrast(): Ajusta automáticamente el contraste para una mejor precisión
  • OcrInput.DeNoise(): Elimina artefactos digitales cuando se espera ruido
  • OcrInput.Invert(): Invierte colores para texto en blanco sobre negro
  • OcrInput.Dilate(): Amplía los límites del texto
  • OcrInput.Erode(): Reduce los límites del texto
  • OcrInput.Deskew(): Corrige la alineación - esencial para documentos torcidos
  • OcrInput.DeepCleanBackgroundNoise(): Eliminación agresiva de ruido
  • OcrInput.EnhanceResolution: Mejora la calidad de imagen de baja resolución

¿Cómo configurar IronOCR para obtener la máxima velocidad?

Usa estas configuraciones para optimizar la velocidad al procesar escaneos de alta calidad:

using IronOcr;

// Configure for speed - ideal for clean documents
IronTesseract ocr = new IronTesseract();

// Exclude problematic characters to speed up recognition
ocr.Configuration.BlackListCharacters = "~`$#^*_{[]}|\\";

// Use automatic page segmentation
ocr.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.Auto;

// Select fast English language pack
ocr.Language = OcrLanguage.EnglishFast;

using (OcrInput input = new OcrInput())
{
    // Load specific pages from document
    int[] pageIndices = new int[] { 1, 2 };
    input.LoadImageFrames(@"img\Potter.tiff", pageIndices);

    // Read with optimized settings
    OcrResult result = ocr.Read(input);
    Console.WriteLine(result.Text);
}
using IronOcr;

// Configure for speed - ideal for clean documents
IronTesseract ocr = new IronTesseract();

// Exclude problematic characters to speed up recognition
ocr.Configuration.BlackListCharacters = "~`$#^*_{[]}|\\";

// Use automatic page segmentation
ocr.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.Auto;

// Select fast English language pack
ocr.Language = OcrLanguage.EnglishFast;

using (OcrInput input = new OcrInput())
{
    // Load specific pages from document
    int[] pageIndices = new int[] { 1, 2 };
    input.LoadImageFrames(@"img\Potter.tiff", pageIndices);

    // Read with optimized settings
    OcrResult result = ocr.Read(input);
    Console.WriteLine(result.Text);
}
Imports IronOcr

' Configure for speed - ideal for clean documents
Private ocr As New IronTesseract()

' Exclude problematic characters to speed up recognition
ocr.Configuration.BlackListCharacters = "~`$#^*_{[]}|\"

' Use automatic page segmentation
ocr.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.Auto

' Select fast English language pack
ocr.Language = OcrLanguage.EnglishFast

Using input As New OcrInput()
	' Load specific pages from document
	Dim pageIndices() As Integer = { 1, 2 }
	input.LoadImageFrames("img\Potter.tiff", pageIndices)

	' Read with optimized settings
	Dim result As OcrResult = ocr.Read(input)
	Console.WriteLine(result.Text)
End Using
$vbLabelText   $csharpLabel

Esta configuración optimizada mantiene una precisión del 99.8% mientras logra una mejora del 35% en velocidad en comparación con la configuración predeterminada.

¿Cómo leer áreas específicas de imágenes usando C# OCR?

El siguiente ejemplo de C# usando Iron Tesseract muestra cómo apuntar a regiones específicas usando System.Drawing.Rectangle. Esta técnica es invaluable para procesar formularios estandarizados donde el texto aparece en ubicaciones predecibles.

¿Puede IronOCR procesar regiones recortadas para obtener resultados más rápidos?

Usando coordenadas basadas en píxeles, puedes limitar el OCR a áreas específicas, mejorando dramáticamente la velocidad y evitando la extracción de texto no deseado:

using IronOcr;
using IronSoftware.Drawing;

// Initialize OCR engine for targeted region processing
var ocr = new IronTesseract();

using (var input = new OcrInput())
{
    // Define exact region for OCR - coordinates in pixels
    var contentArea = new System.Drawing.Rectangle(
        x: 215, 
        y: 1250, 
        width: 1335, 
        height: 280
    );

    // Load image with specific area - perfect for forms and invoices
    input.AddImage("img/ComSci.png", contentArea);

    // Process only the defined region
    OcrResult result = ocr.Read(input);
    Console.WriteLine(result.Text);
}
using IronOcr;
using IronSoftware.Drawing;

// Initialize OCR engine for targeted region processing
var ocr = new IronTesseract();

using (var input = new OcrInput())
{
    // Define exact region for OCR - coordinates in pixels
    var contentArea = new System.Drawing.Rectangle(
        x: 215, 
        y: 1250, 
        width: 1335, 
        height: 280
    );

    // Load image with specific area - perfect for forms and invoices
    input.AddImage("img/ComSci.png", contentArea);

    // Process only the defined region
    OcrResult result = ocr.Read(input);
    Console.WriteLine(result.Text);
}
Imports IronOcr
Imports IronSoftware.Drawing

' Initialize OCR engine for targeted region processing
Private ocr = New IronTesseract()

Using input = New OcrInput()
	' Define exact region for OCR - coordinates in pixels
	Dim contentArea = New System.Drawing.Rectangle(x:= 215, y:= 1250, width:= 1335, height:= 280)

	' Load image with specific area - perfect for forms and invoices
	input.AddImage("img/ComSci.png", contentArea)

	' Process only the defined region
	Dim result As OcrResult = ocr.Read(input)
	Console.WriteLine(result.Text)
End Using
$vbLabelText   $csharpLabel

Este enfoque dirigido proporciona una mejora del 41% en velocidad mientras extrae solo el texto relevante. Es ideal para documentos estructurados como facturas, cheques y formularios. La misma técnica de recorte funciona sin problemas con operaciones de PDF OCR.

Documento de Ciencias de la Computación mostrando extracción de región OCR dirigida en C# Documento demostrando extracción precisa de texto basada en región usando la selección de rectángulo de IronOCR

¿Cuántos idiomas admite IronOCR?

IronOCR proporciona 125 idiomas internacionales a través de paquetes de idiomas convenientes. Descárgalos como DLLs desde nuestro sitio web o a través del Administrador de paquetes NuGet.

Instala paquetes de idiomas a través de la interfaz de NuGet (busca "IronOCR.Languages") o visita el listado completo de paquetes de idioma.

Los idiomas soportados incluyen árabe, chino (simplificado/tradicional), japonés, coreano, hindi, ruso, alemán, francés, español y más de 115 otros, cada uno optimizado para el reconocimiento preciso de texto.

¿Cómo implementar OCR en varios idiomas?

Este ejemplo de tutorial de IronOCR en C# demuestra el reconocimiento de texto en árabe:

Install-Package IronOcr.Languages.Arabic
Texto árabe procesado por IronOCR que demuestra compatibilidad con OCR en varios idiomas

IronOCR extrae con precisión texto árabe de una imagen GIF

// Install-Package IronOcr.Languages.Arabic
using IronOcr;

// Configure for Arabic language OCR
var ocr = new IronTesseract();
ocr.Language = OcrLanguage.Arabic;

using (var input = new OcrInput())
{
    // Load Arabic text image
    input.AddImage("img/arabic.gif");

    // IronOCR handles low-quality Arabic text that standard Tesseract cannot
    var result = ocr.Read(input);

    // Save to file (console may not display Arabic correctly)
    result.SaveAsTextFile("arabic.txt");
}
// Install-Package IronOcr.Languages.Arabic
using IronOcr;

// Configure for Arabic language OCR
var ocr = new IronTesseract();
ocr.Language = OcrLanguage.Arabic;

using (var input = new OcrInput())
{
    // Load Arabic text image
    input.AddImage("img/arabic.gif");

    // IronOCR handles low-quality Arabic text that standard Tesseract cannot
    var result = ocr.Read(input);

    // Save to file (console may not display Arabic correctly)
    result.SaveAsTextFile("arabic.txt");
}
' Install-Package IronOcr.Languages.Arabic
Imports IronOcr

' Configure for Arabic language OCR
Private ocr = New IronTesseract()
ocr.Language = OcrLanguage.Arabic

Using input = New OcrInput()
	' Load Arabic text image
	input.AddImage("img/arabic.gif")

	' IronOCR handles low-quality Arabic text that standard Tesseract cannot
	Dim result = ocr.Read(input)

	' Save to file (console may not display Arabic correctly)
	result.SaveAsTextFile("arabic.txt")
End Using
$vbLabelText   $csharpLabel

¿Puede IronOCR gestionar documentos con múltiples idiomas?

Cuando los documentos contienen idiomas mixtos, configura IronOCR para soporte multilingüe:

Install-Package IronOcr.Languages.ChineseSimplified
// Multi-language OCR configuration
using IronOcr;

var ocr = new IronTesseract();

// Set primary language
ocr.Language = OcrLanguage.ChineseSimplified;

// Add secondary languages as needed
ocr.AddSecondaryLanguage(OcrLanguage.English);

// Custom .traineddata files can be added for specialized recognition
// ocr.AddSecondaryLanguage("path/to/custom.traineddata");

using (var input = new OcrInput())
{
    // Process multi-language document
    input.AddImage("img/MultiLanguage.jpeg");

    var result = ocr.Read(input);
    result.SaveAsTextFile("MultiLanguage.txt");
}
// Multi-language OCR configuration
using IronOcr;

var ocr = new IronTesseract();

// Set primary language
ocr.Language = OcrLanguage.ChineseSimplified;

// Add secondary languages as needed
ocr.AddSecondaryLanguage(OcrLanguage.English);

// Custom .traineddata files can be added for specialized recognition
// ocr.AddSecondaryLanguage("path/to/custom.traineddata");

using (var input = new OcrInput())
{
    // Process multi-language document
    input.AddImage("img/MultiLanguage.jpeg");

    var result = ocr.Read(input);
    result.SaveAsTextFile("MultiLanguage.txt");
}
' Multi-language OCR configuration
Imports IronOcr

Private ocr = New IronTesseract()

' Set primary language
ocr.Language = OcrLanguage.ChineseSimplified

' Add secondary languages as needed
ocr.AddSecondaryLanguage(OcrLanguage.English)

' Custom .traineddata files can be added for specialized recognition
' ocr.AddSecondaryLanguage("path/to/custom.traineddata");

Using input = New OcrInput()
	' Process multi-language document
	input.AddImage("img/MultiLanguage.jpeg")

	Dim result = ocr.Read(input)
	result.SaveAsTextFile("MultiLanguage.txt")
End Using
$vbLabelText   $csharpLabel

¿Cómo procesar documentos de varias páginas con C# OCR?

IronOCR combina sin esfuerzo múltiples páginas o imágenes en un solo OcrResult. Esta función habilita capacidades poderosas como crear PDFs buscables y extraer texto de conjuntos de documentos completos.

Mezcla y combina varias fuentes - imágenes, marcos de TIFF y páginas de PDF - en una sola operación de OCR:

// Multi-source document processing
using IronOcr;

IronTesseract ocr = new IronTesseract();

using (OcrInput input = new OcrInput())
{
    // Add various image formats
    input.AddImage("image1.jpeg");
    input.AddImage("image2.png");

    // Process specific frames from multi-frame images
    int[] frameNumbers = { 1, 2 };
    input.AddImageFrames("image3.gif", frameNumbers);

    // Process all sources together
    OcrResult result = ocr.Read(input);

    // Verify page count
    Console.WriteLine($"{result.Pages.Count} Pages processed.");
}
// Multi-source document processing
using IronOcr;

IronTesseract ocr = new IronTesseract();

using (OcrInput input = new OcrInput())
{
    // Add various image formats
    input.AddImage("image1.jpeg");
    input.AddImage("image2.png");

    // Process specific frames from multi-frame images
    int[] frameNumbers = { 1, 2 };
    input.AddImageFrames("image3.gif", frameNumbers);

    // Process all sources together
    OcrResult result = ocr.Read(input);

    // Verify page count
    Console.WriteLine($"{result.Pages.Count} Pages processed.");
}
' Multi-source document processing
Imports IronOcr

Private ocr As New IronTesseract()

Using input As New OcrInput()
	' Add various image formats
	input.AddImage("image1.jpeg")
	input.AddImage("image2.png")

	' Process specific frames from multi-frame images
	Dim frameNumbers() As Integer = { 1, 2 }
	input.AddImageFrames("image3.gif", frameNumbers)

	' Process all sources together
	Dim result As OcrResult = ocr.Read(input)

	' Verify page count
	Console.WriteLine($"{result.Pages.Count} Pages processed.")
End Using
$vbLabelText   $csharpLabel

Procesa todas las páginas de un archivo TIFF de manera eficiente:

using IronOcr;

IronTesseract ocr = new IronTesseract();

using (OcrInput input = new OcrInput())
{
    // Define pages to process (0-based indexing)
    int[] pageIndices = new int[] { 0, 1 };

    // Load specific TIFF frames
    input.LoadImageFrames("MultiFrame.Tiff", pageIndices);

    // Extract text from all frames
    OcrResult result = ocr.Read(input);

    Console.WriteLine(result.Text);
    Console.WriteLine($"{result.Pages.Count} Pages processed");
}
using IronOcr;

IronTesseract ocr = new IronTesseract();

using (OcrInput input = new OcrInput())
{
    // Define pages to process (0-based indexing)
    int[] pageIndices = new int[] { 0, 1 };

    // Load specific TIFF frames
    input.LoadImageFrames("MultiFrame.Tiff", pageIndices);

    // Extract text from all frames
    OcrResult result = ocr.Read(input);

    Console.WriteLine(result.Text);
    Console.WriteLine($"{result.Pages.Count} Pages processed");
}
Imports IronOcr

Private ocr As New IronTesseract()

Using input As New OcrInput()
	' Define pages to process (0-based indexing)
	Dim pageIndices() As Integer = { 0, 1 }

	' Load specific TIFF frames
	input.LoadImageFrames("MultiFrame.Tiff", pageIndices)

	' Extract text from all frames
	Dim result As OcrResult = ocr.Read(input)

	Console.WriteLine(result.Text)
	Console.WriteLine($"{result.Pages.Count} Pages processed")
End Using
$vbLabelText   $csharpLabel

Convierte TIFFs o PDFs a formatos buscables:

using System;
using IronOcr;

IronTesseract ocr = new IronTesseract();

using (OcrInput input = new OcrInput())
{
    try
    {
        // Load password-protected PDF if needed
        input.LoadPdf("example.pdf", "password");

        // Process entire document
        OcrResult result = ocr.Read(input);

        Console.WriteLine(result.Text);
        Console.WriteLine($"{result.Pages.Count} Pages recognized");
    }
    catch (Exception ex)
    {
        Console.WriteLine($"Error processing PDF: {ex.Message}");
    }
}
using System;
using IronOcr;

IronTesseract ocr = new IronTesseract();

using (OcrInput input = new OcrInput())
{
    try
    {
        // Load password-protected PDF if needed
        input.LoadPdf("example.pdf", "password");

        // Process entire document
        OcrResult result = ocr.Read(input);

        Console.WriteLine(result.Text);
        Console.WriteLine($"{result.Pages.Count} Pages recognized");
    }
    catch (Exception ex)
    {
        Console.WriteLine($"Error processing PDF: {ex.Message}");
    }
}
Imports System
Imports IronOcr

Private ocr As New IronTesseract()

Using input As New OcrInput()
	Try
		' Load password-protected PDF if needed
		input.LoadPdf("example.pdf", "password")

		' Process entire document
		Dim result As OcrResult = ocr.Read(input)

		Console.WriteLine(result.Text)
		Console.WriteLine($"{result.Pages.Count} Pages recognized")
	Catch ex As Exception
		Console.WriteLine($"Error processing PDF: {ex.Message}")
	End Try
End Using
$vbLabelText   $csharpLabel

¿Cómo crear archivos PDF con capacidad de búsqueda a partir de imágenes?

IronOCR se destaca en la creación de PDFs buscables - una característica crítica para sistemas de bases de datos, optimización SEO, y accesibilidad de documentos.

using IronOcr;

IronTesseract ocr = new IronTesseract();

using (OcrInput input = new OcrInput())
{
    // Set document metadata
    input.Title = "Quarterly Report";

    // Combine multiple sources
    input.AddImage("image1.jpeg");
    input.AddImage("image2.png");

    // Add specific frames from animated images
    int[] gifFrames = new int[] { 1, 2 };
    input.AddImageFrames("image3.gif", gifFrames);

    // Create searchable PDF
    OcrResult result = ocr.Read(input);
    result.SaveAsSearchablePdf("searchable.pdf");
}
using IronOcr;

IronTesseract ocr = new IronTesseract();

using (OcrInput input = new OcrInput())
{
    // Set document metadata
    input.Title = "Quarterly Report";

    // Combine multiple sources
    input.AddImage("image1.jpeg");
    input.AddImage("image2.png");

    // Add specific frames from animated images
    int[] gifFrames = new int[] { 1, 2 };
    input.AddImageFrames("image3.gif", gifFrames);

    // Create searchable PDF
    OcrResult result = ocr.Read(input);
    result.SaveAsSearchablePdf("searchable.pdf");
}
Imports IronOcr

Private ocr As New IronTesseract()

Using input As New OcrInput()
	' Set document metadata
	input.Title = "Quarterly Report"

	' Combine multiple sources
	input.AddImage("image1.jpeg")
	input.AddImage("image2.png")

	' Add specific frames from animated images
	Dim gifFrames() As Integer = { 1, 2 }
	input.AddImageFrames("image3.gif", gifFrames)

	' Create searchable PDF
	Dim result As OcrResult = ocr.Read(input)
	result.SaveAsSearchablePdf("searchable.pdf")
End Using
$vbLabelText   $csharpLabel

Convierte PDFs existentes a versiones buscables:

using IronOcr;

var ocr = new IronTesseract();

using (var input = new OcrInput())
{
    // Set PDF metadata
    input.Title = "Annual Report 2024";

    // Process existing PDF
    input.LoadPdf("example.pdf", "password");

    // Generate searchable version
    var result = ocr.Read(input);
    result.SaveAsSearchablePdf("searchable.pdf");
}
using IronOcr;

var ocr = new IronTesseract();

using (var input = new OcrInput())
{
    // Set PDF metadata
    input.Title = "Annual Report 2024";

    // Process existing PDF
    input.LoadPdf("example.pdf", "password");

    // Generate searchable version
    var result = ocr.Read(input);
    result.SaveAsSearchablePdf("searchable.pdf");
}
Imports IronOcr

Private ocr = New IronTesseract()

Using input = New OcrInput()
	' Set PDF metadata
	input.Title = "Annual Report 2024"

	' Process existing PDF
	input.LoadPdf("example.pdf", "password")

	' Generate searchable version
	Dim result = ocr.Read(input)
	result.SaveAsSearchablePdf("searchable.pdf")
End Using
$vbLabelText   $csharpLabel

Aplica la misma técnica a las conversiones de TIFF:

using IronOcr;

var ocr = new IronTesseract();

using (var input = new OcrInput())
{
    // Configure document properties
    input.Title = "Scanned Archive Document";

    // Select pages to process
    var pageIndices = new int[] { 1, 2 };
    input.LoadImageFrames("example.tiff", pageIndices);

    // Create searchable PDF from TIFF
    OcrResult result = ocr.Read(input);
    result.SaveAsSearchablePdf("searchable.pdf");
}
using IronOcr;

var ocr = new IronTesseract();

using (var input = new OcrInput())
{
    // Configure document properties
    input.Title = "Scanned Archive Document";

    // Select pages to process
    var pageIndices = new int[] { 1, 2 };
    input.LoadImageFrames("example.tiff", pageIndices);

    // Create searchable PDF from TIFF
    OcrResult result = ocr.Read(input);
    result.SaveAsSearchablePdf("searchable.pdf");
}
Imports IronOcr

Private ocr = New IronTesseract()

Using input = New OcrInput()
	' Configure document properties
	input.Title = "Scanned Archive Document"

	' Select pages to process
	Dim pageIndices = New Integer() { 1, 2 }
	input.LoadImageFrames("example.tiff", pageIndices)

	' Create searchable PDF from TIFF
	Dim result As OcrResult = ocr.Read(input)
	result.SaveAsSearchablePdf("searchable.pdf")
End Using
$vbLabelText   $csharpLabel

¿Cómo exportar resultados de OCR como HTML HOCR?

IronOCR soporta la exportación de HOCR HTML, permitiendo conversiones estructuradas de PDF a HTML y TIFF a HTML mientras preserva la información de diseño:

using IronOcr;

var ocr = new IronTesseract();

using (var input = new OcrInput())
{
    // Set HTML title
    input.Title = "Document Archive";

    // Process multiple document types
    input.AddImage("image2.jpeg");
    input.AddPdf("example.pdf", "password");

    // Add TIFF pages
    var pageIndices = new int[] { 1, 2 };
    input.AddTiff("example.tiff", pageIndices);

    // Export as HOCR with position data
    OcrResult result = ocr.Read(input);
    result.SaveAsHocrFile("hocr.html");
}
using IronOcr;

var ocr = new IronTesseract();

using (var input = new OcrInput())
{
    // Set HTML title
    input.Title = "Document Archive";

    // Process multiple document types
    input.AddImage("image2.jpeg");
    input.AddPdf("example.pdf", "password");

    // Add TIFF pages
    var pageIndices = new int[] { 1, 2 };
    input.AddTiff("example.tiff", pageIndices);

    // Export as HOCR with position data
    OcrResult result = ocr.Read(input);
    result.SaveAsHocrFile("hocr.html");
}
Imports IronOcr

Private ocr = New IronTesseract()

Using input = New OcrInput()
	' Set HTML title
	input.Title = "Document Archive"

	' Process multiple document types
	input.AddImage("image2.jpeg")
	input.AddPdf("example.pdf", "password")

	' Add TIFF pages
	Dim pageIndices = New Integer() { 1, 2 }
	input.AddTiff("example.tiff", pageIndices)

	' Export as HOCR with position data
	Dim result As OcrResult = ocr.Read(input)
	result.SaveAsHocrFile("hocr.html")
End Using
$vbLabelText   $csharpLabel

¿Puede IronOCR leer códigos de barras junto con texto?

IronOCR combina de manera única el reconocimiento de texto con capacidades de lectura de códigos de barras, eliminando la necesidad de bibliotecas separadas:

// Enable combined text and barcode recognition
using IronOcr;

var ocr = new IronTesseract();

// Enable barcode detection
ocr.Configuration.ReadBarCodes = true;

using (var input = new OcrInput())
{
    // Load image containing both text and barcodes
    input.AddImage("img/Barcode.png");

    // Process both text and barcodes
    var result = ocr.Read(input);

    // Extract barcode data
    foreach (var barcode in result.Barcodes)
    {
        Console.WriteLine($"Barcode Value: {barcode.Value}");
        Console.WriteLine($"Type: {barcode.Type}, Location: {barcode.Location}");
    }
}
// Enable combined text and barcode recognition
using IronOcr;

var ocr = new IronTesseract();

// Enable barcode detection
ocr.Configuration.ReadBarCodes = true;

using (var input = new OcrInput())
{
    // Load image containing both text and barcodes
    input.AddImage("img/Barcode.png");

    // Process both text and barcodes
    var result = ocr.Read(input);

    // Extract barcode data
    foreach (var barcode in result.Barcodes)
    {
        Console.WriteLine($"Barcode Value: {barcode.Value}");
        Console.WriteLine($"Type: {barcode.Type}, Location: {barcode.Location}");
    }
}
' Enable combined text and barcode recognition
Imports IronOcr

Private ocr = New IronTesseract()

' Enable barcode detection
ocr.Configuration.ReadBarCodes = True

Using input = New OcrInput()
	' Load image containing both text and barcodes
	input.AddImage("img/Barcode.png")

	' Process both text and barcodes
	Dim result = ocr.Read(input)

	' Extract barcode data
	For Each barcode In result.Barcodes
		Console.WriteLine($"Barcode Value: {barcode.Value}")
		Console.WriteLine($"Type: {barcode.Type}, Location: {barcode.Location}")
	Next barcode
End Using
$vbLabelText   $csharpLabel

¿Cómo acceder a resultados detallados de OCR y metadatos?

El objeto de resultados de IronOCR proporciona datos comprensivos que los desarrolladores avanzados pueden aprovechar para aplicaciones sofisticadas.

Cada OcrResult contiene colecciones jerárquicas: páginas, párrafos, líneas, palabras y caracteres. Todos los elementos incluyen metadatos detallados como ubicación, información de fuente, y puntuaciones de confianza.

Los elementos individuales (párrafos, palabras, códigos de barras) pueden ser exportados como imágenes o bitmaps para procesamiento adicional:

using System;
using IronOcr;
using IronSoftware.Drawing;

// Configure with barcode support
IronTesseract ocr = new IronTesseract
{
    Configuration = { ReadBarCodes = true }
};

using OcrInput input = new OcrInput();

// Process multi-page document
int[] pageIndices = { 1, 2 };
input.LoadImageFrames(@"img\Potter.tiff", pageIndices);

OcrResult result = ocr.Read(input);

// Navigate the complete results hierarchy
foreach (var page in result.Pages)
{
    // Page-level data
    int pageNumber = page.PageNumber;
    string pageText = page.Text;
    int pageWordCount = page.WordCount;

    // Extract page elements
    OcrResult.Barcode[] barcodes = page.Barcodes;
    AnyBitmap pageImage = page.ToBitmap();
    double pageWidth = page.Width;
    double pageHeight = page.Height;

    foreach (var paragraph in page.Paragraphs)
    {
        // Paragraph properties
        int paragraphNumber = paragraph.ParagraphNumber;
        string paragraphText = paragraph.Text;
        double paragraphConfidence = paragraph.Confidence;
        var textDirection = paragraph.TextDirection;

        foreach (var line in paragraph.Lines)
        {
            // Line details including baseline information
            string lineText = line.Text;
            double lineConfidence = line.Confidence;
            double baselineAngle = line.BaselineAngle;
            double baselineOffset = line.BaselineOffset;

            foreach (var word in line.Words)
            {
                // Word-level data
                string wordText = word.Text;
                double wordConfidence = word.Confidence;

                // Font information (when available)
                if (word.Font != null)
                {
                    string fontName = word.Font.FontName;
                    double fontSize = word.Font.FontSize;
                    bool isBold = word.Font.IsBold;
                    bool isItalic = word.Font.IsItalic;
                }

                foreach (var character in word.Characters)
                {
                    // Character-level analysis
                    string charText = character.Text;
                    double charConfidence = character.Confidence;

                    // Alternative character choices for spell-checking
                    OcrResult.Choice[] alternatives = character.Choices;
                }
            }
        }
    }
}
using System;
using IronOcr;
using IronSoftware.Drawing;

// Configure with barcode support
IronTesseract ocr = new IronTesseract
{
    Configuration = { ReadBarCodes = true }
};

using OcrInput input = new OcrInput();

// Process multi-page document
int[] pageIndices = { 1, 2 };
input.LoadImageFrames(@"img\Potter.tiff", pageIndices);

OcrResult result = ocr.Read(input);

// Navigate the complete results hierarchy
foreach (var page in result.Pages)
{
    // Page-level data
    int pageNumber = page.PageNumber;
    string pageText = page.Text;
    int pageWordCount = page.WordCount;

    // Extract page elements
    OcrResult.Barcode[] barcodes = page.Barcodes;
    AnyBitmap pageImage = page.ToBitmap();
    double pageWidth = page.Width;
    double pageHeight = page.Height;

    foreach (var paragraph in page.Paragraphs)
    {
        // Paragraph properties
        int paragraphNumber = paragraph.ParagraphNumber;
        string paragraphText = paragraph.Text;
        double paragraphConfidence = paragraph.Confidence;
        var textDirection = paragraph.TextDirection;

        foreach (var line in paragraph.Lines)
        {
            // Line details including baseline information
            string lineText = line.Text;
            double lineConfidence = line.Confidence;
            double baselineAngle = line.BaselineAngle;
            double baselineOffset = line.BaselineOffset;

            foreach (var word in line.Words)
            {
                // Word-level data
                string wordText = word.Text;
                double wordConfidence = word.Confidence;

                // Font information (when available)
                if (word.Font != null)
                {
                    string fontName = word.Font.FontName;
                    double fontSize = word.Font.FontSize;
                    bool isBold = word.Font.IsBold;
                    bool isItalic = word.Font.IsItalic;
                }

                foreach (var character in word.Characters)
                {
                    // Character-level analysis
                    string charText = character.Text;
                    double charConfidence = character.Confidence;

                    // Alternative character choices for spell-checking
                    OcrResult.Choice[] alternatives = character.Choices;
                }
            }
        }
    }
}
Imports System
Imports IronOcr
Imports IronSoftware.Drawing

' Configure with barcode support
Private ocr As New IronTesseract With {
	.Configuration = { ReadBarCodes = True }
}

Private OcrInput As using

' Process multi-page document
Private pageIndices() As Integer = { 1, 2 }
input.LoadImageFrames("img\Potter.tiff", pageIndices)

Dim result As OcrResult = ocr.Read(input)

' Navigate the complete results hierarchy
For Each page In result.Pages
	' Page-level data
	Dim pageNumber As Integer = page.PageNumber
	Dim pageText As String = page.Text
	Dim pageWordCount As Integer = page.WordCount

	' Extract page elements
	Dim barcodes() As OcrResult.Barcode = page.Barcodes
	Dim pageImage As AnyBitmap = page.ToBitmap()
	Dim pageWidth As Double = page.Width
	Dim pageHeight As Double = page.Height

	For Each paragraph In page.Paragraphs
		' Paragraph properties
		Dim paragraphNumber As Integer = paragraph.ParagraphNumber
		Dim paragraphText As String = paragraph.Text
		Dim paragraphConfidence As Double = paragraph.Confidence
		Dim textDirection = paragraph.TextDirection

		For Each line In paragraph.Lines
			' Line details including baseline information
			Dim lineText As String = line.Text
			Dim lineConfidence As Double = line.Confidence
			Dim baselineAngle As Double = line.BaselineAngle
			Dim baselineOffset As Double = line.BaselineOffset

			For Each word In line.Words
				' Word-level data
				Dim wordText As String = word.Text
				Dim wordConfidence As Double = word.Confidence

				' Font information (when available)
				If word.Font IsNot Nothing Then
					Dim fontName As String = word.Font.FontName
					Dim fontSize As Double = word.Font.FontSize
					Dim isBold As Boolean = word.Font.IsBold
					Dim isItalic As Boolean = word.Font.IsItalic
				End If

				For Each character In word.Characters
					' Character-level analysis
					Dim charText As String = character.Text
					Dim charConfidence As Double = character.Confidence

					' Alternative character choices for spell-checking
					Dim alternatives() As OcrResult.Choice = character.Choices
				Next character
			Next word
		Next line
	Next paragraph
Next page
$vbLabelText   $csharpLabel

Resumen

IronOCR proporciona a los desarrolladores de C# la implementación más avanzada del API Tesseract, funcionando sin problemas en plataformas Windows, Linux y Mac. Su capacidad de leer texto de imágenes utilizando IronOCR - incluso de documentos imperfectos - lo distingue de las soluciones básicas de OCR.

Las características únicas de la biblioteca incluyen lectura de códigos de barras integrada y la capacidad de exportar resultados como PDFs buscables o HOCR HTML, capacidades no disponibles en implementaciones estándar de Tesseract.

Avanzando

Para continuar dominando IronOCR:

Descargar código fuente

¿Listo para implementar la conversión de OCR de imagen a texto en C# en tus aplicaciones? Descarga IronOCR y comienza tu prueba gratuita hoy.

Preguntas Frecuentes

¿Cómo puedo convertir imágenes a texto en C# sin usar Tesseract?

Puedes usar IronOCR para convertir imágenes a texto en C# sin necesidad de Tesseract. IronOCR simplifica el proceso con métodos integrados que manejan la conversión de imagen a texto directamente.

¿Cómo mejoro la precisión del OCR en imágenes de baja calidad?

IronOCR proporciona filtros de imagen como Input.Deskew() y Input.DeNoise() que se pueden usar para mejorar imágenes de baja calidad corrigiendo la inclinación y reduciendo el ruido, mejorando así significativamente la precisión del OCR.

¿Cuáles son los pasos para extraer texto de un documento de varias páginas usando OCR en C#?

Para extraer texto de documentos de varias páginas, IronOCR te permite cargar y procesar cada página usando métodos como LoadPdf() para PDFs o files TIFF, convirtiendo efectivamente cada página a texto.

¿Es posible leer códigos de barras y texto simultáneamente desde una imagen?

Sí, IronOCR puede leer tanto texto como códigos de barras de una sola imagen. Puedes habilitar la lectura de códigos de barras con ocr.Configuration.ReadBarCodes = true, lo que permite la extracción tanto de datos de texto como de código de barras.

¿Cómo puedo configurar OCR para procesar documentos en varios idiomas?

IronOCR soporta más de 125 idiomas y te permite establecer un idioma principal usando ocr.Language y agregar idiomas adicionales con ocr.AddSecondaryLanguage() para el procesamiento de documentos multilingües.

¿Qué métodos están disponibles para exportar resultados de OCR en diferentes formatos?

IronOCR ofrece varios métodos para exportar resultados de OCR, como SaveAsSearchablePdf() para PDFs, SaveAsTextFile() para texto plano y SaveAsHocrFile() para formato HOCR HTML.

¿Cómo puedo optimizar la velocidad de procesamiento de OCR para archivos de imagen grandes?

Para optimizar la velocidad de procesamiento de OCR, usa el OcrLanguage.EnglishFast de IronOCR para un reconocimiento de idioma más rápido y define regiones específicas para OCR usando System.Drawing.Rectangle para reducir el tiempo de procesamiento.

¿Cómo manejo el procesamiento de OCR para archivos PDF protegidos?

Al tratar con PDFs protegidos, usa el método LoadPdf() junto con la contraseña correcta. IronOCR maneja PDFs basados en imágenes convirtiendo páginas a imágenes automáticamente para procesamiento OCR.

¿Qué debo hacer si los resultados de OCR no son exactos?

Si los resultados de OCR son inexactos, considera usar las funciones de mejora de imagen de IronOCR como Input.Deskew() y Input.DeNoise(), y asegúrate de que los paquetes de idiomas correctos estén instalados.

¿Puedo personalizar el proceso de OCR para excluir ciertos caracteres?

Sí, IronOCR permite la personalización del proceso de OCR utilizando la propiedad BlackListCharacters para excluir caracteres específicos, mejorando la precisión y la velocidad de procesamiento al centrarse solo en el texto relevante.

Jacob Mellor, Director de Tecnología @ Team Iron
Director de Tecnología

Jacob Mellor es Director de Tecnología en Iron Software y un ingeniero visionario que lidera la tecnología PDF en C#. Como el desarrollador original detrás de la base de código central de Iron Software, ha moldeado la arquitectura de productos de la compañía desde ...

Leer más
Revisado por
Jeff Fritz
Jeffrey T. Fritz
Gerente Principal de Programas - Equipo de la Comunidad .NET
Jeff también es Gerente Principal de Programas para los equipos de .NET y Visual Studio. Es el productor ejecutivo de la serie de conferencias virtuales .NET Conf y anfitrión de 'Fritz and Friends', una transmisión en vivo para desarrolladores que se emite dos veces a la semana donde habla sobre tecnología y escribe código junto con la audiencia. Jeff escribe talleres, presentaciones, y planifica contenido para los eventos de desarrolladores más importantes de Microsoft, incluyendo Microsoft Build, Microsoft Ignite, .NET Conf y la Cumbre de Microsoft MVP.
¿Listo para empezar?
Nuget Descargas 5,167,857 | Version: 2025.11 recién lanzado