# What happens when a PDF reader hits a two-column resume

> Are two-column resumes ATS safe? We tested 9 profiles: words survived at 97.9%, but 30.5% of lines fused. Reading order is the risk, not word loss.

|  |  |
| --- | --- |
| Category | Original research |
| Published | July 31, 2026 |
| Reading time | 11 min |
| Rendered page | https://atsprep.com/blog/two-column-resume-extraction-test |
| This document | https://atsprep.com/blog/two-column-resume-extraction-test.md |

Two-column resumes look clean on screen. The sidebar holds contact details and skills, the body holds experience, and the eye tracks the hierarchy without effort. A PDF text extractor does not have eyes. It has coordinates and a vertical tolerance, and when two columns sit within that tolerance it reads them as one row. We generated 9 complete resumes in both single-column and two-column layouts and measured exactly what breaks.

## The short version

- Word recovery stayed high at 97.9%, so keyword searches may still match individual terms.
- 30.5% of output lines were fused from two unrelated parts of the page, a metric we call line welding.
- Narrowing the gutter made it worse: welding rose from 30.5% to 33.1%.
- The damage is not missing words. It is sentences that were never written, assembled from fragments of both columns.

## How a reader turns two columns into one

A PDF does not store columns, paragraphs or lines. It stores positioned text fragments, each with an x and y coordinate. A reader reconstructs lines by grouping fragments whose vertical positions fall within a small tolerance, typically a few points.

When a resume has two columns, fragments on the same horizontal band share a vertical position. The reader collects one fragment from the sidebar and one from the body, emits them as a single line, and moves on. The result is a line that was never written: a phone number welded to a job achievement, or a section heading fused with a bullet from an unrelated section.

This is not a bug in the reader. It is the only reasonable thing a coordinate-based grouping algorithm can do when unrelated content shares a vertical position. The layout itself is the cause.

*A reader groups text by vertical position. On a two-column page, a horizontal sweep collects one fragment from each column and emits them as a single line.*

## What the extracted text actually looks like

Theory only goes so far. Here is the verbatim output from one of the two-column resumes in the study, unedited. Every highlighted line was assembled by the reader from two unrelated parts of the page.

The name and the section heading fused into one line. The email address and a date range fused into another. A phone number landed in the middle of a bullet about Kubernetes. The words are nearly all present, 97.9% of them, but the sentences they form were never written by anyone.

This is the core finding. Word recovery is not a useful measure of quality when the words are rearranged into nonsense. A keyword search for "Kubernetes" might still match, but anything reading the text as prose, whether a human reviewer or an LLM summariser, sees gibberish.

*Verbatim extraction from the two-column condition. Highlighted lines were fused from two unrelated parts of the page.*

```text
Jordan Rivera EXPERIENCE
Senior Backend Engineer Senior Backend Engineer, Northwind Systems
jordan.rivera@example.com 2022 - Present
555-0142 - Migrated 47 services from virtual machines to Kubernetes across three
Austin, TX
regions.
SKILLS - Cut median checkout latency from 840ms to 210ms by reshaping the
Go pricing query.
Kubernetes - Introduced contract tests that caught 19 breaking schema changes before
PostgreSQL
release.
Terraform
```

## The numbers across all profiles

Across all 9 resumes, the two-column layout recovered 97.9% of intended words. Reading-order fidelity, measured as the longest common subsequence against the intended sequence, dropped to 83.6%. And 30.5% of output lines were welded from unrelated content.

Compare that to the single-column control: 100% recovery, 100% order, 0% welding. The gap in recovery is small. The gap in order and welding is where the layout separates from the control.

Block integrity, which measures whether labelled sections like Experience and Skills stayed internally coherent, remained at 100% even in the two-column layout. The sections were still there. They were just interleaved with content from the other column.

*Two-column layout versus the single-column control. Recovery barely moves; order and welding tell the real story.*

|  | Value |
| --- | --- |
| Control: recovery | 100% |
| Two-col: recovery | 97.9% |
| Control: order | 100% |
| Two-col: order | 83.6% |
| Control: welded | 0% |
| Two-col: welded | 30.5% |

## Narrowing the gutter makes it worse

We tested a second two-column variant with a narrower gutter. Recovery stayed at 97.9%, but welding rose from 30.5% to 33.1% and order dropped from 83.6% to 83%.

The reason is straightforward. The reader decides whether two fragments belong to the same line partly by measuring horizontal distance. A wider gutter gives the algorithm more space to recognise a column boundary. A narrow gutter removes that signal, so more fragment pairs on the same band are merged.

If you insist on a two-column design, wider gutters are measurably better. They do not eliminate the problem, but they reduce the rate at which unrelated content fuses.

*Standard versus narrow gutter on two-column layouts.*

| Variant | Recovery | Order | Welded |
| --- | --- | --- | --- |
| Single column | 100% | 100% | 0% |
| Two columns | 97.9% | 83.6% | 30.5% |
| Two columns, narrow gutter | 97.9% | 83% | 33.1% |

## Why keyword matching can pass while comprehension fails

At 97.9% word recovery, most individual keywords are still present in the extracted text. A simple search for "Kubernetes" or "PostgreSQL" will find them. This is why two-column resumes do not always fail outright; some systems do not read for meaning, they scan for terms.

But any process that reads the text as connected prose, whether that is a human reviewer skimming the extracted version, an LLM summarising the candidate, or a parser trying to attribute a bullet to a specific role, will encounter lines that make no sense. The phone number is in the middle of a sentence about services migration. The skills heading is welded to an achievement from a different section.

This distinction matters for practical advice. If the only thing between your resume and a human is a keyword filter, a two-column layout may survive. If the text is ever read as prose, and increasingly it is, the layout creates exactly the kind of noise that degrades comprehension.

> **Keep in mind:** We cannot know what proportion of employer systems read for prose versus scanning for keywords. Both exist. The safe choice is a layout that works for both.

## What to do about it

The cleanest fix is the simplest one: put the body of your resume in a single column. The control scored 100% recovery, 100% order, and 0% welding. No ambiguity, no interleaving, no welded lines.

If you want to keep a two-column design, the data suggests two specific things. First, widen the gutter. The difference between the standard and narrow gutter variants was 33.1% versus 30.5% welding, which is measurable and in the right direction. Second, keep the sidebar short and self-contained. The worst welds happen when sidebar content sits beside body content that must stay together, like a bullet point or a job title.

A narrow rail with only your name, contact details and a short skills list, separated from the body by generous whitespace, is a smaller risk than a full-height sidebar carrying section headings alongside experience bullets. The less content shares a vertical band with unrelated content, the less there is to fuse.

- Single column for the body is the safest choice.
- If keeping two columns, widen the gutter as much as the design allows.
- Keep nothing in the sidebar that must stay attached to adjacent body content.
- Test the result: paste the extracted text and check whether lines read as written.

> **Keep in mind:** One reader was tested: PDF.js, the same library the X-ray runs. Employer systems use different extractors and may produce different results. Findings describe how these formatting choices behave under extraction, not how any particular company screens.

## What this test does and does not show

The corpus is synthetic: all 108 files were generated with pdf-lib rather than collected from real applicants. This means every variable is controlled and the intended text is known exactly, but it also means no one's personal data is involved.

One reader was tested: PDF.js, the same library the X-ray runs. Employer systems use different extractors and may produce different results. Findings describe how these formatting choices behave under extraction, not how any particular company screens.

The study tested 9 profiles across a range of fields. All used the same two-column geometry. Different column widths, different sidebar content, or different extraction libraries could shift the numbers. The direction of the finding, that side-by-side layout causes interleaving, is a property of how coordinate-based text grouping works, not of any particular file.

## Sources and further reading

1. [PDF.js](https://mozilla.github.io/pdf.js/), Mozilla
2. [pdf-lib](https://pdf-lib.js.org/), pdf-lib
3. [PDF 32000-1:2008, Document Management — Portable Document Format](https://opensource.adobe.com/dc-acrobat-sdk-docs/pdfstandards/PDF32000_2008.pdf), Adobe / ISO

## Related

- [We generated 108 resume PDFs to find what breaks text extraction](https://atsprep.com/blog/resume-pdf-extraction-study.md)
- [Resume tables under extraction: same problem, milder form](https://atsprep.com/blog/resume-tables-ats-extraction.md)
- [Why columns and text boxes can scramble resume extraction](https://atsprep.com/blog/resume-columns-text-boxes-ats.md)
- [Contact details in page margins: nothing lost, everything moved](https://atsprep.com/blog/resume-header-footer-contact-details.md)
- [Resume formatting myths, measured](https://atsprep.com/blog/resume-formatting-myths-tested.md)
- [Resume PDF reading order: columns, sidebars and text boxes](https://atsprep.com/blog/resume-pdf-reading-order-columns.md)
- [Resume proofreading: a checklist for the words, the facts and the file](https://atsprep.com/blog/resume-proofreading.md)

## About ATSPrep

ATSPrep (https://atsprep.com) is a free resume and application workspace. Match experience to a posting, strengthen claims with evidence, and track the next action. Its PDF check shows text recovered by ATSPrep's extractor, not an employer's proprietary ATS or hiring decision.

- **Price:** Free plan forever: your ATS score, every fix, job match, 5 AI edits a day and PDF downloads, with no card or watermark. Optional ATSPrep Pro ($5/month, or $24 once for 6 months) adds 300 AI edits a day, Fix all with AI, AI tailoring, Word downloads, all 7 templates and unlimited practice with Pip.
- **Account:** none needed to import or edit a resume, or for its first check and 3 rechecks a day. A free sign-in is needed for PDF downloads (Word files come with ATSPrep Pro), to sync, and for more than 1 AI edit.
- **Your file:** parsed and exported inside the browser. The resume file itself is never uploaded.
- **Sent:** matching a job by meaning, on by default once you add a job (the lines involved). Only on a button press: AI edits (the lines involved), a job link (the link) and Pip voice calls (your speech). Never your contact details, and none of it is stored.
- **Connection:** some tools load on first use and need a connection to download. Local storage is not a cloud backup.
- **Accepts:** PDF, DOCX, TXT, Markdown, or pasted plain text.

Start here: https://atsprep.com/studio
