pdftract/crates
jedarden 3b91b340aa feat(pdftract-2gto): implement HOCR pixel-to-PDF coordinate conversion
Implement coordinate transform from HOCR pixel space to PDF user-space
points, accounting for the 10px white border added in preprocessing
(Phase 5.3.4) and the DPI used at render time (Phase 5.2).

Changes:
- Add HOCR_BORDER_PADDING constant (10px) to match preprocessing padding
- Add HocrWord::to_pdf_bbox() method for coordinate conversion
- Add apply_rotation_to_bbox() helper for page rotation handling

Coordinate transform steps:
1. Subtract padding (pixel space): hocr_px - 10
2. Scale to points: px * 72.0 / dpi
3. Flip Y-axis: pdf_y = page_height_pt - hocr_y_pt
4. Apply rotation (if specified): 0°, 90°, 180°, 270°
5. Add cell origin (if hybrid): offset by cell's PDF origin

Tests added:
- test_to_pdf_bbox_basic_conversion: Critical test from plan line 1908
- test_to_pdf_bbox_y_flip_sanity: Top-of-page word has highest PDF Y
- test_to_pdf_bbox_padding_subtraction: Padding edge case
- test_to_pdf_bbox_different_dpi: 200/300/400 DPI verification
- test_to_pdf_bbox_hybrid_cell_offset: Cell-local to global coords
- test_to_pdf_bbox_clamps_negative_coords: Bbox within padding
- Rotation tests: 0°, 90°, 180°, 270°, and invalid angles

Acceptance criteria:
✓ Critical test (line 1908): HOCR bbox at (10,10,100,30) at 300 DPI
✓ Y-flip sanity: top-of-page has highest PDF Y
✓ Hybrid cell test: cell offset applied correctly
○ 100-page OCR output: requires OCR infrastructure (deferred)

Refs: pdftract-2gto, plan lines 1899-1927

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-24 00:56:41 -04:00
..
pdftract-cer-diff docs(pdftract-aawrz): add LICENSE-MIT and LICENSE-APACHE files 2026-05-23 10:36:28 -04:00
pdftract-cli feat(pdftract-3zhf): add unified TableDetector::detect entry point 2026-05-24 00:51:59 -04:00
pdftract-core feat(pdftract-2gto): implement HOCR pixel-to-PDF coordinate conversion 2026-05-24 00:56:41 -04:00
pdftract-libpdftract feat(pdftract-juc): implement Standard 14 font metrics registry 2026-05-23 14:04:02 -04:00
pdftract-py docs(pdftract-aawrz): add LICENSE-MIT and LICENSE-APACHE files 2026-05-23 10:36:28 -04:00