Side-by-side rows
Row lays content side by side - the tool for letterheads, address blocks, and any two-column arrangement that isn’t tabular data.
Relative and fixed items
Section titled “Relative and fixed items”doc.Row(row => row .RelativeItem(left => left .Text("Billed to", Label) .Text("Acme Corp.", Section), weight: 1.2f) .FixedItem(210f, right => right .Text("Invoice date", Label) .Text("09 Jul 2026", Body)));RelativeItem(configure, weight)- shares the width left over after fixed items, proportionally toweight(default1f).FixedItem(width, configure)- exactlywidthpoints.
Each item is itself a container: it accepts the same Text calls a paragraph does, stacked vertically.
Rows vs. tables
Section titled “Rows vs. tables”Use a row when you’re arranging blocks of content spatially. Use a table when the data is tabular - tables add borders, cell backgrounds, spans, and repeating headers. A borderless table can emulate a row, but rows express the intent more directly and compose more naturally with paragraphs around them.
Example: the invoice letterhead
Section titled “Example: the invoice letterhead”doc.Row(row => row .RelativeItem(left => left .Text("INVOICE", Title) .Text("INV-20260709-001", new TextStyle(Color: Colors.Blue.Medium)), weight: 1.35f) .RelativeItem(right => right .Text("Northwind Studio Ltd", Section) .Text("12 Harbour Lane", Body) .Text("London EC1V 4AB", Body)));This is the top of your first invoice - the title block takes a bit more than half the width, the sender block the rest.
© 2026 Stefan Nikolei. Payments are processed by Paddle.com as merchant of record.