v0.3.68 | Extraction fidelity release — symbolic TrueType character mis-decoding corrected via the `(3,0)`/`(1,0)` cmap, same-row span ordering preserved in plain-text output, JPEG 2000 (`JPXDecode`) image XObjects decoded via OpenJPEG, and RTL Farsi body text recovered from tagged Type0/CID PDFs.
Added
- JPEG 2000 (
JPXDecode) image XObjects decoded via OpenJPEG —render_pagepreviously skipped image XObjects whose stream was compressed with/JPXDecode, silently dropping page content. The OpenJPEG library (viajpeg2k) now decodes them at render time; multi-component images are colour-managed and alpha-composited exactly as other image types. Thanks @potatochipcoconut for the report.
Fixed
- RTL Farsi body text recovered from tagged Type0/CID PDFs (#758) — Type0/CID composite fonts with a valid
/ToUnicodeCMap had ~92% of their body text silently dropped in v0.3.66 on RTL (Farsi) documents. The tagged-structure traversal now correctly assembles CID-encoded spans before the RTL reconstruction pass, recovering the full body. Thanks @Goldziher for the report. - Symbolic TrueType fonts no longer mis-decode characters (#760) — a simple symbolic TrueType font (FontDescriptor
Flagsbit 3, no/Encoding, no/ToUnicode) decoded its content bytes by treating each byte directly as a glyph ID, producing wrong-but-plausible characters (e.g.Ç→Ê,SOLUÇÃO→SOLUÊÃO). The fix parses the embedded font's(3,0)symbol (or(1,0)Macintosh)cmapsubtable into a byte→GID map so the correct byte→GID→Unicode hop is applied; fonts without such a subtable still use the byte as the GID. Thanks @schelip for the report and fix. - Same-row spans no longer reordered or split in plain-text output (#752) — when one logical line was emitted as spans at the same Y in different reading-order groups whose boxes overlapped by a fraction of a point,
to_plain_textinterleaved the overlapping group as a vertical column (hoisting a fragment to the front) and forced a space between the overlapping fragments (splitting a word). A group whose spans share a Y row is now excluded from columnar detection, and the cross-group same-Y space rule is replaced by the standardhas_horizontal_gapthreshold used by the other converters. Thanks @schelip for the report and fix.
Documentation
- macOS/Rust OCR setup guide corrected —
ORT_LIB_LOCATIONis inert with theload-dynamicONNX Runtime feature; the guide now documentsORT_DYLIB_PATH, the variable actually read at runtime.
Dependencies
- pyo3 0.28 → 0.29 — fixes two security vulnerabilities: a missing
Syncbound onPyCFunction::new_closureclosures, and a possible out-of-bounds read inBoundTupleIterator::nth_back/BoundListIterator::nth_back. - phf 0.13 → 0.14, bytes 1.11 → 1.12, log 0.4.32 → 0.4.33, p12-keystore 0.3.0 → 0.3.1.
- GitHub Actions:
actions/checkoutv7.0.0,actions/setup-javav5.3.0,softprops/action-gh-releasev3.0.1,ruby/setup-rubyv1.314.0,taiki-e/install-actionv2.82.2. - Patch/minor updates for
rustls,time,zerocopy,zeroize,wasm-bindgen,wide, and ~35 other transitive crates.
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.