This code will print the html header and footer.

    QRect printer_rect(printer->pageRect());

    ///Setting up the header and calculating the header size
    QTextDocument *document_header = new QTextDocument(this);
    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
    QTextDocument *document_footer = new QTextDocument(this);
    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
    QTextDocument *main_doc = new QTextDocument(this);
    main_doc->setHtml(content);
    main_doc->setPageSize(center_size);

    ///Setting up the rectangles for each section.
    QRect headerRect = QRect(QPoint(0,0), document_header->size().toSize());
    QRect footerRect = QRect(QPoint(0,0), document_footer->size().toSize());
    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.

    QPainter painter(printer);
    int count = 0;

    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);
       
        count++;
        ///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();
        }
    }