首页 > 其他分享 >思维导图生成XMindUtil

思维导图生成XMindUtil

时间:2025-01-15 13:54:05浏览次数:1  
标签:Styles 思维 style String 导图 XMindUtil setProperty workbook org

package com.ruoyi.common.utils.XMind;

import com.tool.commons.ICommons;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.xmind.core.*;
import org.xmind.core.style.IStyle;
import org.xmind.core.style.IStyleSheet;
import org.xmind.ui.style.Styles;

import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List;

/**
 * @Author: haifei
 * @Date: 2024/12/3 15:17
 */
public class XMindUtil {

    private static final Logger log = LoggerFactory.getLogger(XMindUtil.class);

    private static String[] SUPERVISECOLORARRAY = {"#F6A04D", "#FDD834", "#7986CB", "#EA8ABA", "#0096BF", "#8EDE99", "#FF9595", "#D0D0D0", "#0CE6CF"};

    /**
     * 生成思维脑图
     *
     * @param mindMapNodeList 思维脑图节点
     * @param type            类型,1:右逻辑图,2:右头鱼骨
     */
    public static Boolean createXMind(List<MindMapNode> mindMapNodeList, String type, String xmindFilePath, String optionalRootName) {
        if (ICommons.isNullOrEmpty(mindMapNodeList) || ICommons.isNullOrEmpty(type) || ICommons.isNullOrEmpty(xmindFilePath) || ICommons.isNullOrEmpty(optionalRootName)) {
            return false;
        }
        if (!xmindFilePath.endsWith(".xmind")) {
            return false;
        }

        // 创建XMind工作簿
        IWorkbookBuilder workbookBuilder = Core.getWorkbookBuilder();
        IWorkbook workbook = workbookBuilder.createWorkbook();
        ISheet primarySheet = workbook.getPrimarySheet();
        // 创建根节点
        ITopic topTopic = primarySheet.getRootTopic();
        // 指定中心脑图的结构
        topTopic.setStructureClass(XMindStructureEnum.LOGIC_RIGHT.getClassName());
        IStyle style = setTopicIStyle(workbook, topTopic);
        topTopic.setStyleId(style.getId());

        if (mindMapNodeList.size() == 1) {
            MindMapNode mindMapNode = mindMapNodeList.get(0);
            String topTopicText = mindMapNode.getContentTxt();
            topTopic.setTitleText(topTopicText);
            // 设置备注
            IPlainNotesContent notesContent = (IPlainNotesContent) workbook.createNotesContent(INotes.PLAIN);
            notesContent.setTextContent(mindMapNode.getRemark());
            INotes notes = topTopic.getNotes();
            notes.setContent(INotes.PLAIN, notesContent);
            List<MindMapNode> sonNode = mindMapNode.getSonNode();
            for (MindMapNode mapNode : sonNode) {
                buildTopic(workbook, topTopic, mindMapNode, mapNode.getSonNode(), 1, type);
            }
        }
        else {
            // 设置根节点名称
//            topTopic.setTitleText("根节点");
            topTopic.setTitleText(optionalRootName);
            // 设置内容 -- 构建脑图内容
            for (MindMapNode mindMapNode : mindMapNodeList) {
                // 孩子标题
                List<MindMapNode> childMindMapNode = mindMapNode.getSonNode();
                buildTopic(workbook, topTopic, mindMapNode, childMindMapNode, 1, type);
            }
        }

        File file = new File(xmindFilePath);
        if (!file.getParentFile().exists()) {
            file.getParentFile().mkdirs();
        }
        try {
            // 生成文件到指定路径
            workbook.save(Files.newOutputStream(Paths.get(xmindFilePath)));
            log.info("XMind思维导图生成成功!");
            return true;
        } catch (Exception e) {
            log.error("XMind思维导图生成失败,原因:", e);
            return false;
        }
    }

    private static IStyle setTopicIStyle(IWorkbook workbook, ITopic topTopic) {
        IStyleSheet styleSheet = workbook.getStyleSheet();
        IStyle style = styleSheet.findStyle(topTopic.getStyleId());
        if (style == null) {
            style = styleSheet.createStyle(IStyle.TOPIC);
            styleSheet.addStyle(style, IStyleSheet.NORMAL_STYLES);
        }
        // 设置主题的Style
        style.setProperty(Styles.FillColor, SUPERVISECOLORARRAY[0]);
        style.setProperty(Styles.TextColor, "#FFFFFF");
        style.setProperty(Styles.FontWeight, Styles.FontWeight);
        style.setProperty(Styles.FontSize, "20pt");
        style.setProperty(Styles.LineWidth, "2pt");
        style.setProperty(Styles.LineClass, Styles.BRANCH_CONN_STRAIGHT);
        style.setProperty(Styles.LineColor, Styles.DEF_TOPIC_LINE_COLOR);
        return style;
    }

    /**
     * 构建脑图分支主题
     *
     * @param workbook      工作簿
     * @param rootTopic     父主题
     * @param childMindNode 孩子节点
     * @param mindMapNodes  子孙节点列表
     * @param level         层级
     */
    private static void buildTopic(IWorkbook workbook, ITopic rootTopic, MindMapNode childMindNode, List<MindMapNode> mindMapNodes, int level, String type) {
        // 子标题
        ITopic topic = workbook.createTopic();
        topic.setTitleText(childMindNode.getContentTxt());
        if ("2".equals(type)) {
            topic.setStructureClass(XMindStructureEnum.FISH_BONE_LEFT_HEADED.getClassName());
        }
        // 设置备注
        IPlainNotesContent notesContent = (IPlainNotesContent) workbook.createNotesContent(INotes.PLAIN);
        notesContent.setTextContent(childMindNode.getRemark());
        INotes notes = topic.getNotes();
        notes.setContent(INotes.PLAIN, notesContent);
        // 设置样式
        IStyleSheet styleSheet = workbook.getStyleSheet();
        IStyle style = styleSheet.findStyle(topic.getStyleId());
        if (style == null) {
            style = styleSheet.createStyle(IStyle.TOPIC);
            styleSheet.addStyle(style, IStyleSheet.NORMAL_STYLES);
        }
        style.setProperty(Styles.FillColor, SUPERVISECOLORARRAY[level]);
        style.setProperty(Styles.TextColor, "#000229");
        style.setProperty(Styles.FontWeight, Styles.FontWeight);
        style.setProperty(Styles.FontSize, "20pt");
        style.setProperty(Styles.LineWidth, "2pt");
        style.setProperty(Styles.LineColor, Styles.DEF_TOPIC_LINE_COLOR);
        style.setProperty(Styles.ShapeClass, Styles.TOPIC_SHAPE_ROUNDEDRECT);
        topic.setStyleId(style.getId());
        for (MindMapNode mindMapNode : mindMapNodes) {
            buildTopic(workbook, topic, mindMapNode, mindMapNode.getSonNode(), level + 1, type);
        }
        rootTopic.add(topic);
    }

}

package com.ruoyi.common.utils.XMind;

import java.util.List;

/**
 * @Author: haifei
 * @Date: 2024/12/3 15:23
 *
 * Xmind 脑图节点结构
 */
public class MindMapNode {

    /**
     * 内容
     */
    private String contentTxt;
    /**
     * 备注
     */
    private String remark;
    /**
     * 子节点
     */
    private List<MindMapNode> sonNode;

    public String getContentTxt() {
        return contentTxt;
    }

    public void setContentTxt(String contentTxt) {
        this.contentTxt = contentTxt;
    }

    public String getRemark() {
        return remark;
    }

    public void setRemark(String remark) {
        this.remark = remark;
    }

    public List<MindMapNode> getSonNode() {
        return sonNode;
    }

    public void setSonNode(List<MindMapNode> sonNode) {
        this.sonNode = sonNode;
    }

    @Override
    public String toString() {
        return "MindMapNode{" +
                "contentTxt='" + contentTxt + '\'' +
                ", remark='" + remark + '\'' +
                ", sonNode=" + sonNode +
                '}';
    }
}

package com.ruoyi.common.utils.XMind;

/**
 * @Author: haifei
 * @Date: 2024/12/3 15:28
 *
 * Xmind 骨架类型
 */
public enum XMindStructureEnum {

    FISH_BONE_LEFT_HEADED("左头鱼骨", "org.xmind.ui.fishbone.leftHeaded"),
    FISH_BONE_RIGHT_HEADED("右头鱼骨", "org.xmind.ui.fishbone.rightHeaded"),
    LOGIC_LEFT("左逻辑图", "org.xmind.ui.logic.left"),
    LOGIC_RIGHT("右逻辑图", "org.xmind.ui.logic.right"),
    ORG_CHART_DOWN("向下组织图", "org.xmind.ui.org-chart.down"),
    ORG_CHART_UP("向上组织图", "org.xmind.ui.org-chart.up"),
    SPREADSHEET("电子表格", "org.xmind.ui.spreadsheet"),
    TREE_LEFT("左树", "org.xmind.ui.tree.left"),
    TREE_RIGHT("右树", "org.xmind.ui.tree.right");

    /**
     * 结构类型
     */
    private final String type;

    /**
     * 结构类名
     */
    private final String className;

    XMindStructureEnum(String type, String className) {
        this.type = type;
        this.className = className;
    }

    public String getType() {
        return type;
    }

    public String getClassName() {
        return className;
    }
}

标签:Styles,思维,style,String,导图,XMindUtil,setProperty,workbook,org
From: https://www.cnblogs.com/yppah/p/18672861

相关文章

  • 好用的思维导图工具,大大提升你的工作效率
    软件介绍:XMind,一款卓越非凡的思维导图软件,凭借其全球领先的EclipseRCP软件架构,精心打造出了这款既易用又高效的可视化思维利器。它将软件的可扩展性、跨平台兼容性、稳定性与卓越性能完美融合,全方位展现了先进的软件技术。XMind的使命,便是助力用户在思维的海洋中畅游,真正实......
  • 【AI论文】在大语言模型中迈向系统2推理:学习如何运用元思维链进行思考
    这篇论文探讨了大型语言模型(LLMs)在处理复杂推理任务时的局限性,并提出了一种名为元思维链(Meta-CoT)的新框架来解决这些缺点(大概就是授大模型以鱼不如授大模型以渔的意思)。Meta-CoT通过明确地模拟到达特定思维链所需的潜在推理过程,扩展了传统的思维链(CoT)方法。HuggingFace链接:Pap......
  • Mac电脑如何安装Xmind 2025 中文思维导图软件?
    Mac电脑如何安装Xmind2025中文思维导图软件?介绍Xmind,是一款出色的思维导图和头脑风暴软件,拥有美观的智能配色方案,便于你轻松理清思路捕捉创意。丰富的导图模板及多种创意整合工具,可助力导图迸发更多活力。还拥有强大演说模式,及提供Markdown、SVG、PNG、PDF、Office等......
  • Mac电脑如何安装Xmind 2025 中文思维导图软件?
    Mac电脑如何安装Xmind2025中文思维导图软件?介绍Xmind,是一款出色的思维导图和头脑风暴软件,拥有美观的智能配色方案,便于你轻松理清思路捕捉创意。丰富的导图模板及多种创意整合工具,可助力导图迸发更多活力。还拥有强大演说模式,及提供Markdown、SVG、PNG、PDF、Office等......
  • 如何加密 PL/SQL 程序?思维导图 代码示例(java 架构)
    加密PL/SQL程序通常指的是保护存储在数据库中的PL/SQL代码,防止未经授权的用户查看或修改。Oracle数据库提供了一些方法来实现这一点,比如使用WRAP工具或者通过DBMS_DDL.CREATE_WRAPPED包来进行源代码的加密。思维导图结构-加密PL/SQL程序-使用WRAP工具......
  • 为什么服务化思维值得推崇?从产品到服务的转型思考
    产品有周期,服务无止境在日常工作中,我们常常会遇到一个问题:为何越来越多的人开始推崇服务化思维?它是否真的是未来发展的趋势,值得我们每个人去实践和反思?今天就来聊一聊这个话题,探讨为什么我觉得服务化思维更具价值。我们不妨从产品与服务的本质差异开始思考:产品和服务到底......
  • 思维的进化:从链式推理到元链式推理的算法探秘
    ......
  • 海贼OJ #251. 士兵 题解 排序+中位数(数学思维题)
    题目链接:https://oj.haizeix.com/problem/251解题思路:最短总距离是所有点到中位数的距离之和。对\(y\):排序求中位数。对\(x\):对\(x\)排序,然后对排序后的\(x_i-i\)排序,然后求最短距离。对\(x_i-i\)进行处理,能保证最终的\(x_i\)各不一样且相邻。示例程序:#inclu......
  • LLM大模型:思维链中COT、TOT和GOT的前世今生
    这一轮爆火的AI热潮是被transformer架构点燃的, 根据scanlinglaw的观点, transformer这个架构有个显著的特点:大力出奇迹!计算量C=6*ND,N是模型参数,D是token数。N越大,网络压缩、承载信息的能力越大,但是需要的token也就越多,需要的算力也越多,这就是妥妥的烧钱啊!pre-train几百上千......
  • 解释 FUNCATION,PROCEDURE 和 PACKAGE 区别 ?思维导图 代码示例(java 架构)
    在PL/SQL中,FUNCTION、PROCEDURE和PACKAGE是三种不同的程序单元,它们各自有特定的用途和特性。下面将通过思维导图的形式来概述它们的区别,并提供相应的代码示例。思维导图结构-PL/SQL程序单元-FUNCTION-定义-返回一个值-使用场景-计算......