<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Muneeb Nawaz</title>
    <description>The latest articles on DEV Community by Muneeb Nawaz (@muneeb_nawaz).</description>
    <link>https://dev.to/muneeb_nawaz</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1889143%2F1dcf6ed8-faa5-4ce7-8dac-c05ccdaf3767.jpg</url>
      <title>DEV Community: Muneeb Nawaz</title>
      <link>https://dev.to/muneeb_nawaz</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/muneeb_nawaz"/>
    <language>en</language>
    <item>
      <title>I parsed the same resume six ways to settle "PDF or Word"</title>
      <dc:creator>Muneeb Nawaz</dc:creator>
      <pubDate>Wed, 16 Sep 2026 06:18:34 +0000</pubDate>
      <link>https://dev.to/muneeb_nawaz/i-parsed-the-same-resume-six-ways-to-settle-pdf-or-word-mnk</link>
      <guid>https://dev.to/muneeb_nawaz/i-parsed-the-same-resume-six-ways-to-settle-pdf-or-word-mnk</guid>
      <description>&lt;p&gt;Search "should I send my resume as PDF or Word" and you get a few hundred&lt;br&gt;
articles that all say some version of the same thing. PDF is safer. Word is&lt;br&gt;
safer. It depends on the company. Every one of them is somebody's view,&lt;br&gt;
because answering the question properly means running both files through a&lt;br&gt;
parser and reporting what came back, and almost nobody writing those articles&lt;br&gt;
has a parser.&lt;/p&gt;

&lt;p&gt;I had built one for something else. So I ran the file through it.&lt;/p&gt;
&lt;h2&gt;
  
  
  The setup
&lt;/h2&gt;

&lt;p&gt;One resume. Same person, same words, same sections. Saved six ways, then put&lt;br&gt;
through the same extraction and scored out of 98, where the score is how much&lt;br&gt;
of the document survived into the structured record a recruiter actually&lt;br&gt;
searches.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Saved as&lt;/th&gt;
&lt;th&gt;Score&lt;/th&gt;
&lt;th&gt;What it lost&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Markdown&lt;/td&gt;
&lt;td&gt;98&lt;/td&gt;
&lt;td&gt;nothing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PDF&lt;/td&gt;
&lt;td&gt;95&lt;/td&gt;
&lt;td&gt;Missing links&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OpenDocument&lt;/td&gt;
&lt;td&gt;95&lt;/td&gt;
&lt;td&gt;Missing links&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Plain text&lt;/td&gt;
&lt;td&gt;95&lt;/td&gt;
&lt;td&gt;Missing links&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Word&lt;/td&gt;
&lt;td&gt;80&lt;/td&gt;
&lt;td&gt;Page header, Missing links&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rich text&lt;/td&gt;
&lt;td&gt;60&lt;/td&gt;
&lt;td&gt;No work history section, Missing sections, Missing links&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The question assumes the answer is in the left column. It is not.&lt;/p&gt;
&lt;h2&gt;
  
  
  The Word gap is not Word
&lt;/h2&gt;

&lt;p&gt;Word scores 80 and PDF scores 95, and the entire 15 point difference is one&lt;br&gt;
finding: &lt;strong&gt;page header&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;.docx&lt;/code&gt; in that table puts the name, email and phone number in the header&lt;br&gt;
region, which is exactly where a Word template puts them. Plenty of parsers&lt;br&gt;
discard the header before they start reading the body, on the reasonable&lt;br&gt;
theory that headers contain page numbers and document titles rather than&lt;br&gt;
content. So the contact details never arrive, and the record lands in the&lt;br&gt;
system with nobody attached to it.&lt;/p&gt;

&lt;p&gt;Move that one line into the body and the file is still a &lt;code&gt;.docx&lt;/code&gt;. Nothing&lt;br&gt;
about the container was ever the problem.&lt;/p&gt;

&lt;p&gt;It runs the other way too, which is the part that settles it. A PDF laid out&lt;br&gt;
in two columns scores 43. Being a PDF saved it from nothing, because the&lt;br&gt;
extractor reads a two column layout in the order the text was drawn, not the&lt;br&gt;
order a human reads it, and the job titles end up interleaved with the skills&lt;br&gt;
list.&lt;/p&gt;
&lt;h2&gt;
  
  
  Rich text was the surprise
&lt;/h2&gt;

&lt;p&gt;60 out of 98, and the reason is worth knowing whatever format you use.&lt;/p&gt;

&lt;p&gt;That file marks its section headings by &lt;strong&gt;making the text bold&lt;/strong&gt;. Not by&lt;br&gt;
applying a heading style, just bolding the characters. A person reads bold as&lt;br&gt;
a heading without thinking about it. A parser looks for a style, finds no&lt;br&gt;
style, and cannot tell where the work history begins. Two findings, 26 percent&lt;br&gt;
and 15 percent, from a formatting choice that looks identical on screen.&lt;/p&gt;

&lt;p&gt;Bold is not a heading. In any format.&lt;/p&gt;
&lt;h2&gt;
  
  
  Markdown wins for a boring reason
&lt;/h2&gt;

&lt;p&gt;Markdown is the only file that scored 98, and it is not because Markdown is&lt;br&gt;
magic. It is the only one of the six carrying a portfolio URL written out in&lt;br&gt;
full. The other three clean formats tie at 95 losing the same three points for&lt;br&gt;
the link none of them has.&lt;/p&gt;

&lt;p&gt;The format did not earn that. The content did. Which is the whole point.&lt;/p&gt;
&lt;h2&gt;
  
  
  Keeping the numbers honest
&lt;/h2&gt;

&lt;p&gt;Every number above is recomputed from the actual fixture files on each test&lt;br&gt;
run. The published evidence lives in a typed array, a test reads the six real&lt;br&gt;
documents off disk, runs them through the same extraction the product uses,&lt;br&gt;
and compares. Change a weight in the scorer and the test fails with the new&lt;br&gt;
number in the assertion message.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="nf"&gt;it&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;row&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;file&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; still scores &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;row&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;score&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;extraction&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;read&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;row&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;file&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;score&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;scoreExtraction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;extraction&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;recoverFields&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;extraction&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
  &lt;span class="nf"&gt;expect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;score&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;row&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;file&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; score moved`&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;toBe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;row&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;score&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;There is a second test that matters more than it looks. It asserts the six&lt;br&gt;
files are the same resume, by comparing the name and email the parser&lt;br&gt;
recovered from each. The first version compared word overlap and read 0.84&lt;br&gt;
across the six, because Markdown carries a URL and its own syntax while plain&lt;br&gt;
text carries neither. A threshold loose enough to pass that is loose enough to&lt;br&gt;
pass a different resume by the same author, so it compares recovered fields&lt;br&gt;
instead. If someone swaps a fixture, the scores stay plausible and the&lt;br&gt;
sentence next to them quietly becomes a lie. That test is the thing standing&lt;br&gt;
between this article and being wrong six months from now.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to actually send
&lt;/h2&gt;

&lt;p&gt;Send what the posting asks for. Somebody there knows what their system&lt;br&gt;
accepts, and ignoring an explicit instruction is a worse risk than either&lt;br&gt;
format.&lt;/p&gt;

&lt;p&gt;Where nothing is specified, send a PDF exported from a word processor. Never&lt;br&gt;
one scanned or exported as an image: that file has no text layer at all and&lt;br&gt;
scores zero. Not a low score, nothing.&lt;/p&gt;

&lt;p&gt;Then stop thinking about the format. Moving contact details out of a page&lt;br&gt;
header was worth 15 points on this document. Choosing between PDF and Word,&lt;br&gt;
with the layout already clean, was worth nothing at all. They tie.&lt;/p&gt;

&lt;p&gt;The full write up, with the failure cases and the deduction table, is here:&lt;br&gt;
&lt;a href="https://atsresumereader.com/guides/pdf-or-word/" rel="noopener noreferrer"&gt;PDF or Word? The same resume, parsed both&lt;br&gt;
ways&lt;/a&gt;. The parser runs in the&lt;br&gt;
browser, so if you want to try it on your own file, nothing gets uploaded.&lt;/p&gt;

</description>
      <category>career</category>
      <category>webdev</category>
      <category>javascript</category>
      <category>showdev</category>
    </item>
  </channel>
</rss>
