void PrintLayout::printTable() const { QTextDocument doc; QSizeF pageSize; pageSize.setWidth(pageRect.width()); pageSize.setHeight(pageRect.height()); doc.setPageSize(pageSize); QString styleSheet( "<style type='text/css'>" \ "table {" \ " border-width: 1px;" \ " border-style: solid;" \ " border-color: #999999;" \ "}" \ "th {" \ " background-color: #eeeeee;" \ " font-size: small;" \ " padding: 3px 5px 3px 5px;" \ "}" \ "td {" \ " font-size: small;" \ " padding: 3px 5px 3px 5px;" \ "}" \ "</style>" ); // setDefaultStyleSheet() doesn't work here? QString htmlText = styleSheet + "<table cellspacing='0' width='100%'>"; QString htmlTextPrev; int pageCountNew = 1, pageCount; bool insertHeading = true; int i; struct dive *dive; for_each_dive(i, dive) { if (!dive->selected && printOptions->print_selected) continue; if (insertHeading) { htmlText += insertTableHeadingRow(); insertHeading = false; } htmlTextPrev = htmlText; htmlText += insertTableDataRow(dive); doc.setHtml(htmlText); pageCount = pageCountNew; pageCountNew = doc.pageCount(); /* if the page count increases after adding this row we 'revert' * and add a heading instead. */ if (pageCountNew > pageCount) { htmlText = htmlTextPrev; insertHeading = true; i--; } } htmlText += "</table>"; doc.setHtml(htmlText); doc.print(printer); }
void PrintLayout::printTable() const { QTextDocument doc; QSizeF pageSize; pageSize.setWidth(pageRect.width()); pageSize.setHeight(pageRect.height()); doc.documentLayout()->setPaintDevice(printer); doc.setPageSize(pageSize); QString styleSheet( "<style type='text/css'>" "table {" " border-width: 1px;" " border-style: solid;" " border-color: #999999;" "}" "th {" " background-color: #eeeeee;" " font-size: small;" " padding: 3px 5px 3px 5px;" "}" "td {" " font-size: small;" " padding: 3px 5px 3px 5px;" "}" "</style>" ); // setDefaultStyleSheet() doesn't work here? const QString heading(insertTableHeadingRow()); const QString lineBreak("<br>"); QString htmlText = styleSheet + "<table cellspacing='0' width='100%'>"; QString htmlTextPrev; int pageCountNew = 1, pageCount = 0, lastPageWithHeading = 0; bool insertHeading = true; int i; struct dive *dive; for_each_dive(i, dive) { if (!dive->selected && printOptions->print_selected) continue; if (insertHeading) { htmlTextPrev = htmlText; htmlText += heading; doc.setHtml(htmlText); pageCount = doc.pageCount(); // prevent adding two headings on the same page if (pageCount == lastPageWithHeading) { htmlText = htmlTextPrev; // add line breaks until a new page is reached while (pageCount == lastPageWithHeading) { htmlTextPrev = htmlText; htmlText += lineBreak; doc.setHtml(htmlText); pageCount = doc.pageCount(); } // revert last line break from the new page and add heading htmlText = htmlTextPrev; htmlText += heading; } insertHeading = false; lastPageWithHeading = pageCount; } htmlTextPrev = htmlText; htmlText += insertTableDataRow(dive); doc.setHtml(htmlText); pageCount = pageCountNew; pageCountNew = doc.pageCount(); // if the page count increases revert and add heading instead if (pageCountNew > pageCount) { htmlText = htmlTextPrev; insertHeading = true; i--; } } htmlText += "</table>"; doc.setHtml(htmlText); doc.print(printer); }