【发布时间】:2014-05-06 06:10:55
【问题描述】:
我有一个 svg 文件,我想在这个文件中插入其他 svg 对象。
import svgwrite
dwg = svgwrite.Drawing('model.svg')
square = dwg.add(dwg.rect(20,20),(80,80), fill='blue'))
dwg.save()
它会返回一个具有此形状的新文件,而忽略我以前的文件。 这个怎么写?
谢谢
【问题讨论】:
我有一个 svg 文件,我想在这个文件中插入其他 svg 对象。
import svgwrite
dwg = svgwrite.Drawing('model.svg')
square = dwg.add(dwg.rect(20,20),(80,80), fill='blue'))
dwg.save()
它会返回一个具有此形状的新文件,而忽略我以前的文件。 这个怎么写?
谢谢
【问题讨论】:
我找到了一个可以做到这一点的模块
import svgutils.transform as st
template = st.fromfile('template.svg')
second_svg = st.fromfile('second.svg')
template.append(second_svg)
template.save('merged.svg')
我希望这对你也有用。
【讨论】:
svgwrite 库不支持这一点——它的目的是创建新的 SVG 文件,而不是与现有文件一起使用。查看source for the Drawing class,您可以看到当您保存绘图时,它会打开文件进行写入并截断;结果,该文件中之前的所有内容都会丢失:
def save(self):
""" Write the XML string to **filename**. """
fileobj = io.open(self.filename, mode='w', encoding='utf-8')
self.write(fileobj)
fileobj.close()
【讨论】: