Hola!
El código que tengo está bajo licencia de la empresa donde trabajo pero un ejemplo de IA sería algo así.
instalar Install-Package iTextSharp
*---Codigo----
using System;
using System.IO;
using iTextSharp.text.pdf;
using iTextSharp.text.pdf.parser;
class Program
{
static void Main(string[] args)
{
// Ruta del PDF de entrada
string pdfPath = @"C:\ruta\entrada.pdf";
// Ruta del TXT de salida
string txtPath = @"C:\ruta\salida.txt";
try
{
// Abrimos el PDF
using (PdfReader reader = new PdfReader(pdfPath))
{
using (StreamWriter sw = new StreamWriter(txtPath))
{
for (int i = 1; i <= reader.NumberOfPages; i++)
{
// Extraemos texto página por página
string pageText = PdfTextExtractor.GetTextFromPage(reader, i, new LocationTextExtractionStrategy());
// Normalizamos saltos de línea
pageText = pageText.Replace("\n", Environment.NewLine);
sw.WriteLine(pageText);
}
}
}
Console.WriteLine("Conversión completada. Archivo guardado en: " + txtPath);
}
catch (Exception ex)
{
Console.WriteLine("Error: " + ex.Message);
}
}
}
Ahora si es una imagen en PDF tenes otra solucion
Install-Package Tesseract
instalar Install-Package iTextSharp
using System;
using System.IO;
using iTextSharp.text.pdf;
using iTextSharp.text.pdf.parser;
using Tesseract;
using PdfiumViewer; // Necesario para renderizar páginas PDF como imágenes
class Program
{
static void Main(string[] args)
{
string pdfPath = @"C:\ruta\entrada.pdf";
string txtPath = @"C:\ruta\salida.txt";
try
{
using (StreamWriter sw = new StreamWriter(txtPath))
{
using (PdfReader reader = new PdfReader(pdfPath))
{
for (int i = 1; i <= reader.NumberOfPages; i++)
{
string pageText = PdfTextExtractor.GetTextFromPage(reader, i, new LocationTextExtractionStrategy());
if (string.IsNullOrWhiteSpace(pageText))
{
// Si no hay texto, hacemos OCR sobre la página
using (var pdfDoc = PdfDocument.Load(pdfPath))
{
using (var image = pdfDoc.Render(i - 1, 300, 300, true))
{
string tempImage = Path.GetTempFileName() + ".png";
image.Save(tempImage);
// OCR con Tesseract
using (var engine = new TesseractEngine(@"./tessdata", "spa", EngineMode.Default))
{
using (var img = Pix.LoadFromFile(tempImage))
{
using (var page = engine.Process(img))
{
pageText = page.GetText();
}
}
}
File.Delete(tempImage);
}
}
}
pageText = pageText.Replace("\n", Environment.NewLine);
sw.WriteLine(pageText);
}
}
}
Console.WriteLine("Conversión completada. Archivo guardado en: " + txtPath);
}
catch (Exception ex)
{
Console.WriteLine("Error: " + ex.Message);
}
}
}
Saludos,
Eric!