Footnotes
A footnote is a superscript marker in your text plus a note rendered away from the flow. Add one anywhere a paragraph run is legal:
doc.Paragraph(p => p.Text("Revenue rose 12%").Footnote("Excluding one-off items."));The note body takes the full paragraph API when you need more than a sentence:
doc.Paragraph(p => p.Text("See the filing") .Footnote(n => n.Text("Form 10-K, ").Link("sec.gov", "https://sec.gov")));Footnote(...) also returns a chain you can style, same as Text/Span/Link:
doc.Paragraph(p => p.Text("Revenue rose 12%").Footnote("Excluding one-off items.").Color(Colors.Grey.Medium));The marker is always superscript - that’s what makes it a marker - so a chained .Subscript() compiles but is silently overridden back to superscript when the document is laid out.
Numbering
Section titled “Numbering”Numbers run continuously through the whole document, across sections, starting at 1. There is no option to restart per page or per section, and that is deliberate rather than an omission: the marker is a run whose width takes part in line breaking, so numbering it in document order is what makes the width known before the page breaks are computed. Restarting per page would make a marker’s width depend on the very break it helps decide.
What each format does
Section titled “What each format does”| Where the note goes | Who numbers it | |
|---|---|---|
| The foot of the page its marker landed on, under a short rule | Papyra | |
| DOCX | Word’s own footnote, in a footnotes.xml part |
Word, on open and on every edit |
| HTML | An endnote list at the end of each section, with ↩ back-links |
Papyra (the list carries an explicit start) |
| XLSX | Trailing rows after the sheet content | Papyra |
PDF is the only format that puts the note on the same page as its marker, because it is the only one that decides the pages. Word paginates itself, so writing our own page numbers there would produce a document that disagrees with itself the moment Word reflows - the same reasoning behind the table of contents field. HTML and XLSX have no page at all, so their notes gather at the end of a section.
Where a footnote is not allowed
Section titled “Where a footnote is not allowed”Two placements fail the render rather than producing something wrong:
- In a page header or footer. There is no page foot below a footer, and a band repeats on every page.
- In a table’s header or footer row. Such a row can repeat on every page, so one authored note would need one number per page - and emitting it once would leave the markers on the later pages pointing at nothing. Neither is correct, so neither is offered.
A note body takes text and links, not images.
When a note is taller than the page
Section titled “When a note is taller than the page”Footnotes claim at most half of a page’s content height. A note longer than that overflows its area rather than shrinking the page further - the alternative is a page with no room for content at all, which is worse than text that runs long. Word has no such limit: it splits a long note across pages natively.
Known differences
Section titled “Known differences”- PDF has no back-links. The note sits on the same page as its marker, so a link buys nothing, and Papyra’s PDF link annotations only carry URLs. HTML gets
↩links because a same-document anchor is free there. - A link inside a note is not clickable in PDF. It renders as styled text.
- No hanging indent. A note that wraps starts its later lines at the left edge, not under the first word.
- Notes render at body size unless you style them; there is no automatic reduction.
- XLSX loses the marker inside a table cell. The plain-text projection a worksheet cell is built from runs before numbers exist, so the marker is omitted there - the note itself still appears in the trailing rows.
See the feature support matrix for the complete per-format picture.
© 2026 Stefan Nikolei. Payments are processed by Paddle.com as merchant of record.