вторник, 14 февраля 2012 г.

Многострочный текст в SVG

Понадобился. И оказалось, что SVG не умеет переносить текст! К счастью, в моём случае SVG создаётся при помощи python, а там не очень сложно написать функцию, разбивающую текст на строки длиной не больше заданного количества символов (главное, чтобы резала по пробелам):
def TextToLines(txt, maxLen):

result = []

lines0 = txt.split("\n")
for line in lines0:
chunks = line.split(" ")
newline, l = "", 0
for chunk in chunks:
if newline != "":
l = 1
else:
l = 0
if len(newline.decode("UTF-8")) + l + len(chunk.decode("UTF-8")) > maxLen:
result.append(newline)
newline = ""
if newline != "":
newline += " "
newline += chunk
if newline != "":
result.append(newline)

return result

Соответственно, эта процедура применяется так:
textLines = TextToLines(мойТекст, 66)
innerText, y = "", 15
for line in textLines:
innerText += """<text x="10" y="%(y)d" font-size="10pt" fill="black">%(text)s</text>""" % {"text":line, "y":y}
y += 15

Ну и дальше результат из innerText вставляем в нужное место формирующегося документа.

Не очень изящно, скажем прямо. Может, со временем найдется решение получше.

Комментариев нет:

Отправить комментарий