【发布时间】:2017-12-09 01:50:44
【问题描述】:
我正在使用 python 库 svgwrite 来生成 svg 文件。我必须将两行文本准确地放在矩形的中心。文本应左对齐。矩形的宽度和高度是已知的。我在一个组容器中插入了两条文本行,并通过将它们的“text_anchor”属性设置为“start”并将x位置设置为0来对齐它们。代码如下:
svg = svgwrite.Drawing(size=(210*mm, 297*mm), viewBox=('0 0 210 297'))
rect_width = 80
rect_height = 25
rect = svg.rect(insert=(0, 0), size=(rect_width, rect_height), fill='none', stroke='red', stroke_width=1)
font_size = 6 #in mm
style = "font-family:Arial; font-size:%i" % (font_size)
text_1 = svg.text('Line 1', insert=(0,0), style=style, text_anchor='start', dominant_baseline='hanging')
text_2 = svg.text('Longer Line 2', insert=(0, font_size), style=style, text_anchor='start', dominant_baseline='hanging')
text_group = svg.g()
text_group.add(text_1)
text_group.add(text_2)
x_pos = rect_width/2
y_pos = rect_height/2-font_size
text_group.translate(x_pos, y_pos)
svg.add(rect)
svg.add(text_group)
输出如下所示: See generated SVG
'text_group' 的垂直位置似乎没问题(在中心)。但是水平位置应该更靠左。如果我能得到'text_group'的宽度,并修改'x_pos',这是可以实现的:
x_pos = rect_width/2 - text_group_width/2
我找不到任何方法来获取 svgwrite 中文本组的宽度。有什么方法可以得到宽度,或者这个问题是否有其他解决方案?
【问题讨论】:
-
您需要使用渲染引擎来布局 SVG。 svgwrite 只是一个 XML 编写器,它在标记级别运行。
-
对与 Python 兼容的 SVG 渲染引擎有什么建议吗?
-
谢谢。我会调查的。