当前位置: 首页 > 工具软件 > Inkscape > 使用案例 >

Inkscape批量将inkscape:label(标签)复制给id

韶浩博
2023-12-01

最近在做毕设,遇到一个需要重复复制粘贴的东西,顺手写了一个python脚本。目标是,将Inkscape绘制SVG文件的<g><path><rect><text> 标签的属性inkscape:label批量复制给id

github地址https://github.com/Robert30-xl/SVG-setAttribute-for-Inkscape

SVG-setAttribute-for-Inkscape是一个python脚本。使用Inkscape绘制SVG文件,在Inkscape的”图层和对象“可以很方便地为属性inkscape:label赋值,但是id属性需要再次复制粘贴,这个无聊并且重复的工作交给python吧!

import xml.dom.minidom 

dom = xml.dom.minidom.parse('你的SVG文件.svg')  #打开svg文档(这里将SVG和脚本放到一个目录)
root = dom.documentElement      #得到文档元素对象
gList = root.getElementsByTagName('g')    #得到所有g标签
pathList = root.getElementsByTagName('path')    #得到所有path标签
rectList = root.getElementsByTagName('rect')    #得到所有rect标签
textList = root.getElementsByTagName('text')    #得到所有text标签

# 设置g
for index in range(len(gList)):
    label = gList[index].getAttribute('inkscape:label')
    if gList[index].hasAttribute('inkscape:label'):
        # id = gList[index].getAttribute('id')
        gList[index].setAttribute('id',label[1:])

# 设置path
for index in range(len(pathList)):
    label = pathList[index].getAttribute('inkscape:label')
    if pathList[index].hasAttribute('inkscape:label'):
        # id = pathList[index].getAttribute('id')
        pathList[index].setAttribute('id',label[1:])

# 设置rect
for index in range(len(rectList)):
    label = rectList[index].getAttribute('inkscape:label')
    if rectList[index].hasAttribute('inkscape:label'):
        # id = rectList[index].getAttribute('id')
        rectList[index].setAttribute('id',label[1:])

# 设置text
for index in range(len(textList)):
    label = textList[index].getAttribute('inkscape:label')
    if textList[index].hasAttribute('inkscape:label'):
        # id = textList[index].getAttribute('id')
        textList[index].setAttribute('id',label[1:])

'''
将文档进行重写,注意文档中内容含有中文的情况
open()函数默认是文本模式打开,也就是ANSII编码
在简体中文系统下,ANSII编码代表 GB2312 编码
'''
with open('HPC发端模型.svg', 'w', encoding='utf-8') as f:
    # 缩进 - 换行 - 编码
    dom.writexml(f, addindent='', encoding='utf-8') 
 类似资料: