Analysts customise grid columns in the UI — drag a column to a new position, hide unused columns, resize header widths — to make the live data view fit their working pattern. Until now, exporting that grid to PDF reverted to the physical column order declared in the report definition ; the analyst's working layout was lost at the print boundary, and reproducing it required a definition edit followed by a re-query.
The PDF pipeline now reads the display-order metadata the UI persists per user and applies it during rendering. Column widths, header names and body rows reorder visually in the output without materialising a new ResultSet — the data is fetched once, the layout transformation happens in the render pass.
- Per-user layout persistence. Each analyst's column order is captured against their user identity ; the same report exports differently for different users without a report-definition fork.
- Hidden columns suppressed. Columns the user has hidden are omitted from the PDF entirely, not just blanked.
- Physical order is the fallback. When no per-user reordering is set, the PDF renders against the report definition exactly as before — no behavioural change for existing reports.
- No re-query. The data fetch is unchanged ; only the render transformation reads the layout metadata. Analysts iterate on layout without re-loading the dataset.