Skip to main content

Python bindings for the pure-Rust office2pdf converter

Project description

office2pdf-python

Python bindings for office2pdf, a pure-Rust converter for DOCX, PPTX, and XLSX documents to PDF.

The package distribution is named office2pdf-python; the import package is office2pdf.

Install

python -m pip install office2pdf-python

Supported Python versions are 3.10 through 3.14. Wheels use PyO3 abi3-py310, so one wheel can support all compatible CPython versions for the same platform. CI targets Linux, macOS, and Windows.

Usage

from pathlib import Path

from office2pdf import ConvertOptions, Format, convert_bytes, convert_path

result = convert_path("report.docx")
Path("report.pdf").write_bytes(result.pdf)

options = ConvertOptions(paper_size="a4", landscape=False, include_warnings=True)
data = Path("slides.pptx").read_bytes()
result = convert_bytes(data, Format.PPTX, options)
Path("slides.pdf").write_bytes(result.pdf)

CLI

The package also installs an office2pdf command:

office2pdf input.docx output.pdf

The CLI accepts DOCX, PPTX, and XLSX input paths and writes the converted PDF bytes to the output path.

API

Format

Enum values: Format.DOCX, Format.PPTX, and Format.XLSX.

ConvertOptions

Dataclass fields:

  • page_range: str | None — rejected when set because office2pdf 0.6.0 does not expose a native field for it.
  • sheet_filter: Sequence[str] | None — maps to upstream sheet_names for XLSX conversion.
  • slide_range: str | None — accepts upstream strings like "1-5" or "3".
  • paper_size: str | None — accepts upstream "a4", "letter", or "legal".
  • landscape: bool | None — maps to upstream orientation control.
  • font_paths: Sequence[str | pathlib.Path] — additional font directories.
  • pdf_standard: str | None — currently supports "pdf/a-2b".
  • include_warnings: bool — controls whether returned warnings are included in ConversionResult.
  • memory_limit_mb: int | None — rejected when set because office2pdf 0.6.0 does not expose a native field for it.
  • streaming: bool — enables upstream streaming mode for supported formats.

ConversionResult

Dataclass fields:

  • pdf: bytes
  • warnings: tuple[str, ...]
  • metrics: Mapping[str, Any] | None

Functions

convert_bytes(data: bytes | bytearray | memoryview, format: Format | str, options: ConvertOptions | None = None) -> ConversionResult
convert_path(path: str | pathlib.Path, options: ConvertOptions | None = None) -> ConversionResult
infer_format(path: str | pathlib.Path) -> Format

convert_path() validates the file extension before calling the native extension. convert_bytes() requires an explicit format.

Local development

Install Rust and Python 3.10 or newer. For local development, create and activate a virtual environment before running maturin develop:

python -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip maturin pytest
maturin develop --locked
python -m pytest
cargo fmt --check
cargo clippy --all-targets -- -D warnings

Build artifacts:

maturin build --locked --release --compatibility pypi
maturin sdist

No LibreOffice, Docker, Chromium, or external system service is required by this binding. Conversion behavior comes from the upstream pure-Rust crate.

CI

The CI workflow runs tests on ubuntu-latest, macos-latest, and windows-2022 for Python 3.10, 3.11, 3.12, 3.13, and 3.14. It builds and installs the extension as an editable package, runs pytest, and performs an import smoke test.

Release-style wheel building is checked once in a dedicated wheel smoke job. Full Linux, macOS, and Windows release wheels are built by the release workflow instead of every CI matrix job. Rust fmt and clippy run in a separate Ubuntu lint job.

Release

The release workflow runs on v* tags or manual dispatch. It builds Linux, macOS, and Windows wheels plus an sdist, then publishes with PyPI Trusted Publishing using GitHub OIDC (id-token: write). No PyPI API token is required.

Before the first publish, configure PyPI with a pending trusted publisher:

  • PyPI project name: office2pdf-python
  • Owner: agentsyaml
  • Repository: office2pdf-python
  • Workflow: release.yml
  • Environment: pypi

Create a matching GitHub environment named pypi and require manual approval for safer first releases. A pending trusted publisher can create the PyPI project on first use, but it does not reserve the project name before that first publish.

To publish a release automatically, update the version in pyproject.toml and Cargo.toml, commit the change, then push a matching tag:

git tag v0.1.0
git push origin v0.1.0

The tag push starts .github/workflows/release.yml, builds artifacts, publishes to PyPI after the pypi environment approval, and creates a GitHub Release for tag-triggered runs.

Upstream dependency

This package wraps office2pdf = "0.6" from crates.io. The upstream project is Apache-2.0 licensed and hosted at https://github.com/developer0hye/office2pdf.

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

office2pdf_python-0.1.0.tar.gz (41.5 kB view details)

Uploaded Source

Built Distributions

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

office2pdf_python-0.1.0-cp310-abi3-win_amd64.whl (25.7 MB view details)

Uploaded CPython 3.10+Windows x86-64

office2pdf_python-0.1.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (28.0 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.17+ x86-64

office2pdf_python-0.1.0-cp310-abi3-macosx_11_0_arm64.whl (26.8 MB view details)

Uploaded CPython 3.10+macOS 11.0+ ARM64

File details

Details for the file office2pdf_python-0.1.0.tar.gz.

File metadata

  • Download URL: office2pdf_python-0.1.0.tar.gz
  • Upload date:
  • Size: 41.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for office2pdf_python-0.1.0.tar.gz
Algorithm Hash digest
SHA256 64c0b73a3e45d2aa2f9202024d029a56c6b691657b0b134d5178b4870d549348
MD5 6dbfba5543bcddaf77318f68ee7fa0bd
BLAKE2b-256 8a62bf89f6d9fb7f33917396dbea543f10b8e669778c9d6a4162321a8f449d03

See more details on using hashes here.

Provenance

The following attestation bundles were made for office2pdf_python-0.1.0.tar.gz:

Publisher: release.yml on agentsyaml/office2pdf-python

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

File details

Details for the file office2pdf_python-0.1.0-cp310-abi3-win_amd64.whl.

File metadata

File hashes

Hashes for office2pdf_python-0.1.0-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 d21fa8a3f207568895d124e7f292fdbd29d5ad8ab48fc9e5a699e7ac81bea020
MD5 abd88f7af49af9baafc155a95c42b804
BLAKE2b-256 4855f15cef9b24d67144518a07f1383360b2a838bfa3c21b9de163f69018bff3

See more details on using hashes here.

Provenance

The following attestation bundles were made for office2pdf_python-0.1.0-cp310-abi3-win_amd64.whl:

Publisher: release.yml on agentsyaml/office2pdf-python

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

File details

Details for the file office2pdf_python-0.1.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for office2pdf_python-0.1.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 1128d50d5c4d660dc8b5d11e6880157252fc747add8d9b406d06ec075ee0e627
MD5 da68d9ea5b88d84adb623f8d70813623
BLAKE2b-256 6b382e45c9d4f5cc087fac0f2c760bc769861089e85eb657c5eace44c2c11591

See more details on using hashes here.

Provenance

The following attestation bundles were made for office2pdf_python-0.1.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on agentsyaml/office2pdf-python

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

File details

Details for the file office2pdf_python-0.1.0-cp310-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for office2pdf_python-0.1.0-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d5692accf2e92c5a2c2eeb17a0ce082537bcdd996295bcd507fe024a56de9365
MD5 b6127bf30d8d8924cd83897b49930fa0
BLAKE2b-256 fe3dde6b7b7c3a9171b52bb7fd8501a0568c821d1306e5d7092ad6714e87e7a6

See more details on using hashes here.

Provenance

The following attestation bundles were made for office2pdf_python-0.1.0-cp310-abi3-macosx_11_0_arm64.whl:

Publisher: release.yml on agentsyaml/office2pdf-python

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 Pingdom Monitoring Sentry Error logging StatusPage Status page