ReportLab:如何对齐textobject?

2024-09-28 22:59:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下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是唯一可以指定字符间距的方法。

有什么想法吗?


Tags: 代码stringsome页面像素字符空格reportlab
3条回答

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

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

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

使用Canvas.stringWidth确定给定字符串(具有字体和大小)所占的宽度。它没有考虑字符间距,但我做了一些测试,建议人们可以解决这个问题。

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(代码不是一种美,但它起作用)。

相关问题 更多 >