IRONSOFTWAREHOME

Out-of-Order Text Extraction from Tightly Packed Tables

Curtis Chau
Curtis Chau
Updated: June 10, 2026

Text extracted from tightly packed table or form layouts appears scrambled. Characters from adjacent rows are interleaved, for example, "Unique Number 123456789" is extracted as "U123456789nique Number".

This is a known limitation of page.Lines extraction for densely packed layouts. page.Lines groups characters using a built-in vertical tolerance that is not configurable. When two visible rows in a table cell sit only a point or two apart, the grouper collapses both rows into one logical line and sorts characters left-to-right, interleaving them. The ExtractTextFromPage(i) method defaults to content-stream order, which may not match visual reading order in form PDFs.

Solution

Each TextChunk exposes its BoundingBox, which allows grouping by vertical position and sorting within each row by horizontal position:

using IronPdf.Pages;
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();
}

Start with rowTolerance = 2.0. If rows still merge, lower it to 1.0 or 0.5. For finer control, substitute page.Characters for page.TextChunks.

Alternative: Visual-order extraction

For PDFs where only the content-stream order is wrong:

pdf.ExtractTextFromPage(i, TextExtractionOrder.VisualOrder);

For PDFs with rows that are visually very close together, the TextChunks approach handles tight tolerances better.

Curtis Chau
Technical Writer

Curtis Chau holds a Bachelor’s degree in Computer Science (Carleton University) and specializes in front-end development with expertise in Node.js, TypeScript, JavaScript, and React. Passionate about crafting intuitive and aesthetically pleasing user interfaces, Curtis enjoys working with modern frameworks and creating well-structured, visually appealing manuals.

...
Read More

Ready to Get Started?

Nuget Downloads 20,878,335Version:2026.9just released

Get your free 30-day Trial Key instantly.
No credit card or account creation required
C# NuGet Library for PDF
Install with NuGet

Version: 2026.9

PM > Install-Package IronPdf
nuget.org/packages/IronPdf/
  1. In Solution Explorer, right-click References, Manage NuGet Packages
  2. Select Browse and search "IronPdf"
  3. Select the package and install
C# PDF DLL
Download DLL

Version: 2026.9

or download Windows Installer here.

  1. Download and unzip IronPDF to a location such as ~/Libs within your Solution directory
  2. In Visual Studio Solution Explorer, right click References. Select Browse, "IronPdf.dll"

Licenses from $999

Key in blue circle

Get your free 30-day Trial Key instantly.

Your trial license will be sent to your email address

No limitations. 100% unlocked. No credit card.

bullet_checkedNo credit card or account creation requiredNo limitations. 100% unlocked. No credit card.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Book your free Live Demo
Booking Badge

Trusted by Millions of Engineers Worldwide

Iron Software's customer logos
Get Your No-Obligation Consult
Complete the form below or email sales@ironsoftware.com
Your details will always be kept confidential.
Trusted by Millions of Engineers Worldwide
Iron Software's customer logos
Get your free 30-day Trial Key instantly.
No credit card or account creation required