Extraction de texte dans le désordre à partir de tableaux compacts

Curtis Chau
Curtis Chau
Updated: 10 juin 2026

Le texte extrait de mises en page de tableaux ou de formulaires compactes apparaît mêlé. Les caractères des lignes adjacentes sont intercalés, par exemple, "Numéro unique 123456789" est extrait comme "U123456789nique Number".

Il s'agit d'une limitation connue de l'extraction page.Lines pour les mises en page densément remplies. page.Lines regroupe les caractères en utilisant une tolérance verticale intégrée qui n'est pas configurable. Quand deux lignes visibles dans une cellule de tableau sont seulement un ou deux points l'une de l'autre, le regroupeur fusionne les deux lignes en une seule ligne logique et trie les caractères de gauche à droite, les entrelaçant. La méthode ExtractTextFromPage(i) utilise par défaut l'ordre des flux de contenu, ce qui peut ne pas correspondre à l'ordre visuel de lecture dans les PDF de formulaire.

Solution

Recommandé : Extraire en utilisant des TextChunks avec une tolérance réglable

Chaque TextChunk expose son BoundingBox, ce qui permet de regrouper par position verticale et de trier au sein de chaque ligne par position horizontale :

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();
}

Commencez avec rowTolerance = 2.0. Si les lignes se fusionnent encore, réduisez-le à 1.0 ou 0.5. Pour un contrôle plus précis, remplacez page.Characters par page.TextChunks.

Alternative : extraction selon l'ordre visuel

Pour les PDF où seul l'ordre du flux de contenu est erroné :

pdf.ExtractTextFromPage(i, TextExtractionOrder.VisualOrder);

Pour les PDF avec des lignes visuellement très proches, l'approche TextChunks gère mieux les tolérances serrées.

Curtis Chau détient un baccalauréat en informatique (Université de Carleton) et se spécialise dans le développement front-end avec expertise en Node.js, TypeScript, JavaScript et React. Passionné par la création d'interfaces utilisateur intuitives et esthétiquement plaisantes, Curtis aime travailler avec des frameworks modernes et créer des manuels bien structurés et visuellement attrayants.

Lire la suite

Prêt à commencer ?

Nuget Downloads 21,739,885Version :2026.10vient de sortir