If the requirement is to print from a web browser, pagination is going to be tricky at best. It takes some work, but here's the technique I use:
- Output a bare bones html page: no javascript, no layers, no fancy layout tricks to trip up the printer.
- Use css and either pixels or points (not both) for all size specs and settings.
- Use a table as a container for each page to be printed. Set css attributes:
table-layout: fixed and page-break-after: always
- Specify exact font sizes and line spacing.
- Set the amount of vertical spacing to be added to table rows (cellpadding, cellspacing, border etc)
- Using table cell widths and font size, Calculate where to insert line breaks lines to eliminate automatic text wrapping.
- Keep a running total of the line heights and row spacing. When it approaches the length of a printed page, issue the appropriate html to close out that table, then start the next page by continuing on a new table.
With a little tweaking, this technique can even be used to precisely align the text onto mailing label sheets when printing through a web browser.