Index: src/sas/qtgui/Perspectives/Fitting/ReportPageLogic.py =================================================================== --- src/sas/qtgui/Perspectives/Fitting/ReportPageLogic.py (revision 30bc96eb9b4a9a99c1517c476d1793f47f2cd8ed) +++ src/sas/qtgui/Perspectives/Fitting/ReportPageLogic.py (revision 5330be22eefd3c4aece12add15737f928acbf2e8) @@ -4,4 +4,6 @@ import re import sys +import tempfile + import logging from io import BytesIO @@ -9,9 +11,4 @@ from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas - -from sas.qtgui.Plotting.Plotter import Plotter -from sas.qtgui.Plotting.Plotter2D import Plotter2D -from sas.qtgui.Plotting.PlotterData import Data1D -from sas.qtgui.Plotting.PlotterData import Data2D import sas.qtgui.Utilities.GuiUtils as GuiUtils @@ -102,9 +99,27 @@ canvas = FigureCanvas(fig) png_output = BytesIO() - canvas.print_png(png_output) - data = png_output.getvalue() - data64 = base64.b64encode(data) + + # Create a "safe" location - system tmp + tmp_file = tempfile.TemporaryFile(suffix=".png") + try: + fig.savefig(tmp_file.name, dpi=75) + fig.savefig(png_output, dpi=75) + except PermissionError: + # sometimes one gets "permission denied" for temp files + # mainly on Windows 7 *gasp*. Let's try local directory + tmp_file = open("_tmp.png", "w+") + try: + fig.savefig(tmp_file.name, dpi=75) + fig.savefig(png_output, dpi=75) + except Exception as ex: + logging.error("Creating of the report failed: %s"%str(ex)) + return + + data_to_print = png_output.getvalue() == open(tmp_file.name, 'rb').read() + tmp_file.close() + data64 = base64.b64encode(png_output.getvalue()) data_to_print = urllib.parse.quote(data64) - feet=FEET_2 + + feet = FEET_2 if sys.platform == "darwin": # Mac feet = FEET_3 @@ -153,29 +168,18 @@ if not modelname or self._index is None: return None - plots = GuiUtils.plotsFromModel(modelname, self._index) - # Call show on requested plots - # All same-type charts in one plot - for plot_set in plots: - if isinstance(plot_set, Data1D): - if 'residuals' in plot_set.title.lower(): - res_plot = Plotter(self, quickplot=True) - res_plot.plot(plot_set) - graphs.append(res_plot.figure) - continue - if not 'new_plot' in locals(): - new_plot = Plotter(self, quickplot=True) - new_plot.plot(plot_set) - elif isinstance(plot_set, Data2D): - plot2D = Plotter2D(self, quickplot=True) - plot2D.item = self._index - plot2D.plot(plot_set) - graphs.append(plot2D.figure) - - else: - msg = "Incorrect data type passed to Plotting" - raise AttributeError(msg) - - if 'new_plot' in locals() and isinstance(new_plot.data, Data1D): - graphs.append(new_plot.figure) + plot_ids = [plot.id for plot in GuiUtils.plotsFromModel(modelname, self._index)] + + # Active plots + import sas.qtgui.Plotting.PlotHelper as PlotHelper + shown_plot_names = PlotHelper.currentPlots() + + # current_plots = list of graph names of currently shown plots + # which are related to this dataset + current_plots = [name for name in shown_plot_names if PlotHelper.plotById(name).data.id in plot_ids] + + for name in current_plots: + # get the plotter object first + plotter = PlotHelper.plotById(name) + graphs.append(plotter.figure) return graphs Index: src/sas/qtgui/Utilities/ReportDialog.py =================================================================== --- src/sas/qtgui/Utilities/ReportDialog.py (revision 30bc96eb9b4a9a99c1517c476d1793f47f2cd8ed) +++ src/sas/qtgui/Utilities/ReportDialog.py (revision 5330be22eefd3c4aece12add15737f928acbf2e8) @@ -101,9 +101,9 @@ # translate png references into html from base64 string to on-disk name - cleanr = re.compile('
' - #