Skip to content
ATSPrep
Build my resume

Resume PDF spacing, line breaks and paragraphs in text extraction

Letter-spaced headings, typed spaces, justified text and hard line breaks, read back by pdf.js, pdftotext and our checker. Only letter spacing did damage.

From What spacing did to the extracted text
In this guide

Spacing problems in a resume come down to one question: does the extractor see the words you meant? Letter-spaced headings came back from pdf.js and our checker as “E X P E R I E N C E”, and our checker used to find no skills under them; we fixed that on 20 October 2026 after these tests. pdftotext rejoined the same headings. Justified text extracted intact everywhere, and line breaks inside a bullet came back as two lines that our checker joined into one bullet.

The short version

  • Letter-spaced headings, whether set with CSS or typed with spaces, came back as “E X P E R I E N C E” from pdf.js and our checker.
  • With “S K I L L S” as the heading, our checker used to find 0 skills; the same file with a normal heading gave 5. Since our fix on 20 October 2026 both give 5.
  • pdftotext returned EXPERIENCE and SKILLS for both versions: the outcome depends on the extractor.
  • Justified text, with its uneven word gaps, extracted word for word in all three readers.
  • A wrapped bullet and a hard-broken bullet both extracted as two lines; our checker rejoined each into one bullet.

What spacing did to the extracted text

Five spacing cases against a control with ordinary headings.

Casepdf.jspdftotextATSPrep checker
Headings with CSS letter-spacingE X P E R I E N C EEXPERIENCE5 skills found
Spaces typed between lettersE X P E R I E N C EEXPERIENCE5 skills found
Normal headings (control)EXPERIENCEEXPERIENCE5 skills found
Justified paragraphwords intactwords intactwords intact
Two bullets: one wrapped, one hard break4 lines4 lines2 bullets
Word: wrapped vs hard break (DOCX)not a PDFnot a PDF3 lines, 2 bullets
Spacing cases by reader

Letter-spaced headings

Tracking out a heading (CSS letter-spacing, Word's Expanded character spacing, or spaces typed between letters) widens the gap between glyphs until it looks like a word break. pdf.js and our checker took the bait in both fixtures and returned single letters separated by spaces. Our checker then failed to recognise S K I L L S as a heading and returned no skills. We fixed that on 20 October 2026 after these tests: a line of single letters with spaces between them is now matched as the heading it spells, so both fixtures give 5 skills. The text it shows still has the spaces, because that is what the PDF holds.

PDF 32000 §14.8.2.5 (checked 19 October 2026) asks tagged PDFs to include "the spacing characters that would be present to separate words in a pure text representation", so that a reader "does not need to guess about word breaks based on information such as glyph positioning on the page". Untagged or not, a letter-spaced heading gives the reader either real spaces or gaps that look like them. pdftotext rejoined both versions, including the one with typed spaces, which shows how much the result depends on each extractor's own word-gap rules.

Greenhouse names the problem directly (checked 19 October 2026): "A resume with spaces between the letters. While it may appear cohesive to the naked eye, the parser won't recognize the separate letters as a single word and can't make sense of the data."

  1. 01Maya Ortiz
  2. 02maya.ortiz@example.com | (555) 010-4477 | Denver, CO
  3. 03E X P E R I E N C E
  4. 04Senior Data Analyst, Northwind Traders Inc. | 2021 - Present
  5. 05• Cut weekly reporting time from 6 hours to 40 minutes by automating SQL pipelines
  6. 06• Built a churn model that three regional sales teams now use to plan renewals
  7. 07• Trained 12 analysts on dbt and code review
  8. 08S K I L L S
  9. 09SQL, Python, Tableau, dbt, Excel
Before: headings with letter-spacing (the ATSPrep checker, spacing-letter-spaced.pdf)
  1. 01Maya Ortiz
  2. 02maya.ortiz@example.com | (555) 010-4477 | Denver, CO
  3. 03EXPERIENCE
  4. 04Senior Data Analyst, Northwind Traders Inc. | 2021 - Present
  5. 05• Cut weekly reporting time from 6 hours to 40 minutes by automating SQL pipelines
  6. 06• Built a churn model that three regional sales teams now use to plan renewals
  7. 07• Trained 12 analysts on dbt and code review
  8. 08SKILLS
  9. 09SQL, Python, Tableau, dbt, Excel
Before: the same file (pdftotext 26.10.0, spacing-letter-spaced.pdf)
  1. 01Maya Ortiz
  2. 02maya.ortiz@example.com | (555) 010-4477 | Denver, CO
  3. 03EXPERIENCE
  4. 04Senior Data Analyst, Northwind Traders Inc. | 2021 - Present
  5. 05• Cut weekly reporting time from 6 hours to 40 minutes by automating SQL pipelines
  6. 06• Built a churn model that three regional sales teams now use to plan renewals
  7. 07• Trained 12 analysts on dbt and code review
  8. 08SKILLS
  9. 09SQL, Python, Tableau, dbt, Excel
  10. 10EDUCATION
  11. 11B.S. Statistics, Lakeview University, 2018
After: ordinary headings (the ATSPrep checker, order-single-column.pdf)

Justified text

Justification stretches the spaces between words, never inside them, so every reader still found the word boundaries. Our narrow justified summary extracted word for word in pdf.js, pdftotext and our checker. Justify if you like how it looks; it isn't an extraction risk on its own.

  1. 01SUMMARY
  2. 02Analyst with six years of experience turning
  3. 03messy operational data into reports that sales
  4. 04and finance teams use every week to plan
  5. 05renewals, staffing and budgets.
Justified summary (pdf.js 6.3.289, spacing-justified.pdf)

Line breaks and paragraphs

A PDF has no paragraphs, only positioned lines. A bullet that wraps at the margin and a bullet with a hard line break typed into it look the same on the page, and all three readers returned both as two lines. pdf.js documents that getTextContent hands back text items with whitespace normalised; pdftotext marks a block break with a blank line. Deciding which lines belong together is left to the parser.

Our checker rejoined each pair into one bullet, filing 2 bullets. In a DOCX the difference is real: a wrapped bullet is one paragraph and one line, while a hard break (Shift+Enter in Word) splits it in two inside the same paragraph.

  1. 01• Cut weekly reporting time from 6 hours to 40 minutes by
  2. 02automating SQL pipelines for finance, sales and operations
  3. 03• Cut weekly reporting time from 6 hours to 40 minutes
  4. 04by automating SQL pipelines for finance, sales and operations
A wrapped bullet, then a hard-broken one (pdf.js 6.3.289, spacing-line-breaks.pdf)
  1. 01Cut weekly reporting time from 6 hours to 40 minutes by automating SQL pipelines for finance, sales and operations
What the ATSPrep checker filed as the first bullet (spacing-line-breaks.pdf)
  1. 01• Cut weekly reporting time from 6 hours to 40 minutes by automating SQL pipelines for finance, sales and operations
  2. 02• Cut weekly reporting time from 6 hours to 40 minutes
  3. 03by automating SQL pipelines for finance, sales and operations
DOCX: wrapped, then hard break (the ATSPrep checker, spacing-word-breaks.docx)

How to fix spacing in a resume

  • Set headings with normal letter spacing. Use weight, size or a rule for emphasis instead.
  • Never type spaces between letters to stretch a word.
  • Let bullets wrap on their own. Don't press Shift+Enter to control where a line breaks.
  • Keep one idea per bullet so a wrapped line can't be mistaken for a new one.
  • Justified or left-aligned both extract; choose on looks.

How we tested

We built every fixture from the same fictional one-page resume, changing one thing at a time. PDFs come from Chromium 153.0.8010.12 (printed through Playwright 1.63.0) and from LibreOffice 26.8.1.1 converting our DOCX files, the way Word users export. Each file was read three ways: pdf.js 6.3.289 getTextContent, poppler pdftotext 26.10.0 in its default mode, and the importer the ATSPrep checker runs in your browser. DOCX files have no PDF text layer, so only our importer reads them. The code blocks on this page are the readers' output, copied by script; private-use and control characters are written as [U+XXXX] because they would otherwise be invisible.

These are three common open readers, not any employer's applicant tracking system. Commercial parsers use their own extractors, so treat a failure here as a risk to remove, not a prediction of what a specific system will do.

Common questions

How does resume PDF text extraction handle spacing and paragraphs?

The extractor sees positioned lines, not paragraphs, and decides word breaks from spaces and gaps. In our fixtures justified text came through intact, letter-spaced headings came back as single letters from pdf.js, and a wrapped bullet came back as two lines that the parser had to rejoin.

Does letter spacing break ATS parsing?

It can. With letter-spaced headings pdf.js and the ATSPrep checker returned “S K I L L S”, and the checker found no skills under it until we fixed that on 20 October 2026. Other parsers may not handle it. pdftotext happened to rejoin the word. Greenhouse lists spaces between letters as a cause of failed parses.

Is justified text bad for ATS?

Not in our test. Justification widens the gaps between words, not inside them, and our justified summary extracted word for word in pdf.js, pdftotext and the ATSPrep checker.

Do line breaks inside a bullet point break ATS parsing?

In a PDF a hard break and a natural wrap both extract as two lines, so it depends on whether the parser joins them. Ours did. Let bullets wrap naturally rather than forcing breaks with Shift+Enter.

Sources and further reading

  1. PDF 32000-1:2008, §9.10 Extraction of Text Content and §14.8.2 Logical Structure, Adobe / ISO
  2. PDFPageProxy.getTextContent, PDF.js API, Mozilla
  3. pdftotext(1) manual page, poppler-utils, Debian
  4. Unsuccessful resume parse, Greenhouse Support
  5. Test fixture: spacing-letter-spaced.pdf, ATSPrep
  6. Test fixture: spacing-typed-spaces.pdf, ATSPrep
  7. Test fixture: spacing-justified.pdf, ATSPrep
  8. Test fixture: spacing-line-breaks.pdf, ATSPrep
  9. Test fixture: spacing-word-breaks.docx, ATSPrep

Put it into practice on a real resume.

Each example is a complete resume with role keywords and bullets that show proof. Open one in the Studio and make it yours, then download it. The first download needs no account.

See what a parser reads in your own file.

The ATS checker reads your PDF or Word file with the same importer tested on this page and shows every line it got back, in order. It runs in your browser and the file isn't uploaded.

$0 forever · No watermark · No card · First download needs no account