Skip to main content

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, sections, headers, and footers.
  • Converts footnotes, endnotes, 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

msdoc2docx-0.25.0.tar.gz (133.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

msdoc2docx-0.25.0-py3-none-any.whl (118.0 kB view details)

Uploaded Python 3

File details

Details for the file msdoc2docx-0.25.0.tar.gz.

File metadata

  • Download URL: msdoc2docx-0.25.0.tar.gz
  • Upload date:
  • Size: 133.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for msdoc2docx-0.25.0.tar.gz
Algorithm Hash digest
SHA256 5e6c086b8401062bb57fffd1d81fd23adf07c91bfe6d2b4185ae76f2a99ed778
MD5 a53c554d1b687072e24c0fb6e1a95077
BLAKE2b-256 c3481ba7a48e9ebab50f3e8c1d5264894a8e46af78ea034085836880c271ca48

See more details on using hashes here.

File details

Details for the file msdoc2docx-0.25.0-py3-none-any.whl.

File metadata

  • Download URL: msdoc2docx-0.25.0-py3-none-any.whl
  • Upload date:
  • Size: 118.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for msdoc2docx-0.25.0-py3-none-any.whl
Algorithm Hash digest
SHA256 621af1b0e9da91273b92130a59e0eb9945f31be977c85e1ba93a018a5ef2bab2
MD5 b70be5b6bdda0cce6955a2e19aa44e0b
BLAKE2b-256 2019dfd72b95c78cda5dc3617e165bc20d618926e46d51a88d08065db6062db7

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page