使用svg2rlg将SVG文件导入到reportLab PDF中时,似乎忽略了剪辑路径。
如果SVG文件具有指定了剪辑路径的图形对象(这通常用于绘图延伸到轴外部的matplotlib图形),则通过svg2rlg导入到reportLab PDF时,SVG文件将无法正确呈现。
SVG文件在AI或资源管理器中看起来是正确的,所以问题似乎出在svg2rlg上
svglib如何正确处理matplotlib创建的SVG文件?
发布于 2019-11-21 00:44:38
问题似乎出在svglib解析SVG XML树的时候,假设剪辑路径在使用之前会出现在树中,这与matplotlib SVG导出不同(剪辑路径位于XML树的底部)。
我找到的解决这个问题的最简单的方法(似乎是有效的)就是在renderSvg中运行两次renderNode循环:第一次是在一个丢弃的组上,第二次是在实际的组实例上。
第一遍将构建组实例self.definitions字典,然后它将被完全填充并在第二遍中可用。
def renderSvg(self, node, outermost=False):
_saved_preserve_space = self.shape_converter.preserve_space
self.shape_converter.preserve_space = node.getAttribute("{%s}space" % XML_NS) == 'preserve'
group_throwaway = Group()
for child in node.getchildren():
self.renderNode(child, group_throwaway)
group = Group()
for child in node.getchildren():
self.renderNode(child, group)https://stackoverflow.com/questions/58957790
复制相似问题