# Text-Only Template Format (MVP)
Implementation: [`src/EnvelopeRenderer.Cli/Render`](src/EnvelopeRenderer.Cli/Render). Sample:
[`sample-data/sample-envelope-template.xml`](sample-data/sample-envelope-template.xml).
```xml
Static label:
```
## ``
- `pageWidth`, `pageHeight` — required, PDF points. **Not** a named paper size: Debenu Quick PDF
10.13's only named-size function (`SetPageSize`) covers ISO/ANSI paper sizes and DL, but no US
envelope sizes, so this template format goes straight to `SetPageDimensions(width, height)`
instead and lets the operator supply exact points for any envelope. A #10 envelope
(4.125" x 9.5") is `pageWidth="297" pageHeight="684"` (1" = 72pt).
## ``
One page is rendered per CSV record, in the order the CSV rows appear, each carrying every
`` element in the template.
- `x`, `y` — required, PDF points, measured from the page's **bottom-left** corner (Debenu's
default coordinate origin — this template format doesn't call `SetOrigin`, so that default
holds).
- `font` — required. A TrueType font name as it appears in the Windows Fonts folder (e.g.
`"Arial"`), optionally with a style suffix: `"Arial [Bold]"`, `"Arial [Italic]"`,
`"Arial [BoldItalic]"`. The font must be installed on the machine running the CLI; it is
always embedded in the output PDF so the reader doesn't need it installed too.
- `size` — required, positive, points.
- Exactly one of:
- inline text content — static, printed as-is on every page, e.g. `Static label:`
- `column=""` — dynamic, pulled from that column per record. Column matching is
case-insensitive. Interpolating a column into a literal string (e.g. `"Dear {FirstName},"`)
is out of scope for this template format — see the deferred story "Create a dynamic text
token from a CSV column."
A `column` that isn't a real CSV header fails the whole run before any page is rendered, not
partway through a large batch.
## Known gaps
- **Font resolution failure is blocking**, not a warning — matches the Definition of Done's
"missing-font behavior remains blocking" rule. A page is never silently rendered with a
substitute font.
- Rendering requires a Debenu Quick PDF Library license key at runtime — see the "Debenu license
key" note in [`CLI_CONTRACT.md`](CLI_CONTRACT.md). Without one, every render fails at the save
step (`SaveToFile`/`SaveToString` both return error code 999) even though every earlier step
(page creation, font embedding, text drawing) succeeds — verified directly against the vendor
DLL, not assumed.