Commit graph

2 commits

Author SHA1 Message Date
jedarden
e6bf3dd290 feat(pdftract-3s2i): implement Phase 5.5.2 validation filter
Implement per-word validation filter for assisted-OCR BrokenVector path.

Changes:
- Add SpanSource::OcrAssisted variant to hybrid.rs
- Add Span::ocr_assisted() helper method
- Implement validate_ocr_with_position_hints() in ocr.rs
  - 5pt distance threshold for position validation
  - 0.4 confidence cap for rejected words
  - Linear scan for nearest-neighbor lookup
- Add unit tests for validation filter

Closes: pdftract-3s2i

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-24 04:57:17 -04:00
jedarden
367a0f129e feat(pdftract-4my): implement pdfium-render path behind full-render feature
Implements Phase 5.2.2: pdfium-render rendering path gated behind the
full-render Cargo feature, providing accurate rendering for complex PDFs
with overlapping images, image masks, soft masks, blend modes, and other
geometry the direct-compositing path cannot handle.

Changes:
- Add pdfium-render dependency gated under full-render feature
- Implement pdfium_path.rs module with thread-local PDFium instance
- Add render_page_via_pdfium() function for high-fidelity page rendering
- Add has_full_render() runtime detection helper
- Add ExtractionOptions.full_render field for runtime selection
- Re-export has_full_render from pdftract-core lib

Acceptance Criteria:
-  cargo build --features ocr,serve,full-render produces binary
-  cargo build --features ocr,serve does NOT pull in pdfium
-  Runtime fallback: full_render=true without feature -> direct compositing
- ⚠️ Soft-mask fixtures: no fixtures added (testing infrastructure)
- ⚠️ Binary size CI gate: no CI infrastructure (infra task)

Refs:
- Plan section: Phase 5.2 full-render feature (line 1854)
- Bead: pdftract-4my
2026-05-23 16:28:08 -04:00