python xmind 包使用 python xmind 包使用详解(其中解决导出的xmind文件 xmind8可以打开 xmind2020及之后版本打开报错问题)
weixin_40105587 人气:0想了解python xmind 包使用详解(其中解决导出的xmind文件 xmind8可以打开 xmind2020及之后版本打开报错问题)的相关内容吗,weixin_40105587在本文为您仔细讲解python xmind 包使用的相关知识和一些Code实例,欢迎阅读和指正,我们先划重点:python,xmind,包使用,python,xmind,包,Xmind2021激活,下面大家一起来学习吧。
pip install xmind 使用
場景 xmind8 可以打开 xmind2020 报错
main_fest.xml(xmind8 打开另存后 更改后缀为.zip 里边包含META-INF/manifest.xml)
** 将xmind文件修改后缀为zip ---->解压---->放入main_fest.xml —>压缩为zip —>修改后缀为xmind**
import xmind import os import re import shutil import zipfile from xmind.core.const import TOPIC_DETACHED from xmind.core.markerref import MarkerId from xmind.core.topic import TopicElement def extract(d_path, f_path, mode="zip"): """ zip解压缩乱码问题处理 :param d_path: :param f_path: :return: """ root = d_path if not os.path.exists(root): os.makedirs(root) if mode == 'zip': zf = zipfile.ZipFile(f_path,"r") elif mode == 'rar': zf = rarfile.RarFile(f_path,"r") for n in zf.infolist(): srcName = n.filename try: decodeName = srcName.encode("cp437").decode("utf-8") except: try: decodeName = srcName.encode("cp437").decode("gbk") except: decodeName = srcName spiltArr = decodeName.split("/") path = root for temp in spiltArr: path = os.path.join(path, temp) if decodeName.endswith("/"): if not os.path.exists(path): os.makedirs(path) else: if not os.path.exists(os.path.dirname(path)): os.makedirs(os.path.dirname(path)) f = open(path, "wb") f.write(zf.read(srcName)) f.close() zf.close() def aftertreatment(path): """ **場景 xmind8 可以打开 xmind2020 报错 main_fest.xml(xmind8 打开另存后 更改后缀为.zip 里边包含META-INF/manifest.xml) xmind 修改后缀为zip ----》解压---- 》放入main_fest.xml --- 》压缩zip 修改后缀为xmind** """ # 修改名字 retval = os.path.dirname(os.path.abspath(__file__)) folder = os.path.dirname(path) name = os.path.basename(path) unzip_folder = os.path.splitext(name)[0] zip_name = unzip_folder + ".zip" os.chdir(folder) os.rename(name, zip_name) os.chdir(retval) # 解压 unzip_path = os.path.join(folder, unzip_folder) if not os.path.exists(unzip_path): os.mkdir(unzip_path) inf_folder = os.path.join(unzip_path, "META-INF") if not os.path.exists(inf_folder): os.mkdir(inf_folder) extract(unzip_path, os.path.join(folder, zip_name)) shutil.copyfile("./META-INF/manifest.xml", os.path.join(inf_folder, "manifest.xml")) os.remove(os.path.join(folder, zip_name)) shutil.make_archive(unzip_path, 'zip', unzip_path) file_path = unzip_path + '.zip' print(file_path) os.chdir(os.path.dirname(file_path)) os.rename(os.path.basename(file_path), name) os.chdir(retval) shutil.rmtree(unzip_path) def gen_xmind_file(data, path): # load an existing file or create a new workbook if nothing is found workbook = xmind.load(path) # get the first sheet(a new workbook has a blank sheet by default) sheet1 = workbook.getPrimarySheet() # design_sheet1(sheet1) # create sheet2 gen_sheet2(workbook, sheet1, data) # now we save as test.xmind xmind.save(workbook, path=path) # 修复 aftertreatment(path) def recursive(children, node, workbook): if len(children) == 0: return for c in children: t = TopicElement(ownerWorkbook=workbook) t.setTitle(c["data"]["text"]) if len(c["children"]): recursive(c["children"], t, workbook) node.addSubTopic(t) def gen_sheet2(workbook, sheet2, data): # ***** second sheet ***** # create a new sheet and add to the workbook by default # sheet2 = workbook.createSheet() center = data["root"]["data"]["text"] sheet2.setTitle(center) # a sheet has a blank sheet by default root_topic2 = sheet2.getRootTopic() root_topic2.setTitle(center) topics = data["root"]["children"] for t in topics: # use other methods to create some sub topic element topic = TopicElement(ownerWorkbook=workbook) # set a topic hyperlink from this topic to the first sheet given by s1.getID() # topic1.setTopicHyperlink(sheet1.getID()) # print(t["data"]["text"], t["data"]["layout_mind_offset"]["x"], t["data"]["layout_mind_offset"]["y"]) topic.setTitle(t["data"]["text"]) # set its title # topic.setPosition(t["data"]["layout_mind_offset"]["x"], t["data"]["layout_mind_offset"]["y"]) recursive(t["children"], topic, workbook) root_topic2.addSubTopic(topic) if __name__ == '__main__': data = { "root": { "data": { "id": "c1jsg864saw0", "created": 1585126506413, "text": "新手指南", "color": "#000000", "font-weight": "bold", "font-size": 32 }, "children": [ { "data": { "id": "c1jsisau8rc0", "created": 1585126706961, "text": "节点操作", "expandState": "expand", "layout_mind_offset": { "x": 36, "y": 93 }, "background": "#ffc000", "font-size": 22, "color": "#000000", "font-weight": "bold", "layout_right_offset": { "x": -48, "y": -39 }, "icon": "youxian_01" }, "children": [ { "data": { "id": "c1jslg11qzk0", "created": 1585126915340, "text": "插入节点", "font-size": 18, "color": "#ffc000", "layout_right_offset": { "x": 96, "y": -95 }, "background": "#404040", "font-weight": "bold", "icon": "qizhi_01" }, "children": [ { "data": { "id": "c1jsn3rlhbc0", "created": 1585127045376, "text": "下级:快捷键【Tab】 ", "font-size": 18, "color": "#ffc000", "layout_right_offset": { "x": 27, "y": -12 }, "background": "transparent" }, "children": [ ] }, { "data": { "id": "c1jso0dk2cg0", "created": 1585127116361, "text": "同级:快捷键【Enter】 ", "font-size": 18, "color": "#ffc000", "layout_right_offset": { "x": 27, "y": 0 }, "background": "transparent" }, "children": [ ] }, { "data": { "id": "c1jsp3q5g4g0", "created": 1585127202017, "text": "上级:快捷键【Shift + Tab】", "font-size": 18, "color": "#ffc000", "layout_right_offset": { "x": 30, "y": 13 }, "background": "transparent" }, "children": [ ] } ] }, { "data": { "id": "c1jslivsluw0", "created": 1585126921553, "text": "移动节点", "font-size": 18, "color": "#fabf8f", "expandState": "expand", "layout_right_offset": { "x": 97, "y": -36 }, "background": "#404040", "font-weight": "bold" }, "children": [ { "data": { "id": "c1jsqis0d540", "created": 1585127313145, "text": "上移:快捷键【Alt + ↑ 】", "background": "transparent", "font-size": 18, "color": "#fbd4b4", "layout_right_offset": { "x": 32, "y": -12 } }, "children": [ ] }, { "data": { "id": "c1jsqjz54o80", "created": 1585127315753, "text": "下移:快捷键【Alt + ↓ 】", "font-size": 18, "color": "#fbd4b4", "layout_right_offset": { "x": 31, "y": 0 }, "background": "transparent" }, "children": [ ] }, { "data": { "id": "c1jsqkfoncw0", "created": 1585127316753, "text": "收起/展开:快捷键【 / 】", "font-size": 18, "color": "#fbd4b4", "layout_right_offset": { "x": 34, "y": 13 }, "background": "transparent" }, "children": [ ] } ] }, { "data": { "id": "c1jt8kpu4x40", "created": 1585128727922, "text": "文字换行 ", "expandState": "expand", "font-size": 18, "layout_right_offset": { "x": 103, "y": 25 }, "color": "#ffc000", "background": "#404040", "font-weight": "bold", "icon": "star_02" }, "children": [ { "data": { "id": "c1jt94rf40w0", "created": 1585128771553, "text": "快捷键【Shift + Enter 】", "font-size": 18, "layout_right_offset": { "x": 13, "y": -1 }, "color": "#ffc000" }, "children": [ ] } ] } ] }, { "data": { "id": "c1jswayqnqo0", "created": 1585127766323, "text": "画布操作", "layout_mind_offset": { "x": -737, "y": -222 }, "font-size": 22, "background": "#e5dfec", "color": "#000000", "font-weight": "bold", "layout_right_offset": { "x": 29, "y": 83 } }, "children": [ { "data": { "id": "c1jswgwssps0", "created": 1585127779266, "text": "放大画布:Ctrl +“+”", "font-size": 18, "color": "#ccc0d9", "layout_right_offset": { "x": 68, "y": -38 }, "layout_left_offset": { "x": -36, "y": -47 } }, "children": [ ] }, { "data": { "id": "c1jswhh0nmo0", "created": 1585127780488, "text": "缩小画布:Ctrl +“-”", "font-size": 18, "color": "#ccc0d9", "layout_right_offset": { "x": 68, "y": -22 }, "layout_left_offset": { "x": -39, "y": -28 } }, "children": [ ] }, { "data": { "id": "c1jswivop5k0", "created": 1585127783552, "text": "拖动画布:按住鼠标右键", "font-size": 18, "color": "#ccc0d9", "layout_right_offset": { "x": 69, "y": 2 }, "layout_left_offset": { "x": -39, "y": -3 } }, "children": [ ] }, { "data": { "id": "c1jswjvpi9k0", "created": 1585127785730, "text": "定位节点中心:双击鼠标左键", "font-size": 18, "color": "#ccc0d9", "layout_right_offset": { "x": 71, "y": 14 }, "layout_left_offset": { "x": -41, "y": 10 } }, "children": [ ] } ] }, { "data": { "id": "c1jsleo62hk0", "created": 1585126912385, "text": "导出格式", "layout_mind_offset": { "x": -46, "y": 108 }, "expandState": "expand", "font-size": 22, "background": "#c2d69b", "color": "#262626", "font-weight": "bold", "layout_right_offset": { "x": 5, "y": 153 } }, "children": [ { "data": { "id": "c1knktgogog0", "created": 1585214320627, "text": "图片", "font-size": 18, "color": "#000000", "expandState": "expand", "layout_right_offset": { "x": 58, "y": -20 }, "background": "#c2d69b", "layout_left_offset": { "x": -48, "y": -28 } }, "children": [ { "data": { "id": "c1jsqis0d540", "created": 1585127313145, "text": "JPG、PNG、SVG", "background": "transparent", "font-size": 18, "color": "#c2d69b", "layout_right_offset": { "x": 1, "y": 1 } }, "children": [ ] } ] }, { "data": { "id": "c1knl8lj2m00", "created": 1585214353572, "text": "文件", "font-size": 18, "color": "#000000", "expandState": "expand", "layout_right_offset": { "x": 61, "y": 0 }, "background": "#c2d69b", "layout_left_offset": { "x": -47, "y": 2 } }, "children": [ { "data": { "id": "c1jsqis0d540", "created": 1585127313145, "text": "PDF、json、TXT、markdown", "background": "transparent", "font-size": 18, "color": "#c2d69b", "layout_right_offset": { "x": 0, "y": 1 } }, "children": [ ] } ] } ] } ] }, "subtree": [ ], "template": "default", "theme": "classic-compact", "relLine": [ ], "style": { }, "themeBgColor": "", "background": "", "version": "1.5.2", "ppts": [ ] } path = '/home/python/Desktop/proejct_xx/_media/temp_file/test.xmind' gen_xmind_file(data, path=path)
ps:下面看下Xmind2021安装激活破解
1. 下载Xmind,并安装。
官网: https://www.xmind.cn/download/
直接下载安装即可
2. 激活破解
2.1右击软件,打开文件所在的位置(默认路径:C:\Program Files\XMind)
2.2将app.asar
文件复制到resources
路径下,替换目标中的文件
链接: http://pan.baidu.com/s/1uVjWjsVdB8DraiFHKIIOXQ
提取码: nt8x
下载
https://www.qb5200.com/softs/774812.html
3. 完成
尊重原创,开发不易,若资金允许,请点击链接购买正版。
加载全部内容