What happens
Rendered pages can silently lose glyphs and xberg has no way to notice. pdf_oxide's rasterizer swallows failed glyphs with no log and no fallback while still advancing the cursor: a None outline paints nothing, unmapped chars resolve to GID 0 and are skipped, and chars decoding to U+FFFD are dropped from shaping entirely. Pages come out gap-filled, OCR transcribes the gaps faithfully, and nothing in the extraction result flags it. #1362 is one instance of the class; the same sink hides any other outline or encoding failure.
Where it comes from
Filed upstream with the four verified swallow points: yfedoseev/pdf_oxide#991.
Blocked on
yfedoseev/pdf_oxide#991. Once pdf_oxide emits a per-font warn (or any structured signal) on dropped glyphs, xberg can surface it: at minimum forward the warning, ideally attach a per-page quality flag on the OCR path so downstream consumers can quarantine affected pages instead of indexing gap-filled text.
What happens
Rendered pages can silently lose glyphs and xberg has no way to notice. pdf_oxide's rasterizer swallows failed glyphs with no log and no fallback while still advancing the cursor: a
Noneoutline paints nothing, unmapped chars resolve to GID 0 and are skipped, and chars decoding to U+FFFD are dropped from shaping entirely. Pages come out gap-filled, OCR transcribes the gaps faithfully, and nothing in the extraction result flags it. #1362 is one instance of the class; the same sink hides any other outline or encoding failure.Where it comes from
Filed upstream with the four verified swallow points: yfedoseev/pdf_oxide#991.
Blocked on
yfedoseev/pdf_oxide#991. Once pdf_oxide emits a per-font warn (or any structured signal) on dropped glyphs, xberg can surface it: at minimum forward the warning, ideally attach a per-page quality flag on the OCR path so downstream consumers can quarantine affected pages instead of indexing gap-filled text.