如何将文本对象反转(旋转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))
但是,这会产生下面非常难看的版本:
这是在角色之间使用人为空间间隙使其稍微不易读。
在这种颠倒的情况下,标准文本正在使用的任何字距调整的最佳方法是什么?
答案 0 :(得分:2)
rotate
元素的<text>
属性适用于要旋转单个字符的情况。如果要旋转整个文本对象,则应使用transform
代替。
http://pythonhosted.org/svgwrite/classes/mixins.html#transform-mixin
答案 1 :(得分:0)
我发布这是一个自我回答,只是为了使格式更清晰。来自@ paul-lebeau的两个有用的提示愉快地承认。
虽然svgwrite
包看起来很稳定,但它的文档有点薄。我希望它说的两件事:
rotate
元素的<text>
属性适用于要旋转单个字符的情况。如果要旋转整个文本对象,则应使用transform mixin代替。xctr,yctr
。这与要求单个center
参数为(2元组)的doc不同。正确的代码是:
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)