novolis-documents / model.md
Document model
One-column pages to Skia PDF
dotnetpdfdocumentsnovolis
PagedDocument is the immutable root. Builders and mappers both produce this shape; layout and PDF only consume it.
PagedDocument
| Property | Role | ||
|---|---|---|---|
Meta | Title and bibliographic fields | ||
Setup | Trim size, margins, header/footer band heights | ||
Typography | Font sizes and spacing | ||
Body | Main flow blocks (not First/Last content) | ||
Header / Footer | Optional page header/footer | ||
Watermark | Optional diagonal text | ||
First | Optional title-page overrides + lines | ||
IncludeCover | Emit First page from Meta when true | ||
IncludeToc | Emit TOC page(s) from level-1 titles | ||
Last | Optional closing page | ||
HasFirstPage | `IncludeCover \ | \ | First is not null` |
DocumentMeta
| Field | Notes |
|---|---|
Title | Required |
Subtitle, Series | Displayed on First when set |
Author, Contributors | People lines |
Publisher | Imprint |
Subject, Description | Topic / abstract |
Keywords | IReadOnlyList<string> |
Identifier | ISBN, DOI, internal id, … |
Language | BCP-47 style tag (en, nb-NO) |
Version | Edition label |
Date | DateOnly? |
Rights | Copyright line |
PageSetup
| Property | Meaning |
|---|---|
Trim | Finished page size (Size from Math.Measure) |
Margin | Content margins (Thickness) |
HeaderBand / FooterBand | Reserved vertical bands (Length) |
TrimPresets
| Preset | Size |
|---|---|
Inch6x9 | 6×9″ (trade default) |
Inch5_5x8_5 | 5.5×8.5″ |
A5 | ISO A5 |
A4 | ISO A4 |
USLetter | US Letter |
DefaultMargin | Print-oriented: binding 0.75″ / outer 0.5″ / head 0.5″ / foot 0.65″ |
ReportMargin | Uniform 1″ |
Typography
| Property | Default role |
|---|---|
BodyFontFamily | Informational name; Skia embeds Liberation Serif unless overridden |
BodyFontSizePt, H1SizePt–H3SizePt | Type scale |
TableFontSizePt | ≤0 → body size (EffectiveTableFontSizePt) |
LineHeight | Multiplier |
ParagraphSpacingPt | After most blocks |
AfterLevel1SpacingPt / AfterHeadingSpacingPt | After headings |
TableCellPaddingPt / TableRuleStrokePt | Table paint |
FirstPage / LastPage
FirstPage — optional overrides for title/subtitle/series/author/rights, plus centered Lines. Missing fields fall back to Meta.
LastPage — optional Title, plain Lines, and richer Blocks after the lines.
Immutability
All model types use init / required. Treat instances as frozen after construction. Builders allocate new graphs on Build().