Howto : Header and Footers
This code will print the html header and footer. (suggestions welcomed)
Code:
QRect printer_rect
(printer
->pageRect
());
///Setting up the header and calculating the header size
document_header->setPageSize(printer_rect.size());
document_header->setHtml(company_header);
QSizeF header_size
= document_header
->size
();
///Setting up the footer and calculating the footer size
document_footer->setPageSize(printer_rect.size());
document_footer->setHtml(company_footer);
QSizeF footer_size
= document_footer
->size
();
///Calculating the main document size for one page
QSizeF center_size
(printer_rect.
width(),
(printer
->pageRect
().
height() - header_size.
toSize().
height() - footer_size.
toSize().
height()));
///Setting up the center page
main_doc->setHtml(content);
main_doc->setPageSize(center_size);
///Setting up the rectangles for each section.
QRect contentRect
= QRect(QPoint(0,
0), main_doc
->size
().
toSize());
/// Main content rectangle. QRect currentRect
= QRect(QPoint(0,
0), center_size.
toSize());
/// Current main content rectangle.
while (currentRect.intersects(contentRect))
{///Loop if the current content rectangle intersects with the main content rectangle.
///Resetting the painter matrix co ordinate system.
painter.resetMatrix();
///Applying negative translation of painter co-ordinate system by current main content rectangle top y coordinate.
painter.translate(0, -currentRect.y());
///Applying positive translation of painter co-ordinate system by header hight.
painter.translate(0, headerRect.height());
///Drawing the center content for current page.
main_doc->drawContents(&painter, currentRect);
///Resetting the painter matrix co ordinate system.
painter.resetMatrix();
///Drawing the header on the top of the page
document_header->drawContents(&painter, headerRect);
///Applying positive translation of painter co-ordinate system to draw the footer
painter.translate(0, headerRect.height());
painter.translate(0, center_size.height());
document_footer->drawContents(&painter, footerRect);
///Translating the current rectangle to the area to be printed for the next page
currentRect.translate(0, currentRect.height());
///Inserting a new page if there is till area left to be printed
if (currentRect.intersects(contentRect))
{
printer->newPage();
}
}