ozaru
Read PDF files from Python with a small, simple API and a Rust core.
Documentation: https://jair-dev57.github.io/ozaru/
import ozaru
text = ozaru.extract_text("invoice.pdf")
pages = ozaru.page_count("invoice.pdf")
print(f"{pages} pages")
print(text)
Why ozaru?
- One line per task. Pass a path and get the result. There are no objects to manage.
- Easy to install. Prebuilt wheels mean you don't need Rust or a compiler.
- No Python dependencies. ozaru installs nothing else into your environment.
- Built on Rust. The PDF work is done by pdf_oxide.
- Typed. Type hints are included, so your editor can autocomplete and check your calls.
Installation
pip install ozaru
Or, with uv:
uv add ozaru
ozaru requires Python 3.10 or newer.
Usage
Extract text
extract_text returns the text of the whole document as a single string:
import ozaru
text = ozaru.extract_text("report.pdf")
Count pages
page_count returns the number of pages as an integer:
import ozaru
pages = ozaru.page_count("report.pdf")
Handle errors
import ozaru
try:
text = ozaru.extract_text("report.pdf")
except FileNotFoundError:
print("The file does not exist.")
except ValueError:
print("The file could not be read as a PDF.")
Damaged pages
If a page can't be read, extract_text still returns the other pages, leaves that
page empty and emits an ozaru.PageWarning with its page number:
import warnings
import ozaru
with warnings.catch_warnings(record=True) as caught:
warnings.simplefilter("always", ozaru.PageWarning)
text = ozaru.extract_text("report.pdf")
for warning in caught:
print(f"Page {warning.message.page} could not be read")
API
| Function | Returns | Raises | Warns |
|---|---|---|---|
extract_text(path) |
str |
FileNotFoundError, ValueError |
PageWarning |
page_count(path) |
int |
FileNotFoundError, ValueError |
path can be a str or a pathlib.Path.
Supported platforms
Prebuilt wheels are available for CPython 3.10 and newer:
| Operating system | Architectures |
|---|---|
| Linux (glibc) | x86_64, aarch64 |
| Linux (musl) | x86_64, aarch64 |
| macOS | Intel, Apple Silicon |
| Windows | x64 |
On other platforms, pip builds ozaru from source, which requires a Rust toolchain.
Limitations
ozaru is in early development, so its API may change between releases.
- It reads the text stored in a PDF and does not perform OCR, so scanned documents may return little or no text.
- It can't extract text from PDFs that need a password to open.
Contributing
You need Rust and uv. Then run:
git clone https://github.com/Jair-dev57/ozaru.git
cd ozaru
uv run pytest
See the contributing guide. Bug reports and ideas are welcome in the issue tracker.
License
ozaru is released under the MIT License.
Metadata
Release files for ozaru 0.1.5
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| ozaru-0.1.5.tar.gz | 84.4 kB | Without provenance | Details for ozaru-0.1.5.tar.gz |
Built distributions (wheels)
Total release size: 59.2 MB
Release files / ozaru-0.1.5.tar.gz
| Download URL | ozaru-0.1.5.tar.gz |
|---|---|
| Size | 84.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
70b1ba8a81c527f7ccbbe62554573c988a8dc094f92911a19e76560caec7f9c6
|
|
BLAKE2b-256 checksum How to use checksums |
ce9dd8856bce5415d5d731b9ac214b6dc2d64c597e3c954415c741d4ab8b07a5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.6 {"installer":{"name":"uv","version":"0.13.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / ozaru-0.1.5-cp310-abi3-win_amd64.whl
| Download URL | ozaru-0.1.5-cp310-abi3-win_amd64.whl |
|---|---|
| Size | 7.9 MB |
| Tags | CPython 3.10 Windows x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
720dcaab377e88fd15867fcd6fe73624f174a3e5a9fc865c22410163fed1e6ec
|
|
BLAKE2b-256 checksum How to use checksums |
32978e9664d6931b932f0104856ed7ca638d89023a60d5bd7f62be9fa150217f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.6 {"installer":{"name":"uv","version":"0.13.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / ozaru-0.1.5-cp310-abi3-musllinux_1_2_x86_64.whl
| Download URL | ozaru-0.1.5-cp310-abi3-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 9.1 MB |
| Tags | CPython 3.10 Linux musl 1.2+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
340674416d4fcb2f29bc8075c09b08c477185691e141bc85af3ef929e9c2a0b9
|
|
BLAKE2b-256 checksum How to use checksums |
bb519ab0e6a04a67fa6963d4b21737f99d58e07a5f1bd120cd4ac377431205fc
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.6 {"installer":{"name":"uv","version":"0.13.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / ozaru-0.1.5-cp310-abi3-musllinux_1_2_aarch64.whl
| Download URL | ozaru-0.1.5-cp310-abi3-musllinux_1_2_aarch64.whl |
|---|---|
| Size | 8.7 MB |
| Tags | CPython 3.10 Linux musl 1.2+ ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
34a61c777110c1556317a86d4145c4caca762c95aa7138f075dc327fcdf5b973
|
|
BLAKE2b-256 checksum How to use checksums |
8bdceee3856de2920a301010d2847689ad247eaab44fef4a0031ab1d0100e675
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.6 {"installer":{"name":"uv","version":"0.13.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / ozaru-0.1.5-cp310-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
| Download URL | ozaru-0.1.5-cp310-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl |
|---|---|
| Size | 8.7 MB |
| Tags | CPython 3.10 Linux glibc 2.17+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
1187a9f647178b2252357f3a199bae0517ed464961ab1e10a65bc4a8ac4c5d31
|
|
BLAKE2b-256 checksum How to use checksums |
d1830aa17c2edd978f1b0a6b3c736cf3835338622498e345be2879c0f7aef27f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.6 {"installer":{"name":"uv","version":"0.13.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / ozaru-0.1.5-cp310-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
| Download URL | ozaru-0.1.5-cp310-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl |
|---|---|
| Size | 8.6 MB |
| Tags | CPython 3.10 Linux glibc 2.17+ ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
632039683fc99c66bb6ed045c340ffba935d226f5a829537c8066c271069f93e
|
|
BLAKE2b-256 checksum How to use checksums |
8822479600abe00074f3bebf29ac1a392ac63413686387d4a6e033b39ff3d5f7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.6 {"installer":{"name":"uv","version":"0.13.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / ozaru-0.1.5-cp310-abi3-macosx_11_0_arm64.whl
| Download URL | ozaru-0.1.5-cp310-abi3-macosx_11_0_arm64.whl |
|---|---|
| Size | 7.9 MB |
| Tags | CPython 3.10 abi3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
0a622cf93001fe9a6b9c8eb257c3f67e589f427d2b6558b56b364fe6120029fe
|
|
BLAKE2b-256 checksum How to use checksums |
0cb305ad4295aee09536fbedfc30afded2cc98be3e297f5e9d6f86bb16ccfa9f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.6 {"installer":{"name":"uv","version":"0.13.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / ozaru-0.1.5-cp310-abi3-macosx_10_12_x86_64.whl
| Download URL | ozaru-0.1.5-cp310-abi3-macosx_10_12_x86_64.whl |
|---|---|
| Size | 8.2 MB |
| Tags | CPython 3.10 abi3 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
2388fa76bf2513b11520b9b9039575c6742f16c1adba296dfb334d62172cdd4a
|
|
BLAKE2b-256 checksum How to use checksums |
a71cc25c12a54594acdf3851fd54cd05e818c1961d9942add50ee521ee39aca8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.6 {"installer":{"name":"uv","version":"0.13.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Security for ozaru 0.1.5
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.