From 46e2a16c83c169c064ef82df94dd45c1cd9acd07 Mon Sep 17 00:00:00 2001 From: jkochNU Date: Sun, 27 Mar 2022 18:23:26 -0500 Subject: [PATCH 1/2] adds button to the canvas toolbar that creates a pdf of the figure --- ipympl/backend_nbagg.py | 11 ++++++++++- src/mpl_widget.ts | 8 ++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/ipympl/backend_nbagg.py b/ipympl/backend_nbagg.py index e740cef8..6a817f92 100644 --- a/ipympl/backend_nbagg.py +++ b/ipympl/backend_nbagg.py @@ -147,11 +147,13 @@ def _default_toolitems(self): 'move': 'arrows', 'download': 'floppy-o', 'export': 'file-picture-o', + 'make_pdf': 'file-pdf' } download_item = ('Download', 'Download plot', 'download', 'save_figure') + make_pdf = ('Create pdf', 'Create pdf from figure', 'make_pdf', 'makepdf') - toolitems = NavigationToolbar2.toolitems + (download_item,) + toolitems = NavigationToolbar2.toolitems + (download_item,) + (make_pdf,) return [ (text, tooltip, icons[icon_name], method_name) @@ -275,6 +277,9 @@ def _handle_message(self, object, content, buffers): Canvas.current_dpi_ratio = content['dpi_ratio'] self.manager.handle_json(content) + elif content['type'] == 'toolbar_button' and content['name'] == 'makepdf': + self._send_savefig_pdf() + else: self.manager.handle_json(content) @@ -450,6 +455,10 @@ def handle_key(key): handle_key_press = handle_key_release = _handle_key + def _send_savefig_pdf(self): + buf = io.BytesIO() + self.figure.savefig(buf, format='pdf', dpi='figure') + self.send({'data': '{"type": "makepdf"}'}, buffers=[buf.getbuffer()]) class FigureManager(FigureManagerWebAgg): if matplotlib.__version__ < "3.6": diff --git a/src/mpl_widget.ts b/src/mpl_widget.ts index 9814a90f..553b466e 100644 --- a/src/mpl_widget.ts +++ b/src/mpl_widget.ts @@ -157,6 +157,14 @@ export class MPLCanvasModel extends DOMWidgetModel { document.body.removeChild(save); } + handle_makepdf(msg: any, dataviews: any) { + const url_creator = window.URL || window.webkitURL; + const buffer = new Uint8Array(dataviews[0].buffer); + const blob = new Blob([buffer], { type: 'application/pdf' }); + const image_url = url_creator.createObjectURL(blob); + window.open(image_url, '_blank'); + } + handle_resize(msg: { [index: string]: any }) { this.resize_canvas(); this.offscreen_context.drawImage(this.image, 0, 0); From 7713862200b7d48d7fca9bf4e17fd859942a1710 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sun, 27 Mar 2022 23:33:38 +0000 Subject: [PATCH 2/2] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- ipympl/backend_nbagg.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ipympl/backend_nbagg.py b/ipympl/backend_nbagg.py index 6a817f92..7aeed973 100644 --- a/ipympl/backend_nbagg.py +++ b/ipympl/backend_nbagg.py @@ -147,7 +147,7 @@ def _default_toolitems(self): 'move': 'arrows', 'download': 'floppy-o', 'export': 'file-picture-o', - 'make_pdf': 'file-pdf' + 'make_pdf': 'file-pdf', } download_item = ('Download', 'Download plot', 'download', 'save_figure') @@ -460,6 +460,7 @@ def _send_savefig_pdf(self): self.figure.savefig(buf, format='pdf', dpi='figure') self.send({'data': '{"type": "makepdf"}'}, buffers=[buf.getbuffer()]) + class FigureManager(FigureManagerWebAgg): if matplotlib.__version__ < "3.6": ToolbarCls = Toolbar