前段时间有业务需求需要Java后端开发生成Xmind思维导图文件后可导出或在线预览,在网上找了很多资料发现效果都不是很理想,然后自己写了个认为还看的过去的Demo在这里分享一下,Demo的代码都是随手写的有大量的冗余和优化的空间,建议调整后应用,写的不好勿喷!
Jar包依赖导入
需要依赖Jar包的私信我
**主题背景颜色**```java
package ind;import lombok.Data;/*** @author : 谁喝了我的厚乳拿铁* @version : v1.0* @description :* @createTime : 2023/12/19 20:28*/
@Data
public class XmindConstant {//#F6A04D 橘色 #FDD834 黄色 #7986CB 紫色 #EA8ABA 粉色 #0096BF 蓝色//#8EDE99 绿色 #FF9595 亮粉色 #D0D0D0 灰色 #0CE6CF 深蓝色public static String[] superviseColorArray = {"#F6A04D", "#FDD834", "#7986CB", "#EA8ABA", "#0096BF", "#8EDE99", "#FF9595", "#D0D0D0", "#0CE6CF"};//#EEEEEE 事件白色 #19A719 事件绿色 #FF5252 事件红色public static String[] eventColorArray = {"#FFFFFF", "#8EDE99", "#FF5252"};// #0098B9 蓝色 #B7C82B 草绿 #F3D4B2 浅橘 #E7C2C0 浅粉 #A8D4CC 浅蓝绿 #D8DCAF 淡浅黄public static String[] matterColorArray = {"#0098B9", "#B7C82B", "#F3D4B2", "#E7C2C0", "#A8D4CC", "#D8DCAF"};public static String logicRight = ind.ui.logic.right";public static String leftFish = ind.ui.fishbone.leftHeaded";
}
实体类
package ind;import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;/*** @author : 谁喝了我的厚乳拿铁* @version : v1.0* @description :* @createTime : 2023/12/19 20:39*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class SubjectBranch {/*** 主题子分支内容* */private String branchContent;
}
效果图:
Demo导出代码
package ind;import com.maple.business.util.XmindConstant;
slf4j.Slf4j;
*;
style.IStyle;
style.IStyleSheet;
ind.ui.style.Styles;import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Random;/*** @author : 谁喝了我的厚乳拿铁* @version : v1.0* @description : Java后端生成XMind思维导图示例* @createTime : 2023/12/19 20:59*/
@Slf4j
public class LogicalXmind {public static void main(String[] args) {xmindExport();}/*** 生成XMind思维导图并导出为文件*/public static void xmindExport() {IWorkbookBuilder workbookBuilder = WorkbookBuilder();IWorkbook workbook = ateWorkbook();ISheet primarySheet = PrimarySheet();ITopic topTopic = RootTopic();topTopic.setTitleText("主要Xmind中心主题");topTopic.setStructureClass(XmindConstant.logicRight);IStyleSheet styleSheet = StyleSheet();IStyle style = styleSheet.StyleId());if (style == null) {style = ateStyle(IStyle.TOPIC);styleSheet.addStyle(style, IStyleSheet.NORMAL_STYLES);}// 设置主题的Stylestyle.setProperty(Styles.FillColor, "#00BC7B");style.setProperty(Styles.TextColor, "#FFFFFF");style.setProperty(Styles.FontWeight, Styles.FontWeight);style.setProperty(Styles.FontSize, "20pt");style.setProperty(Styles.LineWidth, "2pt");style.setProperty(Styles.LineColor, Styles.NONE);topTopic.Id());// 添加第二层主题分支测试数据 根据业务需求动态增加for (int i = 0; i < 5; i++) {buildTopic(workbook, topTopic, "第二层主题分支" + i);}try {// 生成文件到指定路径workbook.("C:\Users\25478\Desktop\ind")));System.out.println("Xmind思维导图生成成功!");} catch (Exception e) {System.out.println("Xmind思维导图生成失败!");}}/*** 构建主题分支** @param workbook XMind工作簿* @param parentTopic 父主题* @param topicName 主题名称*/private static void buildTopic(IWorkbook workbook, ITopic parentTopic, String topicName) {ITopic topic = ateTopic();topic.setTitleText(topicName);IStyleSheet styleSheet = StyleSheet();IStyle style = styleSheet.StyleId());if (style == null) {style = ateStyle(IStyle.TOPIC);styleSheet.addStyle(style, IStyleSheet.NORMAL_STYLES);}Random random = new Random();// 修改Style样式// 填充随机颜色style.setProperty(Styles.FillColor, XmindConstant.Int(9)]);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);topic.Id());for (int i = 0; i < 3; i++) {// 添加第三层主题分支测试数据ITopic subTopic = ateTopic();subTopic.setTitleText("第三层主题分支" + i);IStyleSheet subStyleSheet = StyleSheet();IStyle subStyle = subStyleSheet.StyleId());if (subStyle == null) {subStyle = ateStyle(IStyle.TOPIC);styleSheet.addStyle(subStyle, IStyleSheet.NORMAL_STYLES);}// 修改Style样式// 填充随机颜色subStyle.setProperty(Styles.FillColor, XmindConstant.eventColorArray[i]);subStyle.setProperty(Styles.TextColor, "#000229");subStyle.setProperty(Styles.FontWeight, Styles.FontWeight);subStyle.setProperty(Styles.FontSize, "16pt");subStyle.setProperty(Styles.LineWidth, "2pt");subStyle.setProperty(Styles.LineColor, Styles.DEF_TOPIC_LINE_COLOR);subTopic.Id());IManifest manifest = Manifest();try {// 加载小图标String filePath = "C:\Users\25478\Desktop\image\";switch (i + 1) {case 1:filePath = filePath + "flag.png";break;case 2:filePath = filePath + "complete.png";break;case 3:filePath = filePath + "alarm.png";break;default:break;}IFileEntry entry = ateAttachmentFromFilePath(filePath);IImage image = Image();image.setSource("xap:" + Path());image.setHeight(20);image.setWidth(20);image.setAlignment("left");} catch (Exception e) {log.info("读取图标失败!");}topic.add(subTopic);}parentTopic.add(topic);}
}
效果图:
Demo导出代码
package ind;import com.maple.business.util.XmindConstant;
slf4j.Slf4j;
*;
style.IStyle;
style.IStyleSheet;
ind.ui.style.Styles;import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;/*** @author : 谁喝了我的厚乳拿铁* @version : v1.0* @description : 导出Xmind文件* @createTime : 2023/12/19 20:28*/
@Slf4j
public class FishXmind {public static void main(String[] args) {xmindExport();}/*** 导出Xmind文件*/public static void xmindExport() {// 创建Xmind工作簿IWorkbookBuilder workbookBuilder = WorkbookBuilder();IWorkbook workbook = ateWorkbook();ISheet primarySheet = PrimarySheet();ITopic topTopic = RootTopic();topTopic.setTitleText("Xmind中心主题");topTopic.setStructureClass(XmindConstant.logicRight);// 设置中心主题样式IStyleSheet styleSheet = StyleSheet();IStyle style = styleSheet.StyleId());if (style == null) {style = ateStyle(IStyle.TOPIC);styleSheet.addStyle(style, IStyleSheet.NORMAL_STYLES);}style.setProperty(Styles.FillColor, "#00BC7B");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.NONE);topTopic.Id());// 添加备注内容IPlainNotesContent plainContent = (IPlainNotesContent) ateNotesContent(INotes.PLAIN);plainContent.setTextContent("这是备注内容!");INotes notes = Notes();notes.setContent(INotes.PLAIN, plainContent);// 添加五个测试主题分支,可以根据业务需求动态增加或减少数据for (int i = 0; i < 2; i++) {Random random = new Random();// 随机主题背景颜色String colorCode = XmindConstant.Int(6)];// 准备分支主题子内容List<SubjectBranch> branchList = new ArrayList<>();for (int k = 0; k < 7; k++) {branchList.add(SubjectBranch.builder().branchContent(i + "号主题分支子内容" + k).build());}buildTopic(workbook, topTopic, "主题分支" + i + "号", colorCode, branchList);}try {workbook.("C:\Users\25478\Desktop\ind")));} catch (Exception e) {System.out.println("Xmind思维导图生成失败!");}}/*** 构建主题** @param workbook 工作簿* @param topTopic 顶级主题* @param itemName 主题名称* @param colorCode 主题背景颜色* @param branchList 分支列表*/private static void buildTopic(IWorkbook workbook, ITopic topTopic, String itemName, String colorCode, List<SubjectBranch> branchList) {ITopic rootTopic = ateTopic();rootTopic.setStructureClass(XmindConstant.leftFish);rootTopic.setTitleText(itemName);IStyleSheet styleSheet = StyleSheet();IStyle style = styleSheet.StyleId());if (style == null) {style = ateStyle(IStyle.TOPIC);styleSheet.addStyle(style, IStyleSheet.NORMAL_STYLES);}Random random = new Random();style.setProperty(Styles.FillColor, XmindConstant.Int(9)]);style.setProperty(Styles.TextColor, "#FFFFFF");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);rootTopic.Id());for (SubjectBranch subjectBranch : branchList) {ITopic topicSon = ateTopic();topicSon.BranchContent());IStyleSheet sonStyleSheet = StyleSheet();IStyle sonStyle = sonStyleSheet.StyleId());if (sonStyle == null) {sonStyle = ateStyle(IStyle.TOPIC);styleSheet.addStyle(sonStyle, IStyleSheet.NORMAL_STYLES);}sonStyle.setProperty(Styles.FillColor, colorCode);sonStyle.setProperty(Styles.ShapeClass, Styles.TOPIC_SHAPE_ROUNDEDRECT);sonStyle.setProperty(Styles.TextColor, "#000229");sonStyle.setProperty(Styles.FontWeight, Styles.FontWeight);sonStyle.setProperty(Styles.FontSize, "16pt");sonStyle.setProperty(Styles.LineWidth, "2pt");sonStyle.setProperty(Styles.LineColor, Styles.DEF_TOPIC_LINE_COLOR);topicSon.Id());// 增加鱼骨图分支for (int i = 0; i < 2; i++) {ITopic topicItem = ateTopic();topicItem.setTitleText("分支" + i);IStyleSheet itemStyleSheet = StyleSheet();IStyle itemStyle = itemStyleSheet.StyleId());if (itemStyle == null) {itemStyle = ateStyle(IStyle.TOPIC);styleSheet.addStyle(itemStyle, IStyleSheet.NORMAL_STYLES);}itemStyle.setProperty(Styles.TextColor, "#000229");itemStyle.setProperty(Styles.FontWeight, Styles.FontWeight);itemStyle.setProperty(Styles.FontSize, "14pt");itemStyle.setProperty(Styles.LineWidth, "2pt");itemStyle.setProperty(Styles.LineColor, Styles.DEF_TOPIC_LINE_COLOR);topicItem.Id());topicSon.add(topicItem);}rootTopic.add(topicSon);}topTopic.add(rootTopic);}
}
个人了解到的Xmind官方Github上好像已经找不到Java生成思维导图的库了,全网找了很多资料参考发现maven依赖都是不全的,基础的还能找到,但是生成出来的效果差强人意,需要配合对应ui的jar包使用生成的思维导图才勉强能用。其中的样式API的使用建议参考:java导出xmind(java导出思维导图),样式上还有很多坑,有些样式根本实现不了,上面的效果折腾了好几天基本算是我的极限了,如果有写错和说错的地方可以评论留言补充。
本文发布于:2024-01-27 18:19:13,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/17063507541854.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |