Skip to content
ATSPrep
Build my resume

Bullet characters and Unicode symbols in PDF resumes

We built resumes with •, ▪, ➢, Symbol and Wingdings bullets and read them with pdf.js, pdftotext and our checker. Here is the exact text that came back.

From What each reader returned
In this guide

A bullet survives text extraction when the font tells the reader which Unicode character the glyph stands for. Typed •, ▪, ➢ came back unchanged in all three readers we tried. Bullets drawn from the Symbol font with an empty Unicode map came back as U+0000 from pdf.js and as a private-use code from pdftotext. Our own checker used to merge three of them into one; we fixed that on 20 October 2026 after these tests. Word lists built with Symbol or Wingdings read cleanly as DOCX and turned into private-use codes once saved as PDF.

The short version

  • Typed •, ▪ and ➢ in a font with a working ToUnicode map extracted unchanged in pdf.js 6.3.289, pdftotext 26.10.0 and the ATSPrep checker.
  • A Symbol-font bullet whose ToUnicode map was empty came back as U+0000 in pdf.js and U+F0B7 in pdftotext: one file, two answers.
  • Deleting a single font's ToUnicode map turned ➢ into ± in all three readers.
  • Word's Symbol and Wingdings bullets read as plain list items from the DOCX, but the PDF export carried them as U+F0B7, U+F0A7 and U+F0D8.
  • The fix is a round bullet (•, U+2022) typed in your body font, then a fresh export.

What each reader returned

Six versions of the same experience section, each with three bullets. The cells show the character each reader put in front of the bullets, and how many bullets our checker filed.

Fixturepdf.jspdftotextATSPrep checker
Typed • ▪ ➢ (Chromium PDF)• ▪ ➢• ▪ ➢• ▪ ➢; 3 of 3 bullets
CSS list discs (drawn, not text)no bullet characterno bullet characterno bullet character; 3 of 3 bullets
Symbol font, empty ToUnicode mapU+0000 U+0000 U+0000U+F0B7 U+F0B7 U+F0B7U+0000 U+0000 U+0000; 3 of 3 bullets
Typed ➢, its ToUnicode map deleted• ▪ ±• ▪ ±• ▪ ±; 2 of 3 bullets
Word list, Symbol and Wingdings (DOCX)not a PDFnot a PDF• • •; 3 of 3 bullets
The same Word list saved as PDFU+F0B7 U+F0A7 U+F0D8U+F0B7 U+F0A7 U+F0D8U+F0B7 U+F0A7 U+F0D8; 3 of 3 bullets
The mark in front of each bullet, by reader

Symbol-font bullets and private-use codes

Word's default bullet is the Symbol font's character 0xB7, stored as U+F0B7. That code is in Unicode's Private Use Area (U+E000 to U+F8FF), a block the Unicode Standard leaves without any assigned meaning. Wingdings bullets are stored the same way.

A PDF reader turns glyphs into text through the font's ToUnicode map. In our Chromium fixture the Symbol font carried a ToUnicode map with 0 entries. PDF 32000 §9.10.2 covers exactly this case (checked 19 October 2026): "If these methods fail to produce a Unicode value, there is no way to determine what the character code represents in which case a conforming reader may choose a character code of their choosing."

The two readers chose differently. pdf.js returned U+0000, a null character, for every bullet and for the envelope icon beside the email. pdftotext returned U+F0B7 for the bullets and dropped the icon. The ATSPrep checker reads through pdf.js, so it sees the same U+0000. It used to file all three bullets as one; we fixed that on 20 October 2026 after these tests, and it now treats a U+0000 at the start of a line as a bullet mark.

  1. 01Maya Ortiz
  2. 02[U+0000] maya.ortiz@example.com | (555) 010-4477
  3. 03EXPERIENCE
  4. 04Senior Data Analyst, Northwind Traders Inc. | 2021 - Present
  5. 05[U+0000] Cut weekly reporting time from 6 hours to 40 minutes by automating SQL pipelines
  6. 06[U+0000] Built a churn model that three regional sales teams now use to plan renewals
  7. 07[U+0000] Trained 12 analysts on dbt and code review
Before: Symbol-font bullets (pdf.js 6.3.289, bullets-private-use.pdf)
  1. 01Maya Ortiz
  2. 02maya.ortiz@example.com | (555) 010-4477
  3. 03EXPERIENCE
  4. 04Senior Data Analyst, Northwind Traders Inc. | 2021 - Present
  5. 05[U+F0B7] Cut weekly reporting time from 6 hours to 40 minutes by automating SQL pipelines
  6. 06[U+F0B7] Built a churn model that three regional sales teams now use to plan renewals
  7. 07[U+F0B7] Trained 12 analysts on dbt and code review
Before: the same file (pdftotext 26.10.0, bullets-private-use.pdf)
  1. 01Cut weekly reporting time from 6 hours to 40 minutes by automating SQL pipelines
Since the fix: the first bullet as the ATSPrep checker files it (bullets-private-use.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
After: the same bullets typed as •, ▪ and ➢ in Arial and Zapf Dingbats (pdf.js 6.3.289, bullets-typed.pdf)

When the ToUnicode map is missing

To isolate the map itself, we took the working typed-bullet PDF and deleted the ToUnicode entry from one font, Zapf Dingbats, which drew the ➢. Nothing else in the file changed and the page still looks identical.

All three readers returned ± for the arrow. PDF 32000 §9.10.1 explains why the page still looks right: without a known encoding or a ToUnicode map, "the glyphs can still be shown, but the characters cannot be converted to Unicode values without additional information". The checker then saw a line starting with ± and counted 2 bullets instead of 3.

  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
Before: ToUnicode deleted from the arrow's font (pdf.js 6.3.289, bullets-no-tounicode.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
After: the untouched original (pdf.js 6.3.289, bullets-typed.pdf)

Word lists: Symbol and Wingdings bullets

A Word bullet list doesn't put the bullet in the text at all. The glyph lives in numbering.xml as a list style, so a DOCX reader sees a list item and supplies its own marker. Our DOCX fixture used Word's three stock bullets: Symbol U+F0B7, Wingdings U+F0A7 and Wingdings U+F0D8.

The checker read the DOCX as three • bullets. Converted to PDF by LibreOffice 26.8.1.1, the same list kept its private-use codes in the text layer, in all three readers. Our checker happens to accept those codes as bullets; a parser that only knows the usual bullet characters would see three unknown symbols.

  1. 01Senior Data Analyst, Northwind Traders Inc. | 2021 - Present
  2. 02• Cut weekly reporting time from 6 hours to 40 minutes by automating SQL pipelines
  3. 03• Built a churn model that three regional sales teams now use to plan renewals
  4. 04• Trained 12 analysts on dbt and code review
DOCX: the list as our importer reads it (the ATSPrep checker, bullets-word-list.docx)
  1. 01Senior Data Analyst, Northwind Traders Inc. | 2021 - Present
  2. 02[U+F0B7] Cut weekly reporting time from 6 hours to 40 minutes by automating SQL pipelines
  3. 03[U+F0A7] Built a churn model that three regional sales teams now use to plan renewals
  4. 04[U+F0D8] Trained 12 analysts on dbt and code review
PDF export of the same list (pdf.js 6.3.289, bullets-word-list-pdf.pdf)

Bullets that are drawn, not typed

A list styled with CSS discs, which is how most web-based builders and many templates print, draws the dot as a shape. No reader returned a bullet character for it, because there isn't one in the text layer. The bullet text itself came through intact, one item per line, and our checker still filed three bullets.

  1. 01Senior Data Analyst, Northwind Traders Inc. | 2021 - Present
  2. 02Cut weekly reporting time from 6 hours to 40 minutes by automating SQL pipelines
  3. 03Built a churn model that three regional sales teams now use to plan renewals
  4. 04Trained 12 analysts on dbt and code review
CSS list discs (pdf.js 6.3.289, bullets-css-disc.pdf)

How to fix bullet characters in a resume

  • Use the round bullet, •, typed in your body font (Arial, Calibri, Helvetica and similar).
  • In Word, choose Define New Bullet, then Symbol, set the font to (normal text) and pick •. Avoid the Symbol and Wingdings choices.
  • Drop icon fonts next to your email and phone. The envelope in our fixture came back as U+0000 in pdf.js and vanished in pdftotext.
  • Export again from the source file. A reader can't recover a character the PDF never mapped.
  • Check the export: copy all text from the PDF into a plain-text editor. Boxes, blanks or ± where bullets were mean the mapping is gone.

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 do you remove encoded bullet characters (e.g., \u2022) that may render as garbled symbols in some ATS parsers?

\u2022 is the ordinary round bullet (•) and isn't the problem: typed in a normal font it extracted unchanged in pdf.js, pdftotext and our checker. Garbled bullets come from symbol fonts. Word's Symbol and Wingdings bullets are private-use codes (U+F0B7, U+F0A7, U+F0D8), and a font with an empty Unicode map came back as U+0000 in pdf.js. Replace the list style with a • typed in your body font, export the PDF again, then paste its text into a plain-text editor to confirm.

Which bullet characters are safe for ATS text extraction?

In our fixtures •, ▪ and ➢ all came back intact when they were typed in fonts with a working ToUnicode map. The round bullet • (U+2022) is the safest choice because it exists in every common body font, so it never needs a separate symbol font.

Why does my resume show squares, question marks or ± instead of bullets?

The PDF draws the bullet from a font that doesn't say which Unicode character the glyph is. PDF 32000 §9.10.2 says a reader then has no way to determine the character and may pick one of its own. In our test, deleting one font's ToUnicode map turned ➢ into ± in all three readers.

Are Word bullet points ATS friendly?

As a DOCX, yes in our test: the list style lives in numbering.xml and our importer read three plain bullets. Saved as PDF, Word's stock Symbol and Wingdings bullets stayed private-use codes in the text layer. Switch the list to a • from your body font before exporting a PDF.

What is a PDF ATS text extractor?

It's the component that pulls the text layer out of your file before any parsing happens. pdf.js (Mozilla) and pdftotext (poppler) are two widely used open ones; the ATSPrep checker runs pdf.js. Employer systems use their own, so a file that reads cleanly in more than one extractor is the safer bet.

Sources and further reading

  1. PDF 32000-1:2008, §9.10 Extraction of Text Content and §14.8.2 Logical Structure, Adobe / ISO
  2. Private Use Area, Range E000–F8FF, Unicode Consortium
  3. Dingbats, Range 2700–27BF, Unicode Consortium
  4. PDFPageProxy.getTextContent, PDF.js API, Mozilla
  5. pdftotext(1) manual page, poppler-utils, Debian
  6. Test fixture: bullets-private-use.pdf, ATSPrep
  7. Test fixture: bullets-no-tounicode.pdf, ATSPrep
  8. Test fixture: bullets-word-list.docx, ATSPrep
  9. Test fixture: bullets-word-list-pdf.pdf, 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