Skip to main content

pyodr — Python bindings for OpenDocument.core

Decode office documents (ODF, OOXML, legacy MS binary, PDF, CSV, ...) and render them to HTML from Python.

import pyodr

file = pyodr.open("document.odt")
print(pyodr.file_type_to_string(file.file_type()))

service = pyodr.html.translate(file, "cache-dir", pyodr.HtmlConfig())
html = service.bring_offline("output-dir")
for page in html.pages():
    print(page.name, page.path)

A small CLI is included: pyodr <file> renders a document and opens it in the browser; pyodr <file> --serve hosts it over HTTP (via the core HTTP server, available when built with ODR_WITH_HTTP_SERVER).

Building

The bindings are part of the main CMake build, toggled by ODR_PYTHON:

conan install . -o '&:with_python=True' --build missing
cmake -B build -S . -DCMAKE_TOOLCHAIN_FILE=conan_toolchain.cmake -DODR_PYTHON=ON
cmake --build build --target pyodr_core
PYTHONPATH=build/python ODR_CORE_DATA_PATH=build/data python -m pytest python/tests

pip install . from the repository root builds a wheel via scikit-build-core (see the root pyproject.toml); run conan install first and point CMAKE_ARGS at the generated conan_toolchain.cmake so the C++ dependencies resolve. Wheels bundle libmagic's database, so match that option:

conan install . -o '&:with_python=True' -o '&:bundle_assets=True' --build missing
CMAKE_ARGS="-DCMAKE_TOOLCHAIN_FILE=$PWD/conan_toolchain.cmake" pip install .

Runtime data

Rendering uses shipped assets (CSS/JS), and MIME detection uses libmagic's compiled database (magic.mgc). Wheels bundle both under pyodr/data and pick them up automatically. For in-tree builds set ODR_CORE_DATA_PATH (the tests read it) and, if needed, ODR_LIBMAGIC_DATABASE_PATH, or call pyodr.GlobalParams.set_odr_core_data_path(...) / set_libmagic_database_path(...).

Neither is fatal when missing: without the assets, rendering fails on the individual resource; without the database, odrcore tries the system database and then falls back to its own magic sniffing (which sees an .odt as application/zip rather than the ODF type).

Download files

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

Source Distribution

pyodr-6.1.0.tar.gz (1.2 MB view details)

Uploaded Source

Built Distributions

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

pyodr-6.1.0-cp314-cp314-manylinux_2_39_x86_64.whl (3.5 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.39+ x86-64

pyodr-6.1.0-cp314-cp314-macosx_26_0_arm64.whl (2.6 MB view details)

Uploaded CPython 3.14macOS 26.0+ ARM64

File details

Details for the file pyodr-6.1.0.tar.gz.

File metadata

  • Download URL: pyodr-6.1.0.tar.gz
  • Upload date:
  • Size: 1.2 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for pyodr-6.1.0.tar.gz
Algorithm Hash digest
SHA256 767a9f97bb9db431914694355ca73aee47a6dc1fa83cf88ff7fccd10766f6514
MD5 2d0d651e08e1ea2651e1915c3b6ab544
BLAKE2b-256 40e9eb533bfe36bdda9fa049bd70be8764f00a72428ab96f4e763ccec394f38a

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyodr-6.1.0.tar.gz:

Publisher: python.yml on opendocument-app/OpenDocument.core

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyodr-6.1.0-cp314-cp314-manylinux_2_39_x86_64.whl.

File metadata

File hashes

Hashes for pyodr-6.1.0-cp314-cp314-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 3e409c2bf6425e1b6d7693c1b186efb8ccbb0e797a141b6c32c0f792dfbdfbca
MD5 567eb459f7b3bf5b7cfc98a547c65854
BLAKE2b-256 c8f1b9730c4f9d4e353434047c04bfff143be012dcf52c36eba95b43f2abdb1b

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyodr-6.1.0-cp314-cp314-manylinux_2_39_x86_64.whl:

Publisher: python.yml on opendocument-app/OpenDocument.core

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyodr-6.1.0-cp314-cp314-macosx_26_0_arm64.whl.

File metadata

File hashes

Hashes for pyodr-6.1.0-cp314-cp314-macosx_26_0_arm64.whl
Algorithm Hash digest
SHA256 0b9a6a5511ba0fb72867d91fc5499a9ad4d87ddc101c6158f9a87dc22af31e8d
MD5 c854374702ed3a8aa8555664d595f95f
BLAKE2b-256 b0c389be819afe2f7f311b47c4122f5eab5a8d3093cb5871204ecb258244d762

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyodr-6.1.0-cp314-cp314-macosx_26_0_arm64.whl:

Publisher: python.yml on opendocument-app/OpenDocument.core

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

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