3.9 KiB
Portable CV document fonts
The shared ThemedCvRenderer embeds unmodified licensed Open Font License TTF assets and full license texts directly into each generated document HTML. It includes only the families used by the selected heading/body/utility stacks. Preview srcDoc and the local-file Chromium PDF command therefore consume identical font bytes without external font requests, installed proprietary fonts or platform fallback races. The existing preview already awaits document.fonts.ready.
Stored settings/stack strings, null inheritance, Career content, theme IDs, revision history and frozen previously generated PDFs are unchanged. Effective rendering is now explicit: Segoe UI stacks use Selawik; Arial/Helvetica/Helvetica Neue use Arimo; Georgia uses Gelasio; Roboto and Poppins use their own fonts; utility Consolas/Roboto Mono uses Roboto Mono. Legacy Helvetica Neue already fell back to Arial on the established Windows environment. Distinct supported sans/serif/decorative/mono choices remain; UI help discloses replacements. Selawik does not promise exact Segoe UI kerning; Microsoft documents that limitation. Existing templates/settings are preserved, but newly rendered glyph shapes/metrics may intentionally differ from historical OS fallback. Historical PDF bytes are not regenerated or deleted.
All31 font files are unmodified originals. Poppins Google Fonts source commit: e7db6ca603fd4862010383ff17ffd6cc4ffac1c0. Arimo static source4a6255f269916ae7ad3fc2706b0935e7621396b8; Gelasio7ab20e7e5c42791e603b9ee3201a0b49849cfdb2; Roboto Mono895ec691990d041dd727c7b5afa3ce56525d98e6; Roboto static release3.016/source5166f3d07889bf7d3732fb72e09623d7e52f862b. Selawik release1.01 and license source commit89362e84731d1f5777fa078fd4d5ebbd339e4378. Source URLs, SHA256 identities and copyright/license files accompany JobTrackerApi/DocumentFonts. No proprietary OS font is copied. Fonts/licenses are embedded resources; standalone licenses/provenance are also published. Selawik supplies regular/semibold/bold, with browser synthesized italic; the other families contain actual regular/italic weight variants.
Controlled identical-HTML Arimo experiment: Windows Chromium151 and Linux156 both emit4 pages with identical text order,1560 words, maximum word position delta0.023mm. This isolates font substitution as a material cause for that fixture, not proof all24 are fixed. Six self-contained-document regressions failed before implementation. A seventh static-outline guard failed on variable fonts; the complete1130-case backend successor passes after upstream static originals replace them. Current full Linux/Windows corpus results will be recorded separately.
The original scripts/verify-cv-fidelity.py and24 fixture data are unchanged. It dynamically requires exact page count per live preview, marker/content presence, physical size, positions, font sizes, safe areas and colors. The existing supplemental collector also requires historical36+24 totals and exact eight settings-state membership. It is reused unchanged; no new collector or relaxed expected totals is shipped. Font-related changes are reported in before/after evidence, never hidden by editing snapshots.
Sources: https://github.com/microsoft/Selawik ; https://github.com/microsoft/Selawik/blob/master/LICENSE.txt ; https://github.com/googlefonts/Arimo ; https://github.com/SorkinType/Gelasio ; immutable Google Fonts source and bundled OFL notices.
The first embedded-variable trial resolved page/wrapping/marker drift, retaining36+24 pages, but Chromium156 emitted Type3 descriptors without FontBBox/Ascent/Descent for those assets. The unchanged oracle correctly retained unsafe inferred glyph-bound failures (8/16+0/8 passed). Controlled static Arimo emits Type0 and correct header glyph top16.6109mm instead of the variable descriptor fallback14.8167mm. The fix uses upstream static originals, not locally converted/renamed fonts or looser safe-area tolerance. All trial outputs and RED cases are retained.