Those things can be really difficult with the browser-based libraries because the browsers don't yet (and seemingly never will) support CSS Paged Media. That's why commercial engines like Prince and DocRaptor (which uses Prince) exist. These engines were designed for document generation and have much better support for headers/footers, table of contents, page numbers, etc, etc..
Disclaimer: I work for DocRaptor
https://drafts.csswg.org/css-page-3/