Abbreviation glossary (bold term + description) rows.
OptionalfontjsPDF font family to render with (the caller registers it on the doc via the docFactory). Falls back to built-in "helvetica" when omitted — e.g. the unit-test fixture.
End-of-document disclaimer + generation/version/attribution stamp.
hasAnyPerioData() — when false, BOTH perio sections are omitted no
matter what opts.perioStatus/opts.perioDescription ask for.
Per-tooth notes as { tooth, note } rows — empty when none.
OptionalodontogramOptional frame around the dental-chart image (null = none).
One-sentence dental-chart overview, rendered as a caption above the findings table.
Dental-chart findings (permanent/missing lists live in the caption; these are the per-axis sections + implants) as key/value table rows.
OptionalodontogramColour theme palette (all table/heading colours derive from this).
Patient identity rows (name / DOB (+age) / exam date) — pre-formatted by
exportPdf per the PDF settings (default name/DOB, age toggle, date
format), so the assembler just lays them out.
OptionalperioPeriodontal metrics + 2017 classification as key/value table rows.
Document title shown once at the very top (e.g. "Odontogram Report").
OptionalshapePer-string transform applied before every doc.text (Arabic shaping +
bidi; identity for other scripts). Omitted = identity.
OptionaltoothGrouped dentition table (null when the odontogram-table toggle is off).
Pre-rendered input for assemblePdf — every PNG/text value is already computed by
exportPdf()before this is built;assemblePdfitself performs no I/O.