"""TTS / screen-reader-friendly PDF builders. Two flavors, both keyed by `book_id` and both backed by PyMuPDF: make_text_pdf(book_id) -> bytes A fresh PDF where each page contains only the cleaned Arabic text, rendered RTL via `insert_htmlbox`. Small file, no images. Best for TTS / screen readers / copy-paste. make_searchable_pdf(book_id) -> bytes The original PDF with an *invisible* text layer added to every page (PDF render-mode 3). Visual fidelity is preserved; Cmd+F and TTS extract the cleaned Arabic Unicode. CAVEAT: this ADDS a layer without removing the page's existing text — for a PDF that already ships a (garbage) text layer the two blend. Use make_clean_ocr_pdf for those. make_clean_ocr_pdf(book_id) -> bytes Like make_searchable_pdf, but on any page that has an embedded text layer it first rasterizes the page to an image — destroying the original (often garbage) text — so the inserted OCR text is the *single source of truth*. Pure-scan pages pass through untouched. This is the "download to read aloud" build. Tunable via the `pdf_export` config section. Source text precedence: cleaned text from `data/clean/{book_id}/page_NNNN.json` if present (statuses 'clean' / 'indexed'); else raw OCR text from `data/ocr/{book_id}/page_NNNN.json`. Pages with no JSON at all are emitted as blank text — never crash the build. Font note: PyMuPDF's `insert_htmlbox` falls back through HarfBuzz / system fonts to find an Arabic-capable face. On Windows / typical desktop Linux this Just Works. If the runtime has no Arabic font installed, text-only PDFs may render glyph boxes — but the Unicode in the content stream remains extractable, so TTS still works. Bundling a TTF (e.g. Amiri OFL) is the obvious next step if cloud deploys turn out to lack Arabic fonts. """ from __future__ import annotations from .builder import make_clean_ocr_pdf, make_searchable_pdf, make_text_pdf __all__ = ["make_text_pdf", "make_searchable_pdf", "make_clean_ocr_pdf"]