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 {