Weblitz Preview

Pages, headers and footers

The paper

The paper is Format (A4 by default; Letter, Legal, Tabloid, Ledger, A0 to A6), or Width and Height as CSS lengths, turned with Landscape. A page's own @page { size: ... } wins by default (PreferCssPageSize). See paper sizes.

Margins

Margin sets them as CSS lengths (HtmlMargins.All("15mm"), or each side). Without it, the page's @page margins apply, else Chrome's default margins. See margins. Scale lays the page out as on larger or smaller paper (0.1 to 2): see scale.

Page breaks

CSS decides where pages break: break-before, break-after and break-inside: avoid on elements, orphans and widows on paragraphs; a table's header rows are printed again on each page it runs over. PageRanges keeps some pages only ("2-3, 5"): see choosing pages.

Headers, footers and page numbers

The page's own CSS can print them in the margins, with @page margin boxes; counter(page) and counter(pages) give the numbers:

@page {
  size: A4;
  margin: 18mm 15mm 20mm;
  @bottom-right { content: "Page " counter(page) " of " counter(pages); font: 9pt Arial; color: #6b7280; }
  @top-left { content: "Quarterly report"; font: 9pt Arial; }
}

Or Chrome's header and footer templates, as Puppeteer prints them (DisplayHeaderFooter, HeaderTemplate, FooterTemplate): HTML printed in the margins of each page, its elements of the classes pageNumber, totalPages, title, url and date filled in. A template that sets no font size prints in Chrome's tiny default size: set one. Give the margins room for them: see the example.

var options = new HtmlPdfOptions
{
    DisplayHeaderFooter = true,
    Margin = new HtmlMargins("22mm", "12mm", "20mm", "12mm"),
    FooterTemplate = "<div style='font-size:9px; width:100%; text-align:right; padding:0 12mm'>Page <span class='pageNumber'></span> of <span class='totalPages'></span></div>",
};