Feature:支持配置导出为png、svg、pdf时的内边距。

This commit is contained in:
wanglin2 2023-04-18 09:04:16 +08:00
parent d1e2db993e
commit 9fc2dbabd4
15 changed files with 117 additions and 7 deletions

View File

@ -92,7 +92,10 @@ const defaultOpt = {
// 如果开启节点动画过渡可以通过该属性设置过渡的时间单位ms
nodeTransitionMoveDuration: 300,
// 初始根节点的位置
initRootNodePosition: null
initRootNodePosition: null,
// 导出png、svg、pdf时的图形内边距
exportPaddingX: 10,
exportPaddingY: 10
}
// 思维导图
@ -359,7 +362,7 @@ class MindMap {
}
// 获取svg数据
getSvgData() {
getSvgData({ paddingX = 0, paddingY = 0 }) {
const svg = this.svg
const draw = this.draw
// 保存原始信息
@ -371,6 +374,10 @@ class MindMap {
draw.scale(1 / origTransform.scaleX, 1 / origTransform.scaleY)
// 获取变换后的位置尺寸信息其实是getBoundingClientRect方法的包装方法
const rect = draw.rbox()
// 内边距
rect.width += paddingX
rect.height += paddingY
draw.translate(paddingX / 2, paddingY / 2)
// 将svg设置为实际内容的宽高
svg.size(rect.width, rect.height)
// 把实际内容变换

View File

@ -1,6 +1,6 @@
{
"name": "simple-mind-map",
"version": "0.5.4-fix.1",
"version": "0.5.5",
"description": "一个简单的web在线思维导图",
"authors": [
{

View File

@ -28,7 +28,11 @@ class Export {
// 获取svg数据
async getSvgData(domToImage) {
let { svg, svgHTML } = this.mindMap.getSvgData()
let { exportPaddingX, exportPaddingY } = this.mindMap.opt
let { svg, svgHTML } = this.mindMap.getSvgData({
paddingX: exportPaddingX,
paddingY: exportPaddingY
})
// 把图片的url转换成data:url类型否则导出会丢失图片
let imageList = svg.find('image')
let task = imageList.map(async item => {

View File

@ -95,7 +95,9 @@ export default {
svgTips: 'tips: Exporting pictures in rich text mode is time-consuming',
transformingDomToImages: 'Converting nodes: ',
notifyTitle: 'Info',
notifyMessage: 'If the download is not triggered, check whether it is blocked by the browser'
notifyMessage: 'If the download is not triggered, check whether it is blocked by the browser',
paddingX: 'Padding x',
paddingY: 'Padding y'
},
fullscreen: {
fullscreenShow: 'Full screen show',

View File

@ -95,7 +95,9 @@ export default {
svgTips: 'tips富文本模式导出图片非常耗时',
transformingDomToImages: '正在转换节点:',
notifyTitle: '消息',
notifyMessage: '如果没有触发下载,请检查是否被浏览器拦截了'
notifyMessage: '如果没有触发下载,请检查是否被浏览器拦截了',
paddingX: '水平内边距',
paddingY: '垂直内边距'
},
fullscreen: {
fullscreenShow: '全屏查看',

View File

@ -1,5 +1,9 @@
# Changelog
## 0.5.5
New: 1.Supports configuring the padding when exporting to PNG, SVG, or PDF.
## 0.5.4
New: 1.Add new themes. 2.Added timeline and fishbone structure.
@ -8,6 +12,10 @@ Fix: 1.Fix the conflict issue between node right-click and canvas right-click. 2
optimization: 1.Optimize the layout of organizational chart. 2.Optimize the layout of the directory organization chart.
## 0.5.4-fix.1
optimization: 1.Optimize fishbone layout.
## 0.5.3
Fix: 1.Fixed the issue of setting the text style when multiple nodes were selected in rich text mode, which would change the text of all selected nodes to the text of the last selected node.

View File

@ -1,10 +1,14 @@
<template>
<div>
<h1>Changelog</h1>
<h2>0.5.5</h2>
<p>New: 1.Supports configuring the padding when exporting to PNG, SVG, or PDF.</p>
<h2>0.5.4</h2>
<p>New: 1.Add new themes. 2.Added timeline and fishbone structure.</p>
<p>Fix: 1.Fix the conflict issue between node right-click and canvas right-click. 2.Fix the bug that the line segment is not hidden when dragging nodes such as organizational chart and directory organization chart.</p>
<p>optimization: 1.Optimize the layout of organizational chart. 2.Optimize the layout of the directory organization chart.</p>
<h2>0.5.4-fix.1</h2>
<p>optimization: 1.Optimize fishbone layout.</p>
<h2>0.5.3</h2>
<p>Fix: 1.Fixed the issue of setting the text style when multiple nodes were selected in rich text mode, which would change the text of all selected nodes to the text of the last selected node.</p>
<p>New: 1.Support setting the position of the initial central node.</p>

View File

@ -53,6 +53,8 @@ const mindMap = new MindMap({
| enableNodeTransitionMovev0.5.1+ | Boolean | true | Whether to enable node animation transition | |
| nodeTransitionMoveDurationv0.5.1+ | Number | 300 | If node animation transition is enabled, the transition time can be set using this attribute, in milliseconds | |
| initRootNodePositionv0.5.3+ | Array | null | The position of the initial root node can be passed as an array, default is `['center', 'center']`, Represents the root node at the center of the canvas, In addition to `center`, keywords can also be set to `left`, `top`, `right`, and `bottom`, In addition to passing keywords, each item in the array can also pass a number representing a specific pixel, Can pass a percentage string, such as `['40%', '60%']`, Represents a horizontal position at `40%` of the canvas width, and a vertical position at `60%` of the canvas height | |
| exportPaddingXv0.5.5+ | Number | 10 | Horizontal padding of graphics when exporting PNG, SVG, and PDF | |
| exportPaddingYv0.5.5+ | Number | 10 | Vertical padding of graphics when exporting PNG, SVG, and PDF | |
### Watermark config

View File

@ -231,6 +231,20 @@
<td>The position of the initial root node can be passed as an array, default is <code>['center', 'center']</code>, Represents the root node at the center of the canvas, In addition to <code>center</code>, keywords can also be set to <code>left</code>, <code>top</code>, <code>right</code>, and <code>bottom</code>, In addition to passing keywords, each item in the array can also pass a number representing a specific pixel, Can pass a percentage string, such as <code>['40%', '60%']</code>, Represents a horizontal position at <code>40%</code> of the canvas width, and a vertical position at <code>60%</code> of the canvas height</td>
<td></td>
</tr>
<tr>
<td>exportPaddingXv0.5.5+</td>
<td>Number</td>
<td>10</td>
<td>Horizontal padding of graphics when exporting PNG, SVG, and PDF</td>
<td></td>
</tr>
<tr>
<td>exportPaddingYv0.5.5+</td>
<td>Number</td>
<td>10</td>
<td>Vertical padding of graphics when exporting PNG, SVG, and PDF</td>
<td></td>
</tr>
</tbody>
</table>
<h3>Watermark config</h3>

View File

@ -1,5 +1,9 @@
# Changelog
## 0.5.5
新增1.支持配置导出为png、svg、pdf时的内边距。
## 0.5.4
新增1.添加新主题。 2.新增时间轴和鱼骨结构。
@ -8,6 +12,10 @@
优化1.优化组织结构图布局。2.优化目录组织图布局。
## 0.5.4-fix.1
优化1.优化鱼骨图布局。
## 0.5.3
修复1.修复富文本模式下,如果选择了多个节点时设置文本样式,会将所有多选节点的文本改成最后一个多选节点的文本的问题。

View File

@ -1,10 +1,14 @@
<template>
<div>
<h1>Changelog</h1>
<h2>0.5.5</h2>
<p>新增1.支持配置导出为pngsvgpdf时的内边距</p>
<h2>0.5.4</h2>
<p>新增1.添加新主题 2.新增时间轴和鱼骨结构</p>
<p>修复1.修复节点右键和画布右键的冲突问题 2.修复组织结构图目录组织图等节点拖拽时存在线段未隐藏的bug</p>
<p>优化1.优化组织结构图布局2.优化目录组织图布局</p>
<h2>0.5.4-fix.1</h2>
<p>优化1.优化鱼骨图布局</p>
<h2>0.5.3</h2>
<p>修复1.修复富文本模式下如果选择了多个节点时设置文本样式会将所有多选节点的文本改成最后一个多选节点的文本的问题</p>
<p>新增1.支持设置初始中心节点的位置</p>

View File

@ -53,6 +53,8 @@ const mindMap = new MindMap({
| enableNodeTransitionMovev0.5.1+ | Boolean | true | 是否开启节点动画过渡 | |
| nodeTransitionMoveDurationv0.5.1+ | Number | 300 | 如果开启节点动画过渡可以通过该属性设置过渡的时间单位ms | |
| initRootNodePositionv0.5.3+ | Array | null | 初始根节点的位置,可传一个数组,默认为`['center', 'center']`,代表根节点处于画布中心位置,除了`center`,关键词还可以设置`left`、`top`、`right`、`bottom`,除了可以传关键词,数组的每项还可以传递一个数字,代表具体的像素,可以传递一个百分比字符串,比如`['40%', '60%']`,代表水平位置在画布宽度的`40%`的位置,垂直位置在画布高度的`60%`的位置 | |
| exportPaddingXv0.5.5+ | Number | 10 | 导出png、svg、pdf时的图形水平内边距 | |
| exportPaddingYv0.5.5+ | Number | 10 | 导出png、svg、pdf时的图形垂直内边距 | |
### 水印配置

View File

@ -231,6 +231,20 @@
<td>初始根节点的位置可传一个数组默认为<code>['center', 'center']</code>代表根节点处于画布中心位置除了<code>center</code>关键词还可以设置<code>left</code><code>top</code><code>right</code><code>bottom</code>除了可以传关键词数组的每项还可以传递一个数字代表具体的像素可以传递一个百分比字符串比如<code>['40%', '60%']</code>代表水平位置在画布宽度的<code>40%</code>的位置垂直位置在画布高度的<code>60%</code>的位置</td>
<td></td>
</tr>
<tr>
<td>exportPaddingXv0.5.5+</td>
<td>Number</td>
<td>10</td>
<td>导出pngsvgpdf时的图形水平内边距</td>
<td></td>
</tr>
<tr>
<td>exportPaddingYv0.5.5+</td>
<td>Number</td>
<td>10</td>
<td>导出pngsvgpdf时的图形垂直内边距</td>
<td></td>
</tr>
</tbody>
</table>
<h3>水印配置</h3>

View File

@ -115,6 +115,7 @@ export default {
this.getData()
this.init()
this.$bus.$on('execCommand', this.execCommand)
this.$bus.$on('paddingChange', this.onPaddingChange)
this.$bus.$on('export', this.export)
this.$bus.$on('setData', this.setData)
this.$bus.$on('startTextEdit', () => {
@ -374,6 +375,11 @@ export default {
}
},
//
onPaddingChange(data) {
this.mindMap.updateConfig(data)
},
//
showNewFeatureInfo() {
let showed = localStorage.getItem('SIMPLE_MIND_MAP_NEW_FEATURE_TIP_1')

View File

@ -30,6 +30,22 @@
>{{ $t('export.domToImage') }}</el-checkbox
>
</div>
<div class="paddingInputBox" v-show="['svg', 'png', 'pdf'].includes(exportType)">
<span class="name">{{ $t('export.paddingX') }}</span>
<el-input
style="width: 100px"
v-model="paddingX"
size="mini"
@change="onPaddingChange"
></el-input>
<span class="name" style="margin-left: 10px;">{{ $t('export.paddingY') }}</span>
<el-input
style="width: 100px"
v-model="paddingY"
size="mini"
@change="onPaddingChange"
></el-input>
</div>
<div class="downloadTypeList">
<div
class="downloadTypeItem"
@ -77,7 +93,9 @@ export default {
widthConfig: true,
domToImage: false,
loading: false,
loadingText: ''
loadingText: '',
paddingX: 10,
paddingY: 10
}
},
computed: {
@ -102,6 +120,13 @@ export default {
})
},
methods: {
onPaddingChange() {
this.$bus.$emit('paddingChange', {
exportPaddingX: Number(this.paddingX),
exportPaddingY: Number(this.paddingY)
})
},
/**
* @Author: 王林
* @Date: 2021-06-22 22:08:11
@ -163,6 +188,14 @@ export default {
}
}
.paddingInputBox {
margin-bottom: 10px;
.name {
margin-right: 10px;
}
}
.tip {
margin-top: 10px;