
I converted a two page letter in the browser. The table in the body came through. The line that said Confidential header did not.
That is the product. A Word to PDF page that pretends the PDF is the same document is skipping the hard part. This one prints the body, names the losses, and makes you look at every page before you download.
I shipped it as the twenty-ninth free tool on Softery.io. Rank 62 of 1,761 in the research queue, editorial score 9.2. That score is an opinion from the ranking file, not a measurement of how many people will search for it tomorrow.
The Letter I Converted
I did not start with a marketing page. I started with a file I built for the test.
The sample is a short letter. Calibri. A header. A footer. A two column table of tasks and hours. An explicit page break, then a second page. Word's last saved page count in the file is 2. Auto hyphenation is on.
I ran that file through mammoth 1.11.0, the version in the project today. The HTML had the word Draft. It had Hours. It had the title of the letter. It did not have Confidential header. It did not have Page footer. It did not mark a page break.
So the converter I was about to ship would keep a table and drop a header. That is not a bug I found later. That is the first fact.
The header is in the file and this page does not print it.
I put that sentence on the page as a warning. If you need the header, this is the wrong tool. Open Word.
A Drop Zone for Someone Else's Disk
Search for word to pdf and you get a box. Drop the letter. Wait. Download, maybe, after an account, or after a cap, or after a watermark.
The file left your machine the moment you dropped it. You cannot see what the server did. You cannot see which page it invented. You get a PDF back and you hope it matches.
I wanted the opposite. The .docx stays in the tab. Mixpanel and Google Analytics load with the rest of Softery.io, same as every other page here. They see that someone opened the tool. They do not get the file name or the bytes.
Once the JavaScript has loaded, the conversion does not need the network. The site as a whole still has its usual requests. I will not write a sentence that says the whole domain goes quiet.
There is no account. There is no file count. A huge file can hitch the tab, because the work shares memory with the rest of the page. That is a memory limit, not a quota I invented to upsell you.
What mammoth Kept, and What It Dropped
A .docx is a zip of XML. mammoth reads the body and turns it into HTML. It is a reader. It is not Microsoft Word.
I checked the sample against that reader before I drew a single PDF page.
| In the sample file | In mammoth's HTML |
|---|---|
| Body title | Yes |
| Table cells Draft and Hours | Yes |
| Header "Confidential header" | No |
| Footer "Page footer" | No |
| Explicit page break | Not marked as a page |
That table is the honesty policy. Headings, lists, tables and a simple page can come through. Headers, footers, text boxes, extra columns and the fonts Word used will not match.
The page always starts with one warning that does not depend on the file:
This is not Microsoft Word. Headings, lists, tables and images are rebuilt as a simple page. Text boxes, exact pagination and house styles will not match.
Then it adds the ones that are true for your file. Header present, we say so. Footer present, we say so. A drawing or a text box, we say those do not come through. More than one column, the PDF is a single column. A merged cell, the grid treats each cell as its own box.
I would rather you close the tab than download a PDF that looks finished and is missing the letterhead.
Calibri Became Helvetica
The sample asks for Calibri. The PDF I can draw in this browser, without shipping a font file, has Helvetica, Times and Courier.
Calibri becomes Helvetica. The warning names the swap. Line breaks follow Helvetica's widths, not Calibri's. A heading that fit on one line in Word can wrap here. A paragraph that wrapped in Word can fit here.
Word hyphenates when that setting is on. This page wraps whole words. A line can end earlier than it did on your machine.
I did not embed Calibri. Embedding a font you do not have a license to ship is how a free tool becomes a problem. Helvetica is already in the PDF library. The substitution is ugly and it is named.
If the house style of the letter is the point of the PDF, use Word. File, Save As, PDF. That is still the honest path for a contract, a letterhead, or anything a lawyer will hold up to the original.
A Page Break Is Not a Page in the HTML
Word writes two different things that look like pagination.
One is an explicit break, w:br with type page. You put that in on purpose. The sample has one, and the second page starts after it.
The other is lastRenderedPageBreak. That is Word remembering where the page ended the last time it laid the file out, on that computer, with those fonts, with that printer. It is a bookmark, not an instruction.
mammoth does not turn either of those into a CSS page break. The HTML is one stream.
If I had trusted mammoth's HTML as the page list, the sample would have been one long page with "Page two starts after an explicit break" sitting in the middle of page one.
So the converter walks the XML first. It injects a token at each explicit page break, then splits on that token after mammoth runs. lastRenderedPageBreak is ignored. The test for that is in the suite. A file that only has Word's last layout memory does not get fake extra pages from us.
You still do not get Word's pagination. You get ours, plus the breaks you actually inserted.
Word's Page Count Is a Last-Saved Number
Word sometimes writes a page count into docProps/app.xml when you save. The sample has 2.
That number is not a promise about tonight. It depends on the printer, the fonts on that computer, and the margins Word had open. Save the same letter on a different machine and the count can move.
When the number is there, the page puts it next to the count it actually laid out. Word last saved 2 pages. This layout is 2 pages. On the sample they match. On a real file they often will not, because Calibri became Helvetica and the header vanished, which changes how much fits on a page.
When Word stored nothing, the page says so. It will not invent a match.
If the two counts disagree, believe the preview. That is what you are about to download.
| Source | What it means |
|---|---|
| Word last saved N | A number stored at save time, on that computer |
| This layout is M | Pages this tab actually drew |
| Word stored nothing | The file has no page count to compare |
I shipped the comparison because a silent mismatch is how people get burned. A named mismatch is a decision.
The Preview Is the Download
The useful part is not the convert button. It is seeing the pages first.
You get every page on screen before anything is saved. Change the paper size, Letter or A4. Change the margin, narrow, normal or wide. The preview updates. Those two settings are the only thing this page stores, in this browser, under a key that is not the document. The file itself is not saved.
The download is built from the same layout you are looking at. If a table looks cramped in the preview, it will look cramped in the PDF. That is the point of showing it.
Cancel is a real button while the work is running. A long file goes through a worker when the browser will give us one, so the tab can still paint. If the worker cannot start, the same code runs on the main thread and the page says it is busy.
I do not add a score. There is no "92 percent like Word." A number like that would be a guess with a percent sign.
Old .doc Files Are a Different Format
A file that ends in .doc from Word 97 through 2003 is not a zip. It is an OLE compound file. The first bytes are a magic I can name. The page names the file and stops.
There is no honest browser-only reader for that binary format on this page. There is no silent upload to a server to fake one.
Save it as .docx from Word or LibreOffice, then drop that file. That is the whole instruction.
If you already have PDFs and you need one file from several, that is a different job. Merge PDF stitches pages you already have. Markdown to PDF is for a README or notes, not a Word file.
.pdf to .docx is not this page. Search will not pretend it is. The converter reads one way.
I Did Not Add a Server When the Browser Stopped Being Honest
The queue card said client-side only. The product note said conversion with complex layout is more expensive than the old estimate, and browser-only does not guarantee Word.
Those two sentences are both true. The way they meet is the warning list, not a hidden fallback.
I could have posted the file to a container, run LibreOffice, and handed you a PDF that looks closer to Word. That would have been a different product. It would have been an upload. It would have needed a cap, because CPU on a VPS is not free. It would have needed a privacy story I do not want to write for a homework letter.
So the page stays in the tab, and it stays ugly in the specific ways I measured. Tables come through. Headers do not. Fonts swap. Explicit page breaks do. Word's remembered pagination does not.
If that is not enough for your file, the honest next step is Word. I will not quietly do the other thing and let you think it happened here.
Mixpanel Sees the Click
The analytics id is the URL slug, docx-to-pdf. Opening the page sends Tool Viewed with that tool name.
Dropping a file or loading the sample sends that you provided input, with a size bucket, not the bytes. Changing paper or margin sends the setting name. Convert start, complete and fail go out as events. Download goes out as download. None of those properties is the letter.
Sizes are buckets. There is no file name. There is no heading text. There is no generated PDF hashed and sent "for quality."
The tool search query is the one exception on this site, and it is not this page. Search can carry a cleaned query because that is the demand signal. This converter does not.
If you came here because a privacy page promised zero third-party scripts, that is not this site.
What This Is For
A school portal that only takes PDF. A form that will not take .docx. A letter you wrote in Word and need to attach tonight. Homework sitting on the laptop.
Those are the situations I wrote into the catalog, in the words people actually type. They are not a promise that the PDF will pass a print shop.
What it is not: a replacement for Word's Save As PDF. Not a round trip back to .docx. Not a way to recover an old .doc. Not a layout engine for a newsletter with text boxes and three columns.
The research file had a historical line, convert .docx to PDF in the browser, nothing uploaded, no account, no cap. The first three I shipped. The fourth is true as a quota and false as physics. Memory is still memory.
Rank 62 of 1,761, score 9.2, sat next to the barcode generator at 63. Both are file jobs people do in a tab and then close. I shipped barcode last week. This one is the letter.
If You Have a File Tonight
- Open the Word to PDF converter.
- Drop a .docx, or load the sample letter if you want to see the warnings before you trust it with yours.
- Read the warning list. If the header matters, stop.
- Look at every page. Change Letter and A4 if you need to. Change the margin if the table is tight.
- Download only after the preview is the file you are willing to send.
The sample is there so you can see Confidential header fail on purpose. That is a better first minute than a success screen.
Last updated: September 15, 2026 | Reading time: 11 minutes
Written by Evgeniy Poznyak, who still opens Word when the header has to print.