欢迎光临
我们一直在努力

不想为 Xmind 导出 Markdown 付费?我用 AI 花 2 小时撸了个免费工具

最近在分享Rust实战课程,我在整理之前学习基础知识大纲时遇到了一个让人抓狂的问题:Xmind 导出 Markdown 竟然要会员!而且导出图片还得手动展开每个节点… 于是我决定自己动手,用 AI 辅助开发了这个完全免费的 Xmind 转 Markdown 工具。

痛点:Xmind 导出功能的限制

作为画图小能手来说,我经常用 Xmind 整理知识体系和记录看书的知识图谱。但在分享时遇到了几个问题:

  • 导出 Markdown 需要会员 💰 – 这个功能居然要付费
  • 导出图片体验差 📸 – 必须手动展开所有节点才能完整导出
  • 图片资源丢失 🖼️ – 导出的 Markdown 中图片引用是占位符,需要手动补充
  • 这些限制让我在准备 Rust 实战课程时非常不便。既然如此,不如自己动手做一个!

    解决方案:开源免费的 Xmind 转换工具

    核心功能

    ✅ 完全免费 – 无需会员,本地运行 ✅ 一键转换 – 拖拽上传 .xmind 文件即可 ✅ 可视化预览 – 水平思维导图布局,自动绘制连接线 ✅ 智能导出 – 支持三种导出方式:

    • 📋 复制 Markdown(图片内嵌 Data URL)
    • 📦 下载 ZIP(Markdown + 独立图片文件夹)
    • 🖼️ 导出高清 PNG(4倍分辨率,文字清晰)

    技术栈

    {
    "前端框架": "React + Vite",
    "样式": "Tailwind CSS",
    "核心库": [
    "jszip – 解析 .xmind 文件",
    "html-to-image – PNG 导出",
    "lucide-react – 图标"
    ]
    }

    实现亮点

    1. 解析 Xmind 文件

    Xmind 文件本质是一个 ZIP 压缩包,包含 content.json 和图片资源:

    export const parseXmindFile = async (file) => {
    const zip = await JSZip.loadAsync(file);
    const contentFile = zip.file('content.json');
    const content = JSON.parse(await contentFile.async('text'));

    // 递归提取节点、图片、笔记
    return await extractNodes(content, zip);
    };

    关键点:

    • 将图片转换为 Base64 Data URL,方便内存存储
    • 递归遍历节点树,提取标题、笔记、图片

    2. 两种 Markdown 导出模式

    模式一:内嵌图片(Copy MD)

    # Rust 所有权系统
    ![所有权规则](data:image/png;base64,iVBORw0KGgo…)
    > 每个值都有一个所有者

    优点:一键复制,粘贴即用 适用场景:快速分享到支持 Data URL 的编辑器(VS Code、Typora)

    模式二:独立图片(Download ZIP)

    # Rust 所有权系统
    ![所有权规则](images/node_123.png)
    > 每个值都有一个所有者

    优点:文件小,通用性强 适用场景:传统 Markdown 编辑器,博客发布

    3. 高清 PNG 导出

    这是最有技术含量的部分!如何导出高清晰度的思维导图?

    const handleDownloadImage = async () => {
    // 1. 应用 2倍缩放变换
    treeRef.current.style.transform = 'scale(2)';

    // 2. 临时放大图片尺寸限制
    images.forEach(img => {
    img.style.maxWidth = '400px';
    img.style.maxHeight = '400px';
    });

    // 3. 使用 2倍像素比率捕获
    const dataUrl = await toPng(treeRef.current, {
    pixelRatio: 2 // 2x scale * 2x pixelRatio = 4x 分辨率!
    });
    };

    效果:导出的 PNG 放大后文字依然清晰,图片不模糊!

    开发过程中的坑

    坑 1:图片导出只有背景,没有内容

    原因:克隆 DOM 元素会丢失 Tailwind CSS 的计算样式

    解决:直接捕获原始元素,临时应用导出样式后恢复

    // ❌ 错误做法:克隆元素
    const clone = element.cloneNode(true);
    await toPng(clone); // 样式丢失!
    // ✅ 正确做法:直接捕获原始元素
    const originalStyle = element.style.padding;
    element.style.padding = '40px';
    await toPng(element);
    element.style.padding = originalStyle; // 恢复

    坑 2:导出图片文字模糊

    原因:单纯提高 pixelRatio 不够,原始字体太小

    解决:使用 CSS transform: scale(2) 放大整个元素,再用高像素比率捕获

    坑 3:图片清晰了,文字又看不见了

    原因:移除图片尺寸限制后,图片过大挤压文字

    解决:平衡策略 – 将图片限制从 200px 提升到 400px,既保证清晰度又不破坏布局

    使用体验

    体验地址,项目截图

    https://xmind-to-md.dcrmb.com/ 在这里插入图片描述 在这里插入图片描述

    操作流程

  • 启动应用

    git clone <repo>
    cd xmind-to-md
    npm install
    npm run dev

  • 上传文件

    • 拖拽 .xmind 文件到上传区域
    • 或点击选择文件
  • 查看预览

    • 左侧:可视化思维导图
    • 右侧:Markdown 源码
  • 导出

    • 点击 “Copy MD” – 复制带图片的 Markdown
    • 点击 “Download .md” – 下载 ZIP 包
    • 点击 “Export PNG” – 导出高清图片
  • 实际效果

    我用这个工具整理了 Rust 课程的所有章节大纲:

    • ✅ 100+ 个节点,秒级转换
    • ✅ 包含代码示例图片,完美导出
    • ✅ 直接粘贴到掘金/语雀,图片正常显示
    • ✅ 导出的 PNG 可以直接用于 PPT

    AI 辅助开发的思考

    这个项目从 0 到 1,我只花了约 2 小时,其中:

    • 30% 时间用于需求梳理和技术选型
    • 50% 时间由 AI 生成代码框架
    • 20% 时间用于调试和优化细节

    关键经验:

  • 明确需求 – 告诉 AI 具体的痛点和期望功能
  • 迭代优化 – 遇到问题及时反馈,让 AI 调整方案
  • 理解原理 – AI 生成的代码要理解其原理,才能有效调试
  • 总结

    这个工具解决了我的实际需求,也希望能帮到有同样困扰的朋友。代码已开源,欢迎使用和贡献!

    项目特点:

    • 🎯 解决实际痛点
    • 🚀 技术栈现代化
    • 💡 AI 辅助开发
    • 🎨 用户体验优先

    如果你也在用 Xmind 整理知识体系,不妨试试这个工具!


    开源地址

    GitHub: [https://github.com/MaAmos/rust-practical-course/tree/main/xmind-to-md]

    相关文章推荐

    • Rust实战课程专栏

    如果这篇文章对你有帮助,欢迎点赞👍、收藏⭐、关注🔔!

    有任何问题或建议,欢迎在评论区交流~

    赞(0)
    未经允许不得转载:171主机测评 » 不想为 Xmind 导出 Markdown 付费?我用 AI 花 2 小时撸了个免费工具
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址