A PDF that looks fine on screen and is unreadable once printed helps nobody. On Carnet, the day / RSE report goes to admin or a temp agency.
Classic trap
AppTextStyles (Flutter UI) and pw.TextStyle (pdf package) do not share the same font stack. Mixing them means surprises.
// OK — dedicated PDF style
final title = pw.TextStyle(
fontSize: 14,
fontWeight: pw.FontWeight.bold,
);
Content
Duty time, driving, breaks — the same numbers as the RSE screen. One calculation function, two renders (UI + PDF). Otherwise you explain why the app and PDF disagree by a 15-minute break.