Phase 7.6.2: Enhanced link annotation extraction for URI hyperlinks and
internal destination links. Added support for explicit destination arrays,
named destination resolution via /Catalog /Dests and /Catalog /Names /Dests
name trees, JavaScript action diagnostics, and link-without-target handling.
Key changes:
- Added FitType enum with all 8 PDF fit types (XYZ, Fit, FitH, FitV, FitR, FitB, FitBH, FitBV)
- Added DestArray struct for explicit destinations with page_index and fit fields
- Enhanced LinkAnnotation with dest_array field for explicit destinations
- Implemented name tree walking for /Catalog /Names /Dests resolution
- Added JavaScript action handling with diagnostic truncation (>100 chars)
- Added link-without-target diagnostic when /A and /Dest are both absent
- Updated dispatch_annotations signature to pass dests_dict and names_dests_ref
Acceptance criteria:
- Critical test: 5 URI hyperlinks appear in document links (link annotation emitted)
- Critical test: Named destination /Dest /SectionTwo -> dest: "SectionTwo"
- Unit tests: Explicit /Dest array (XYZ fit), /Dest as string-name, /JavaScript action
- Unit tests: Missing target diagnostic, all FitType variants
- Public Link { uri, dest, dest_array, page_index, rect } emitted per link
- /Dest resolution falls back gracefully when unresolved
Closes: pdftract-4zcj