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

时间:2016-09-24 04:09:48

标签: python svg svgwrite

如何将文本对象反转(旋转180度)以使文本适当地变换?

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

假设我使用以下代码:

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

上面的代码生成如下文本:

plain text

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

但是,这会产生下面非常难看的版本:

rotated text

这是在角色之间使用人为空间间隙使其稍微不易读。

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

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

我发布这是一个自我回答,只是为了使格式更清晰。来自@ paul-lebeau的两个有用的提示愉快地承认。

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

  1. rotate元素的<text>属性适用于要旋转单个字符的情况。如果要旋转整个文本对象,则应使用transform mixin代替。
  2. 如果您需要将转换后的文本相对于某个中心(默认当前用户坐标系除另一个中心)居中,请添加两个附加参数xctr,yctr。这与要求单个center参数为(2元组)的doc不同。
  3. 正确的代码是:

    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)