void Printer::previewOnePage() { if (printMode == PREVIEW) { TemplateLayout t(printOptions, templateOptions); pageSize.setHeight(paintDevice->height()); pageSize.setWidth(paintDevice->width()); webView->page()->setViewportSize(pageSize); // initialize the border settings templateOptions->border_width = std::max(1, pageSize.width() / 1000); if (printOptions->type == print_options::DIVELIST) { webView->setHtml(t.generate()); } else if (printOptions->type == print_options::STATISTICS ) { webView->setHtml(t.generateStatistics()); } bool ok; int divesPerPage = webView->page()->mainFrame()->findFirstElement("body").attribute("data-numberofdives").toInt(&ok); if (!ok) { divesPerPage = 1; // print each dive in a single page if the attribute is missing or malformed //TODO: show warning } if (divesPerPage == 0) { flowRender(); } else { render(1); } } }
void Printer::print() { // we can only print if "PRINT" mode is selected if (printMode != Printer::PRINT) { return; } QPrinter *printerPtr; printerPtr = static_cast<QPrinter*>(paintDevice); TemplateLayout t(printOptions, templateOptions); connect(&t, SIGNAL(progressUpdated(int)), this, SLOT(templateProgessUpdated(int))); dpi = printerPtr->resolution(); //rendering resolution = selected paper size in inchs * printer dpi pageSize.setHeight(qCeil(printerPtr->pageRect(QPrinter::Inch).height() * dpi)); pageSize.setWidth(qCeil(printerPtr->pageRect(QPrinter::Inch).width() * dpi)); webView->page()->setViewportSize(pageSize); webView->page()->mainFrame()->setScrollBarPolicy(Qt::Vertical, Qt::ScrollBarAlwaysOff); // export border width with at least 1 pixel // templateOptions->borderwidth = std::max(1, pageSize.width() / 1000); if (printOptions->type == print_options::DIVELIST) { webView->setHtml(t.generate()); } else if (printOptions->type == print_options::STATISTICS ) { webView->setHtml(t.generateStatistics()); } if (printOptions->color_selected && printerPtr->colorMode()) { printerPtr->setColorMode(QPrinter::Color); } else { printerPtr->setColorMode(QPrinter::GrayScale); } // apply user settings int divesPerPage; // get number of dives per page from data-numberofdives attribute in the body of the selected template bool ok; divesPerPage = webView->page()->mainFrame()->findFirstElement("body").attribute("data-numberofdives").toInt(&ok); if (!ok) { divesPerPage = 1; // print each dive in a single page if the attribute is missing or malformed //TODO: show warning } int Pages; if (divesPerPage == 0) { flowRender(); } else { Pages = qCeil(getTotalWork(printOptions) / (float)divesPerPage); render(Pages); } }