Templates like report_3.frx use FastReport BusinessObjectDataSource with
nested datasources (e.g. abnormally_high_water_levels_report contains
abnormally_high). FastReport discovers the nested list by reflecting on
the C# type — register a flat DataTable and the inner band stays empty,
which is why customers saw 26-page PDFs with the master headers but no
detail rows.
Pull the report DTOs into the sidecar via cross-project Compile Include
from pwa_api/Modules/Report/Models, take a typeName field in the request,
deserialize JSON into the same concrete type, and call RegisterData with
the typed list — so reflection sees the same shape it always did.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Tiny .NET 6 web app that accepts a JSON dataset and a FastReport template
name, renders to PDF, and returns the bytes. Exists because System.Drawing
is unsupported on .NET 8 Linux even with libgdiplus, but works on .NET 6
with `System.Drawing.EnableUnixSupport=true`. The main pwa_api (.NET 8)
calls this over loopback HTTP.
Endpoints:
POST /render single template, returns one PDF
POST /render/multi array of sections, merges into one PDF
GET /health liveness probe
Templates and Fonts are sourced at build time from the sibling pwa_api
project so there's a single source of truth for .frx files.
Deployed as pwa-pdf-service.service on api.pwabilling.com, listening on
127.0.0.1:7082, self-contained (no system .NET 6 runtime needed).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>