v0.3.67 | Reading-order quality release for untagged scientific papers — manuscript-line-number rails lifted out of the body, dense two-column bodies kept apart at a measured gutter, comma-bearing statistic subscripts rejoined, repeated journal pagination footers suppressed, whole-page placed-PDF article bodies recovered, and single-column pages protected from false column detection.
Fixed
- Whole-page placed-PDF article bodies are no longer dropped — when a publisher places an entire typeset article body inside one Adobe InDesign
/PlacedPDFmarked-content region (e.g. MATEC Web of Conferences), its text is now extracted instead of suppressed. The placed-figure suppression — which removes a decorative draft-galley overlay whose glyphs duplicate logical text living outside the region — is now coverage-aware: a cheap content-stream pre-scan keeps the placed text when it dominates the page and the non-placed text is negligible (the placed region is the content), and suppresses it only when it is a minority overlay. This matches pymupdf/pdftotext, recovers the full body on whole-body-placed pages, and preserves the de-duplication win on decorative-overlay pages. - Single-column pages are no longer scrambled by false column detection — the topological block-reordering pass now requires each side-by-side column to span at least four text rows. A single-column page whose few body lines happen to have a wide mid-line word gap (a sentence space after a period) was previously split into two phantom columns and read out of order; it now stays on the row-aware path and reads correctly.
- Marginalia line-number rails no longer interleave into the body — a narrow, sparse, body-aligned left-margin rail of numerals (manuscript line numbers
118 119 120 …, a folio rail) is now lifted out before geometric column ordering and re-appended at the end of the reading order, instead of being woven into the prose by a flat row-aware sort. Tightly gated (narrow outer band, sparse, ≥3 lines, predominantly numeric, a clear detached gutter, running alongside the body) so genuine narrow first columns, table label columns, and ordinary pages are unaffected. - Dense two-column bodies are kept apart at a measured gutter — the multi-region block builder now refuses to join two spans that straddle the page's measured central gutter, even when a tight-leading over-wide advance makes the cross-gutter gap look like a normal word space. This stops the two columns from fusing into one block (which previously left the page on a row-major interleave) on dense, tightly-led academic two-column pages. Purely subtractive — single-column, grid, and off-centre pages are unchanged.
- Comma-bearing statistic subscripts rejoin to their base — an F-statistic's degrees of freedom (
4,176inF4,176) or a multi-affiliation marker (1,2), which the producer set as a single comma-joined subscript, is now merged back into its base instead of being stranded as separateF/4/176tokens. - Repeated journal pagination footers are suppressed — a constant-text running citation/pagination line (a DOI, a journal
Volume … | Article …reference, or a journal URL host with a digit) that recurs in the top/bottom margin on a strong majority of pages is now treated as furniture and excluded from the body, matching how reference extractors handle running heads and folios (ISO 32000-1 §14.8.2.2). The shape gate is deliberately narrow — government-form control numbers such asOMB No. 1545-0115are kept.
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.