ReportLab:如何对齐textobject?

时间:2011-02-11 15:36:55

标签: python pdf pdf-generation reportlab

我有以下ReportLab代码:

    t = c.beginText()
    t.setFont('Arial', 25)
    t.setCharSpace(3)
    t.setTextOrigin(159,782)
    t.textLine("Some string")
    c.drawText(t)

我想要达到的目标是:在每个字符(setCharSpace)之间留出3个像素的空格,并将结果字符串对齐到页面中某个区域的中心

就我发现而言,textobject是唯一可以在字符之间指定空格的方法。

有什么想法吗?

3 个答案:

答案 0 :(得分:16)

基本上你只需要计算字符串的宽度,你想要居中的区域的宽度,你就完成了。

使用Canvas.stringWidth确定给定字符串(字体和大小)占用的宽度。它没有考虑char间距,但我做了一些测试,表明可以修复它。

def stringWidth2(string, font, size, charspace):
    width = stringWidth(string, font, size)
    width += (len(string) - 1) * charspace
    return width

所有这一切都是使用原始stringWidth来计算字符串的宽度,并在字符之间添加额外的空格。现在我对排版没有经验,所以我不确定字体功能是否像字距调整一样可能会使它无法使用。

如果您像这样调整x原点,您的字符串将居中。

(area_width - string_width) / 2

我使用http://pastebin.com/PQxzi1Kf的小测试脚本(代码不是美,但它有效)。

答案 1 :(得分:1)

Reportlab有一个方法,drawCentredString(以英语拼写为中心)。这将使文本沿给定的x坐标居中。

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

答案 2 :(得分:0)