| 795 | } |
| 796 | |
| 797 | bool DatapickerImageView::exportToFile(const QString& path, const Worksheet::ExportFormat format, const int resolution) { |
| 798 | QRectF sourceRect = scene()->sceneRect(); |
| 799 | bool rc = false; |
| 800 | |
| 801 | // print |
| 802 | if (format == Worksheet::ExportFormat::PDF) { |
| 803 | QPrinter printer(QPrinter::HighResolution); |
| 804 | printer.setOutputFormat(QPrinter::PdfFormat); |
| 805 | printer.setOutputFileName(path); |
| 806 | int w = Worksheet::convertFromSceneUnits(sourceRect.width(), Worksheet::Unit::Millimeter); |
| 807 | int h = Worksheet::convertFromSceneUnits(sourceRect.height(), Worksheet::Unit::Millimeter); |
| 808 | printer.setPageSize(QPageSize(QSizeF(w, h), QPageSize::Millimeter)); |
| 809 | printer.setPageMargins(QMarginsF(0, 0, 0, 0), QPageLayout::Millimeter); |
| 810 | printer.setPrintRange(QPrinter::PageRange); |
| 811 | printer.setCreator(QLatin1String("LabPlot ") + QLatin1String(LVERSION)); |
| 812 | |
| 813 | QPainter painter(&printer); |
| 814 | painter.setRenderHint(QPainter::Antialiasing); |
| 815 | QRectF targetRect(0, 0, painter.device()->width(), painter.device()->height()); |
| 816 | rc = painter.begin(&printer); |
| 817 | if (!rc) |
| 818 | return false; |
| 819 | exportPaint(&painter, targetRect, sourceRect); |
| 820 | painter.end(); |
| 821 | } else if (format == Worksheet::ExportFormat::SVG) { |
| 822 | #ifdef HAVE_QTSVG |
| 823 | QSvgGenerator generator; |
| 824 | generator.setFileName(path); |
| 825 | int w = Worksheet::convertFromSceneUnits(sourceRect.width(), Worksheet::Unit::Millimeter); |
| 826 | int h = Worksheet::convertFromSceneUnits(sourceRect.height(), Worksheet::Unit::Millimeter); |
| 827 | w = w * GuiTools::dpi(this).first / (GSL_CONST_CGS_INCH * Worksheet::convertToSceneUnits(1, Worksheet::Unit::Millimeter)); |
| 828 | h = h * GuiTools::dpi(this).second / (GSL_CONST_CGS_INCH * Worksheet::convertToSceneUnits(1, Worksheet::Unit::Millimeter)); |
| 829 | |
| 830 | generator.setSize(QSize(w, h)); |
| 831 | QRectF targetRect(0, 0, w, h); |
| 832 | generator.setViewBox(targetRect); |
| 833 | |
| 834 | QPainter painter; |
| 835 | rc = painter.begin(&generator); |
| 836 | if (!rc) |
| 837 | return false; |
| 838 | exportPaint(&painter, targetRect, sourceRect); |
| 839 | painter.end(); |
| 840 | #endif |
| 841 | } else { |
| 842 | // PNG |
| 843 | // TODO add all formats supported by Qt in QImage |
| 844 | int w = Worksheet::convertFromSceneUnits(sourceRect.width(), Worksheet::Unit::Millimeter); |
| 845 | int h = Worksheet::convertFromSceneUnits(sourceRect.height(), Worksheet::Unit::Millimeter); |
| 846 | w = w * resolution / (GSL_CONST_CGS_INCH * Worksheet::convertToSceneUnits(1, Worksheet::Unit::Millimeter)); |
| 847 | h = h * resolution / (GSL_CONST_CGS_INCH * Worksheet::convertToSceneUnits(1, Worksheet::Unit::Millimeter)); |
| 848 | QImage image(QSize(w, h), QImage::Format_ARGB32_Premultiplied); |
| 849 | image.fill(Qt::transparent); |
| 850 | QRectF targetRect(0, 0, w, h); |
| 851 | |
| 852 | QPainter painter; |
| 853 | painter.begin(&image); |
| 854 | painter.setRenderHint(QPainter::Antialiasing); |