# printcraft-fonts Layer L2. Font helpers for the appearance streams PrintCraft generates (comments, form fields). Today it holds what generated appearances need without a font program: - `helvetica_width`: an approximation of Helvetica's proportions by character class. No metrics file or font program from any vendor is bundled; widths are PrintCraft's own estimates, good enough for line breaking and alignment, not for typesetting. - `wrap`: greedy line breaking with that measure (paragraphs on newlines, long words split). - `win_ansi`: Unicode → WinAnsiEncoding bytes (`?` for characters it can't represent), and `literal` to write bytes as a PDF literal string. It also holds the fonts of the optional [craft-fonts](https://github.com/storytold/craft-fonts) build input. `build.rs` embeds them as `CRAFT_FONTS` when the build sets `CRAFT_FONTS_DIR=` (and fails if it can't while `CRAFT_FONTS_REQUIRED=1`, as releases set). Without that variable `CRAFT_FONTS` is empty and everything below copes: - `ui_japanese_fonts`: the `Jpan` faces for the interface, BIZ UDPGothic first. - `document_japanese_font` / `japanese_glyph`: the face (Shippori Mincho, then BIZ UDMincho) whose outlines become the Type 3 fallback font for Japanese text written into PDFs. Without it, `japanese_glyph` returns `GlyphError::NoFont` and the editor reports a clear error. - `SHIPPORI_MINCHO`: Shippori Mincho's bytes, or `None`. wasm32 builds embed only BIZ UDPGothic Regular, to keep the web build small. Font files are never committed here: see [craftrules `standards/fonts.md`](https://github.com/storytold/craftrules/blob/main/standards/fonts.md). The full font subsystem (parsing, shaping, subsetting and embedding) arrives with M2.2/M7.