ReportLab: как выровнять текстовый объект?
у меня есть следующий код ReportLab:
t = c.beginText()
t.setFont('Arial', 25)
t.setCharSpace(3)
t.setTextOrigin(159,782)
t.textLine("Some string")
c.drawText(t)
чего я хочу достичь: иметь 3 (пиксели?) пробел между каждым символом (setCharSpace
), и выровнять полученную строку в центре определенной области на странице
textobject-единственный способ, насколько я нашел, указать пространство между символами.
какие идеи?
3 ответов
В основном вам нужно только рассчитать ширину строки, ширину области, в которой вы хотите ее центрировать, и все готово.
использовать холст.stringWidth чтобы определить ширину, которую занимает данная строка (с шрифтом и размером). Он не учитывает интервал между символами, но я сделал несколько тестов, которые предполагают, что это можно исправить.
def stringWidth2(string, font, size, charspace):
width = stringWidth(string, font, size)
width += (len(string) - 1) * charspace
return width
все, что он делает это с помощью оригинальной stringWidth
для вычисления ширины строки и добавления дополнительных пробелы между символами. Теперь у меня нет опыта работы с типографикой, поэтому я не уверен, что функции шрифта, такие как Кернинг, могут сделать это непригодным.
Если вы отрегулируете свой X origin таким образом, ваша строка будет центрирована.
(area_width - string_width) / 2
небольшой тестовый скрипт, который я использовал http://pastebin.com/PQxzi1Kf (код не красота, но он работает).
Reportlab имеет метод,drawCentredString
(по центру для британской орфографии). Это будет центрировать ваш текст по заданной координате X.
попробуй: <para alignment="center">
From:http://two.pairlist.net/pipermail/reportlab-users/2006-June/005092.html