如何使用适当的字距调整来反转 SVG 文本?

How to Invert SVG text with appropriate kerning?

如何反转(旋转 180 度)文本对象,以便适当地调整文本?

我的示例使用 Python 和 svgwrite 包,但我的问题似乎与任何 SVG 有关。

假设我使用以下代码:

dwg = svgwrite.Drawing()
dwg.add(dwg.text(fullName, (int(width/2.),gnameHeight), 
                    font_size=gnameFontSize, text_anchor="middle"))

以上代码生成的文本如下所示:

dwg.text() 对象接受应用于文本字符串中所有字符的 rotate 参数,因此我首先使用以下代码反转字符串:

pcRotate = [180]
ngap = 1

revFullName = fullName
rcl = []
for c in revFullName:
    rcl.append(c)
    for i in range(ngap):
        rcl.append(' ')

rcl.reverse()
revFullName = ''.join(rcl)

dwg.add(dwg.text(revFullName, (int(width/2.),pcnameHeight), 
                font_size=gnameFontSize, text_anchor="middle", rotate=pcRotate))

但是,这会产生下面非常丑陋的版本:

这是在字符之间使用人为的 space 间隙,以使其稍微不易读。

在这种颠倒的情况下,利用标准文本使用的任何字距调整的最佳方法是什么?

<text> 元素的 rotate 属性适用于需要旋转单个字符的情况。如果你想旋转整个文本对象,那么你应该使用 transform 代替。

http://pythonhosted.org/svgwrite/classes/mixins.html#transform-mixin

我将此作为自我回答发布,只是为了让格式更加清晰。来自@paul-lebeau 的两个有用提示愉快地得到了承认。

虽然 svgwrite 包看起来很可靠,但它的文档有点单薄。我希望它说的两件事:

  1. <text> 元素的 rotate 属性适用于需要旋转单个字符的情况。如果你想旋转整个文本对象,那么你应该使用 transform mixin 代替。
  2. 如果您需要将转换后的文本相对于某个中心(默认的当前用户坐标系除外)居中,请添加两个附加参数xctr,yctr。这与调用单个 center 参数(2 元组)的文档不同。

正确的代码是:

pcRotate = 'rotate(180,%s,%s)' % (int(width/2.),pcnameHeight)
textGroup = svgwrite.container.Group(transform=pcRotate)

textGroup.add(dwg.text(fullName, (int(width/2.),pcnameHeight), 
                font_size=gnameFontSize, text_anchor="middle"))
dwg.add(textGroup)