Extracción de texto desordenada de tablas compactas

Curtis Chau
Curtis Chau
Updated: 10 de junio de 2026

El texto extraído de tablas o diseños de formularios compactos aparece desordenado. Caracteres de filas adyacentes se entrelazan, por ejemplo, "Número único 123456789" se extrae como "U123456789nique Number".

Esta es una limitación conocida de la extracción de page.Lines para diseños densamente empaquetados. page.Lines agrupa caracteres utilizando una tolerancia vertical incorporada que no es configurable. Cuando dos filas visibles en una celda de tabla están solo a un punto o dos de distancia, el agrupador colapsa ambas filas en una línea lógica y ordena los caracteres de izquierda a derecha, entrelazándolos. El método ExtractTextFromPage(i) utiliza por defecto el orden de flujo de contenido, el cual puede no coincidir con el orden de lectura visual en formularios PDF.

Solución

Recomendado: Extraer usando TextChunks con una tolerancia ajustable

Cada TextChunk expone su BoundingBox, lo que permite agrupar por posición vertical y ordenar dentro de cada fila por posición horizontal:

using IronPdf.Pages;
using System;
using System.Linq;
using System.Text;

static string ExtractTextUsingTextChunks(IPdfPage page, double rowTolerance = 2.0)
{
    var rows = page.TextChunks
        .Where(c => !string.IsNullOrWhiteSpace(c.Contents))
        .GroupBy(c => Math.Round(c.BoundingBox.Top / rowTolerance) * rowTolerance)
        .OrderByDescending(g => g.Key);

    var extractedText = new StringBuilder();
    foreach (var row in rows)
    {
        var line = string.Join(" ",
            row.OrderBy(c => c.BoundingBox.Left)
               .Select(c => c.Contents.Trim())
               .Where(text => !string.IsNullOrWhiteSpace(text)));
        extractedText.AppendLine(line);
    }
    return extractedText.ToString();
}

Comienza con rowTolerance = 2.0. Si las filas aún se fusionan, redúcelo a 1.0 o 0.5. Para un control más fino, sustituye page.Characters por page.TextChunks.

Alternativa: Extracción en orden visual

Para PDFs donde solo el orden de flujo de contenido está mal:

pdf.ExtractTextFromPage(i, TextExtractionOrder.VisualOrder);

Para PDFs con filas que están visualmente muy juntas, el enfoque TextChunks maneja mejor las tolerancias ajustadas.

Curtis Chau tiene una licenciatura en Ciencias de la Computación (Carleton University) y se especializa en el desarrollo front-end con experiencia en Node.js, TypeScript, JavaScript y React. Apasionado por crear interfaces de usuario intuitivas y estéticamente agradables, disfruta trabajando con frameworks modernos y creando manuales bien estructurados y visualmente atractivos.

Leer más

¿Listo para empezar?

Nuget Downloads 21,739,885Versión:2026.10recién publicada