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.

http://www.reportlab.com/apis/reportlab/2.4/pdfgen.html


попробуй: <para alignment="center"> From:http://two.pairlist.net/pipermail/reportlab-users/2006-June/005092.html