mirror of
https://github.com/rcourtman/Pulse.git
synced 2026-09-10 10:35:51 +00:00
3dc06bea71
Free-form strings entering the PDF generator (AI narrative prose, resource names, alert messages, brand display names) were written to fpdf core fonts as raw UTF-8, and the cp1252-decoding fonts rendered em dashes and curly quotes as mojibake. Generate and GenerateMulti now run every string field reachable from ReportData/MultiReportData through fpdf's cp1252 translator once before rendering, so write sites stay encoding-free. The translator is built per call: fpdf's closure reuses an internal buffer and the generator is shared across concurrent requests. Runes outside cp1252 degrade to '.'. Tests render AI-shaped narratives with em dashes and curly quotes for both the single-resource and fleet paths and assert the extracted content streams decode without mojibake.