UI-3b Task 6: assemble a printable PDF report (jsPDF-native — vector text
raster chart PNGs, no svg2pdf.js). Gathers all data (SVG→PNG
rasterization via rasterizeSvgToPng, summary/classification text,
hasAnyPerioData()), drives the export-progress overlay, then hands off
to the PURE assemblePdf() (src/perioPdf.ts), which decides section
layout from opts/data alone.
jsPDF-in-jsdom note: constructing a real jsPDF instance depends on
browser canvas/font internals jsdom doesn't fully provide, so this
wrapper is NOT unit-tested directly — assemblePdf's section-gating IS
thoroughly unit-tested with an injectable fake doc (see
ui3b-export-pdf.test.ts). This wrapper's own raster→layout→save path is
a browser-verify item (see the task report).
UI-3b Task 6: assemble a printable PDF report (jsPDF-native — vector text
data(SVG→PNG rasterization via rasterizeSvgToPng, summary/classification text,hasAnyPerioData()), drives the export-progress overlay, then hands off to the PUREassemblePdf()(src/perioPdf.ts), which decides section layout fromopts/dataalone.jsPDF-in-jsdom note: constructing a real
jsPDFinstance depends on browser canvas/font internals jsdom doesn't fully provide, so this wrapper is NOT unit-tested directly —assemblePdf's section-gating IS thoroughly unit-tested with an injectable fake doc (seeui3b-export-pdf.test.ts). This wrapper's own raster→layout→save path is a browser-verify item (see the task report).