From 4f5746680de92c74a26578e1a93a35256994350d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=A1=97=E8=A7=92=E5=B0=8F=E6=9E=97?= <1013335014@qq.com> Date: Thu, 13 Jun 2024 09:32:32 +0800 Subject: [PATCH] =?UTF-8?q?Feat=EF=BC=9A=E6=96=B0=E5=A2=9E=E5=A4=84?= =?UTF-8?q?=E7=90=86=E5=AF=BC=E5=87=BA=E5=89=8D=E7=9A=84svg=E5=AF=B9?= =?UTF-8?q?=E8=B1=A1=E7=9A=84=E5=AE=9E=E4=BE=8B=E5=8C=96=E9=80=89=E9=A1=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- simple-mind-map/index.js | 1 - simple-mind-map/src/constants/defaultOptions.js | 3 +++ simple-mind-map/src/plugins/Export.js | 14 ++++++++++---- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/simple-mind-map/index.js b/simple-mind-map/index.js index fea01198..6e445c07 100644 --- a/simple-mind-map/index.js +++ b/simple-mind-map/index.js @@ -518,7 +518,6 @@ class MindMap { // 恢复原先的大小和变换信息 svg.size(origWidth, origHeight) draw.transform(origTransform) - return { svg: clone, // 思维导图图形的整体svg元素,包括:svg(画布容器)、g(实际的思维导图组) svgHTML: clone.svg(), // svg字符串 diff --git a/simple-mind-map/src/constants/defaultOptions.js b/simple-mind-map/src/constants/defaultOptions.js index 8725c108..6479e9b3 100644 --- a/simple-mind-map/src/constants/defaultOptions.js +++ b/simple-mind-map/src/constants/defaultOptions.js @@ -293,6 +293,9 @@ export const defaultOpt = { */ addContentToHeader: null, addContentToFooter: null, + // 导出png、svg、pdf时会获取画布上的svg数据进行克隆,然后通过该克隆的元素进行导出,如果你想对该克隆元素做一些处理,比如新增、替换、修改其中的一些元素,那么可以通过该参数传递一个处理函数,接收svg元素对象,处理后,需要返回原svg元素对象。 + // 需要注意的是svg对象指的是@svgdotjs/svg.js库的元素对象,所以你需要阅读该库的文档来操作该对象 + handleBeingExportSvg: null, // 【AssociativeLine插件】 // 关联线默认文字 diff --git a/simple-mind-map/src/plugins/Export.js b/simple-mind-map/src/plugins/Export.js index 64f7faef..a5b9d79a 100644 --- a/simple-mind-map/src/plugins/Export.js +++ b/simple-mind-map/src/plugins/Export.js @@ -54,7 +54,8 @@ class Export { errorHandler, resetCss, addContentToHeader, - addContentToFooter + addContentToFooter, + handleBeingExportSvg } = this.mindMap.opt let { svg, svgHTML, clipData } = this.mindMap.getSvgData({ paddingX: exportPaddingX, @@ -67,6 +68,7 @@ class Export { clipData.paddingX = exportPaddingX clipData.paddingY = exportPaddingY } + let svgIsChange = false // svg的image标签,把图片的url转换成data:url类型,否则导出会丢失图片 const task1 = this.createTransformImgTaskList( svg, @@ -87,16 +89,20 @@ class Export { errorHandler(ERROR_TYPES.EXPORT_LOAD_IMAGE_ERROR, error) } // 开启了节点富文本编辑,需要增加一些样式 - let isAddResetCss if (this.mindMap.richText) { const foreignObjectList = svg.find('foreignObject') if (foreignObjectList.length > 0) { foreignObjectList[0].add(SVG(``)) - isAddResetCss = true + svgIsChange = true } } + // 自定义处理svg的方法 + if (typeof handleBeingExportSvg === 'function') { + svgIsChange = true + svg = handleBeingExportSvg(svg) + } // svg节点内容有变,需要重新获取html字符串 - if (taskList.length > 0 || isAddResetCss) { + if (taskList.length > 0 || svgIsChange) { svgHTML = svg.svg() } return {