Skip to content

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.

Choose a tag to compare

@github-actions github-actions released this 24 Jun 12:59
8150a2a

Added

  • JPEG 2000 (JPXDecode) image XObjects decoded via OpenJPEGrender_page previously skipped image XObjects whose stream was compressed with /JPXDecode, silently dropping page content. The OpenJPEG library (via jpeg2k) 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 /ToUnicode CMap 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 Flags bit 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ÇÃOSOLUÊÃO). The fix parses the embedded font's (3,0) symbol (or (1,0) Macintosh) cmap subtable 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_text interleaved 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 standard has_horizontal_gap threshold used by the other converters. Thanks @schelip for the report and fix.

Documentation

  • macOS/Rust OCR setup guide correctedORT_LIB_LOCATION is inert with the load-dynamic ONNX Runtime feature; the guide now documents ORT_DYLIB_PATH, the variable actually read at runtime.

Dependencies

  • pyo3 0.28 → 0.29 — fixes two security vulnerabilities: a missing Sync bound on PyCFunction::new_closure closures, and a possible out-of-bounds read in BoundTupleIterator::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/checkout v7.0.0, actions/setup-java v5.3.0, softprops/action-gh-release v3.0.1, ruby/setup-ruby v1.314.0, taiki-e/install-action v2.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_oxide

Python (PyPI)

pip install pdf_oxide

JavaScript/WASM (npm)

npm install pdf-oxide-wasm

CLI (Homebrew)

brew install yfedoseev/tap/pdf-oxide

CLI (Scoop — Windows)

scoop bucket add pdf-oxide https://github.com/yfedoseev/scoop-pdf-oxide
scoop install pdf-oxide

CLI (Shell installer)

curl -fsSL https://raw.githubusercontent.com/yfedoseev/pdf_oxide/main/install.sh | sh

CLI (cargo-binstall)

cargo binstall pdf_oxide_cli

MCP Server (for AI assistants)

cargo install pdf_oxide_mcp

Pre-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.