void KoReportItemWeb::loadFinished(bool) { kDebug () << m_rendering; if (m_rendering) { OROPicture * pic = new OROPicture(); m_webPage->setViewportSize(m_size.toScene().toSize()); m_webPage->mainFrame()->setScrollBarPolicy(Qt::Horizontal, Qt::ScrollBarAlwaysOff); m_webPage->mainFrame()->setScrollBarPolicy(Qt::Vertical, Qt::ScrollBarAlwaysOff); QPainter p(pic->picture()); m_webPage->mainFrame()->render(&p); QPointF pos = m_pos.toScene(); QSizeF size = m_size.toScene(); pos += m_targetOffset; pic->setPosition(pos); pic->setSize(size); if (m_targetPage) m_targetPage->addPrimitive(pic, false, true); OROPicture *p2 = dynamic_cast<OROPicture*>(pic->clone()); p2->setPosition(m_pos.toPoint()); if (m_targetSection) m_targetSection->addPrimitive(p2); m_rendering = false; emit(finishedRendering()); } }
bool KoReportODTRenderer::render(const KoReportRendererContext& context, ORODocument* document, int /*page*/) { QTextTableFormat tableFormat; tableFormat.setCellPadding(5); tableFormat.setHeaderRowCount(1); tableFormat.setBorderStyle(QTextFrameFormat::BorderStyle_Solid); tableFormat.setWidth(QTextLength(QTextLength::PercentageLength, 100)); QTextTable *table = m_cursor.insertTable(1, 1, tableFormat); long renderedSections = 0; for (long s = 0; s < document->sections(); s++) { OROSection *section = document->section(s); section->sortPrimatives(OROSection::SortX); if (section->type() == KRSectionData::GroupHeader || section->type() == KRSectionData::GroupFooter || section->type() == KRSectionData::ReportHeader || section->type() == KRSectionData::ReportFooter || section->type() == KRSectionData::Detail){ //Add this section to the document //Resize the table to accommodate all the primitives in the section if (table->columns() < section->primitives()) { table->appendColumns(section->primitives() - table->columns()); } if (renderedSections > 0) { //We need to back a row, then forward a row to get at the start cell m_cursor.movePosition(QTextCursor::PreviousRow); m_cursor.movePosition(QTextCursor::NextRow); } else { //On the first row, ensure we are in the first cell after expanding the table while (m_cursor.movePosition(QTextCursor::PreviousCell)){} } //Render the objects in each section for (int i = 0; i < section->primitives(); i++) { //Colour the cell using hte section background colour OROPrimitive * prim = section->primitive(i); QTextTableCell cell = table->cellAt(m_cursor); QTextCharFormat format = cell.format(); format.setBackground(section->backgroundColor()); cell.setFormat(format); if (prim->type() == OROTextBox::TextBox) { OROTextBox * tb = (OROTextBox*) prim; m_cursor.insertText(tb->text()); } else if (prim->type() == OROImage::Image) { OROImage * im = (OROImage*) prim; m_cursor.insertImage(im->image().scaled(im->size().width(), im->size().height(), Qt::KeepAspectRatio)); } else if (prim->type() == OROPicture::Picture) { OROPicture * im = (OROPicture*) prim; QImage image(im->size().toSize(), QImage::Format_RGB32); QPainter painter(&image); im->picture()->play(&painter); m_cursor.insertImage(image); } else { kWarning() << "unhandled primitive type"; } m_cursor.movePosition(QTextCursor::NextCell); } if (s < document->sections() - 1) { table->appendRows(1); } renderedSections++; } } QTextDocumentWriter writer(context.destinationUrl.toLocalFile()); return writer.write(m_document); }