Features
- PDF Header/Footer Management API (#207) — Added a dedicated API for managing page artifacts across Rust, Python, and WASM.
- Add: Ability to insert custom headers and footers with styling and placeholders via
PageTemplate. - Remove: Heuristic detection engine to automatically identify and strip repeating artifacts. Includes modular methods:
remove_headers(),remove_footers(), andremove_artifacts(). Prioritizes ISO 32000 spec-compliant/Artifacttags when available. - Edit: Ability to mask or erase existing content on a per-page basis via
erase_header(),erase_footer(), anderase_artifacts().
- Add: Ability to insert custom headers and footers with styling and placeholders via
- Page Templates — Introduced
PageTemplate,Artifact, andArtifactStyleclasses for reusable page design. Supports dynamic placeholders like{page},{pages},{title}, and{author}. - Scoped Extraction Filtering — Updated all extraction methods to respect
erase_regions, enabling clean text extraction by excluding identified headers and footers. - Python
PdfDocument.from_bytes()— Open PDFs directly from in-memory bytes without requiring a file path. (Contributed by @hoesler in #216) - Future-Proofed Rust API — Implemented
Defaulttrait for key extraction structs (TextSpan,TextChar,TextContent) to protect users from future field additions.
Bug Fixes
- Fixed Multi-Column Reading Order (#211) — Refactored
extract_words()andextract_text_lines()to use XY-Cut partitioning. This prevents text from adjacent columns from being interleaved and standardizes top-to-bottom extraction. (Reported by @ankursri494) - Resolved Font Identity Collisions (#213) — Improved font identity hashing to include
ToUnicodeandDescendantFontsreferences. Fixes garbled text extraction in documents where multiple fonts share the same name but use different character mappings. (Reported by @productdevbook) - Fixed
Linestable strategy false positives (#215) —extract_tables()withhorizontal_strategy="lines"now builds the grid purely from vector path geometry and returns empty when no lines are found, preventing spurious tables on plain-text pages. (Contributed by @hoesler) - Optimized CMap Parsing — Standardized 2-byte consumption for Identity-H fonts and improved robust decoding for Turkish and other extended character sets.
🏆 Community Contributors
🥇 @hoesler — Huge thanks for PR #216 and #215! Your contribution of from_bytes() for Python unlocks new serverless and in-memory workflows for the entire community. Additionally, your fix for the Lines table strategy significantly improves the precision of our table extraction engine. Outstanding work! 🚀
🥈 @ankursri494 (Ankur Srivastava) — Thank you for identifying the multi-column reading order issue (#211). Your detailed report and sample document were the catalyst for our new XY-Cut partitioning engine, which makes PDFOxide's reading order detection among the best in the ecosystem! 🎯
🥉 @productdevbook — Thanks for reporting the complex font identity collision issue (#213). This report led to a deep dive into PDF font internals and a significantly more robust font hashing system that fixes garbled text for thousands of professional documents! 🔍✨
Installation
Rust (crates.io)
cargo add pdf_oxidePython (PyPI)
pip install pdf_oxideJavaScript/WASM (npm)
npm install pdf-oxide-wasmCLI (Homebrew)
brew install yfedoseev/tap/pdf-oxideCLI (Scoop — Windows)
scoop bucket add pdf-oxide https://github.com/yfedoseev/scoop-pdf-oxide
scoop install pdf-oxideCLI (Shell installer)
curl -fsSL https://raw.githubusercontent.com/yfedoseev/pdf_oxide/main/install.sh | shCLI (cargo-binstall)
cargo binstall pdf_oxide_cliMCP Server (for AI assistants)
cargo install pdf_oxide_mcpPre-built Binaries
Download archives for Linux, macOS, and Windows from the assets below. Each archive includes both pdf-oxide (CLI) and pdf-oxide-mcp (MCP server).
Platform Support
| Platform | Architecture | Archive |
|---|---|---|
| Linux | x86_64 (glibc) | pdf_oxide-linux-x86_64-*.tar.gz
|
| Linux | x86_64 (musl) | pdf_oxide-linux-x86_64-musl-*.tar.gz
|
| Linux | ARM64 | pdf_oxide-linux-aarch64-*.tar.gz
|
| macOS | x86_64 (Intel) | pdf_oxide-macos-x86_64-*.tar.gz
|
| macOS | ARM64 (Apple Silicon) | pdf_oxide-macos-aarch64-*.tar.gz
|
| Windows | x86_64 | pdf_oxide-windows-x86_64-*.zip
|
Changelog
See CHANGELOG.md for full details.