# 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.