A specification-driven, pure-Python Word binary .doc to .docx converter
Project description
doc2docx
doc2docx is a pure-Python converter from Microsoft Word 97–2003 binary
.doc files to modern .docx files. The conversion engine follows the
published Microsoft Office binary-format specifications and does not invoke
Microsoft Word, LibreOffice, COM, Java, or another conversion executable.
The project is usable for a growing set of real documents, but it is not yet a complete implementation of every legacy Word feature. Unsupported or lossy content is reported explicitly instead of being silently presented as a fully faithful conversion.
Highlights
- Reads CFB/OLE Word documents with deterministic, bounded parsers.
- Preserves text, common character and paragraph formatting, fonts, styles, native numbered and bulleted lists, tables, page layout, section page and line numbering, headers, and footers.
- Converts footnotes and endnotes—including custom separators, placement, and numbering controls—plus comments, named bookmarks, safe document-local reference fields, common date/metadata/page/statistic fields, and positioned textboxes to native WordprocessingML structures.
- Preserves core document metadata such as title, author, subject, keywords, revision, and creation/modification dates.
- Restores inline and floating PNG, JPEG, BMP/DIB, TIFF, EMF, and WMF pictures in the main document and header/footer stories.
- Produces a structured diagnostic report for unsupported, repaired, or approximated source features.
- Writes deterministic OPC packages using only the Python standard library at runtime.
Installation
python -m pip install msdoc2docx
Python 3.11 or newer is required.
Command line
Convert beside the input file:
doc2docx input.doc
Choose the output path and save a JSON report:
doc2docx input.doc -o output.docx --report report.json
Inspect a source file without converting it:
doc2docx inspect input.doc --json
Python API
from doc2docx import convert
result = convert("input.doc", "output.docx")
print(result.report.to_dict())
The source document is opened read-only. The destination is written through a temporary file and atomically replaced after package validation; the converter will not overwrite the input file.
Current limitations
Password-protected documents are rejected. Embedded OLE objects, Macintosh PICT images, advanced drawing effects, non-rectangular wrap polygons, rare list continuation cases, conditional table styles, uncommon secondary stories, and many specialized fields remain incomplete. Fields that can execute actions or access external content are deliberately kept as cached text. Some legacy layout behavior can only be approximated in WordprocessingML and is called out in the conversion report.
See CHANGELOG.md for milestone and release details.
Development
Run the standard-library test suite from a source checkout:
PYTHONPATH=src python -m unittest discover -v
Build distributable artifacts with:
python -m build
Real-document regression tests may use LibreOffice to create or render test artifacts, but LibreOffice is not used by the converter itself.
Specifications
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file msdoc2docx-0.34.0.tar.gz.
File metadata
- Download URL: msdoc2docx-0.34.0.tar.gz
- Upload date:
- Size: 159.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
36c67847f1904c80cc4e84298bbfb290b5e0f33bb98b10a068b3a82f89e9a26e
|
|
| MD5 |
ec0a1515fd0d07c2bf6d9af2e7d13c5c
|
|
| BLAKE2b-256 |
f48b4e10a24e3553f1409bdd5aad887d3fb5e71d920be91acc2ffe70c327413c
|
File details
Details for the file msdoc2docx-0.34.0-py3-none-any.whl.
File metadata
- Download URL: msdoc2docx-0.34.0-py3-none-any.whl
- Upload date:
- Size: 131.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1b3fb09031b689740a696d2382b4e712ba768d71558214668ae31043d41b0bf9
|
|
| MD5 |
c1bc0e0cdf373b685b349762cf08d0cb
|
|
| BLAKE2b-256 |
239be2d9cb0805ad8fe8f47c54f449d9005411bb66c4a292ba5f5e085fa25bd2
|