脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服务器之家 - 脚本之家 - Python - python xmind 包使用详解(其中解决导出的xmind文件 xmind8可以打开 xmind2020及之后版本打开报错问题)

python xmind 包使用详解(其中解决导出的xmind文件 xmind8可以打开 xmind2020及之后版本打开报错问题)

2022-01-28 22:37weixin_40105587 Python

xmind8 可以打开xmind2020 报错,如何解决这个问题呢?下面小编给大家带来了python xmind 包使用(其中解决导出的xmind文件 xmind8可以打开 xmind2020及之后版本打开报错问题),感兴趣的朋友一起看看吧

pip install xmind 使用

python xmind 包使用详解(其中解决导出的xmind文件 xmind8可以打开 xmind2020及之后版本打开报错问题)

鼍啊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)

到此这篇关于python xmind 包使用 (其中解决导出的xmind文件 xmind8可以打开 xmind2020及之后版本打开报错问题)的文章就介绍到这了,更多相关python xmind 包使用内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/weixin_40105587/article/details/117557740

延伸 · 阅读

精彩推荐