0

如何反转(旋转 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))

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

旋转文本

这是在字符之间使用人为的空间间隙,以使其不那么可读。

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

4

2 回答 2

2

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

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

于 2016-09-24T08:09:53.167 回答
1

我将其发布为自我回答,只是为了使格式更清晰。来自@paul-lebeau 的两个有用提示很高兴地承认。

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

  1. 元素的rotate属性<text>适用于要旋转单个字符的情况。如果你想旋转整个文本对象,那么你应该使用转换混合
  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)
于 2016-09-26T21:41:46.550 回答