@effortlessmotion/pdf-to-md
    Preparing search index...

    Interface Report

    Per-document and per-page QA metrics returned by every extraction entry point, discriminated by path; OCR-only and text-only fields are grouped below.

    interface Report {
        bodyFontHeight?: number;
        callouts: number;
        chars: number;
        charsPerPage: number;
        closedHyphens?: number;
        danglingLong: number;
        danglingShort: number;
        floats?: number;
        headings: number;
        headingSizes?: number[];
        hybridPages?: number[];
        joinedPairs?: number;
        junkHeadings: number;
        listItems?: number;
        lowConfidenceWords: number;
        ocrFallback?: boolean;
        outputVersion: number;
        pages: number;
        pageStats: PageStatsRow[];
        paragraphs: number;
        path: "text" | "ocr";
        reviewBlocks: number;
        sparse: boolean;
    }
    Index
    bodyFontHeight?: number
    callouts: number
    chars: number
    charsPerPage: number
    closedHyphens?: number
    danglingLong: number
    danglingShort: number
    floats?: number
    headings: number
    headingSizes?: number[]
    hybridPages?: number[]
    joinedPairs?: number
    junkHeadings: number
    listItems?: number
    lowConfidenceWords: number

    document-level sum of pageStats' lowConfidenceWords — see that field for why 0 can mean "measured 0" or "nothing to measure".

    ocrFallback?: boolean
    outputVersion: number

    manually-bumped integer (not the npm package version) — see report.ts's OUTPUT_VERSION for the bump rule; present on every Report so a frozen baseline's staleness is self-announcing.

    pages: number
    pageStats: PageStatsRow[]
    paragraphs: number
    path: "text" | "ocr"
    reviewBlocks: number

    total > [review: ...] blocks across all pages (sum of pageStats' reviewBlocks); always 0 on the text path — only the OCR path emits review markers.

    sparse: boolean