DOCX to Text Converter
Technical writers, product managers, and developers use this page when a Word file must become plain text: a handbook moving into a static site, a contract heading for a diff, or letters feeding a CMS pipeline. It reads .docx bytes in your browser and prints paragraphs as lines in plain text or markdown. Nothing uploads or installs, so NDA drafts stay on your machine.
No document loaded yet.
- No extraction yet.
How It Works
Extraction starts with a signature check: the first two bytes must be P and K, so a binary .doc stops with a not-zip error before any parser runs. JSZip then inflates word/document.xml in memory and hands the XML to DOMParser. The walk visits each w:p in order, pulling text from w:t, tabs from w:tab, breaks from w:br, and skipping delText.
Markdown mode adds three readings: a Title or Heading 1 to Heading 6 style becomes hash marks, a bold flag wraps that run in double asterisks, and a hyperlink id resolves against word/_rels/document.xml.rels into label plus address. Tables flatten to tab or pipe rows, content outside document.xml is never read, and the download button wraps the textarea into a Blob URL.
Before and After
Q3 Launch Notes
The draft is ready for review. Sign-off is due Friday.
Contact the editor at the address below. # Q3 Launch Notes
The draft is **ready for review**. Sign-off is due Friday.
Contact the editor at [the address](https://example.com/). Use Cases
| Developer | Production | Workflow |
|---|---|---|
| .docx exports as plain-text fixtures for LLM pipelines | Bulk CMS import prep from Word drafts | Extracted copy fed to a summarizer |
| Diffing two contract versions with the Text Diff Checker | Handbook migration to a static site generator | Legal review that needs redlines as text |
| Sample documents as .txt fixtures for tests | QA of generated letters before mail merge | Pasting extracted copy into a CMS |
| Archiving retired policies as searchable text | Turning meeting minutes into a changelog | Reading a long spec outside Word |
Common Mistakes and Troubleshooting
- Opening a legacy .doc instead of .docx. The check fails with not-zip; re-save first.
- Handing over a password-protected file. JSZip cannot inflate protected entries and returns an open error.
- Expecting images, footnotes, or headers. Only word/document.xml is read, so diagrams vanish.
- Reading an empty pane as a crash. Zero paragraphs means the body held no text.
- Feeding a 300-page manual at once; parsing runs on the main thread and can freeze the tab.
- Comparing markdown output with the styled original. Only headings, bold, lists, links, and rows map.
Best Practices
- Standardize on .docx so nobody converts legacy files first.
- Choose markdown mode for site migrations, where headings and links keep their structure.
- Read the warnings in the stats line; tables above zero mean flattened layout.
- Download the .txt before closing the tab; nothing here is stored.
- Extract both drafts and compare them with the Text Diff Checker.
- Clean heading styles in Word first, since Heading 1 to Heading 6 map to hash marks.
Frequently Asked Questions
How do paragraphs in the DOCX become lines of text?
Each w:p in word/document.xml becomes one block, in the order the body lists them. Runs are concatenated while reading, so a sentence split across five runs returns as one line with tabs and breaks intact. Empty paragraphs collapse to a single blank line.
Does any formatting survive the conversion?
Plain mode keeps only characters, tabs, and breaks. Markdown mode maps bold runs to double asterisks, Heading 1 to Heading 6 styles to hash marks, list paragraphs to a dash, and hyperlinks to label plus target. Italics, fonts, and colors have no markdown equivalent, so they drop out.
Does my document get uploaded anywhere?
No upload happens: JSZip inflates the archive in this tab, DOMParser reads the XML, and the text stays in page memory until you copy or download it. No request carries your file name, text, or byte length. Closing the tab discards everything, so NDA drafts never leave the machine.
Why was my .doc file rejected?
Word 97 era .doc files are binary rather than ZIP, so the first two bytes fail the signature check and the run stops with a not-zip message. Modern .docx, .docm, and .dotx files are ZIP containers and pass at once. Re-save from Word with Save As, or pick Word 2007-365 (.docx) in LibreOffice.
What happens to tables and bullet lists?
Cells are read row by row and joined into one line, tab separated in plain mode and pipe separated in markdown with a separator row. Widths, merged cells, and borders do not survive, and bullet numbers drop in plain mode. Markdown keeps a dash and indentation, and the stats line reports the table count.
Are tracked changes and comments included?
Only accepted body text crosses into the output: deleted runs carry delText and are skipped, while inserted text stays. Comments live in word/comments.xml, which this extractor does not open, so reviewer initials never appear. Accept or reject changes in Word first when the file must read as final.
How do I get the hyperlinks out?
With markdown mode and the include hyperlinks box checked, each link returns inline as anchor text plus address, and the panel under the stats lists every URL. Targets come from word/_rels/document.xml.rels, where a relationship id resolves to an external address. Plain mode keeps the anchor text only.