ReportLab:如何对齐文本对象?

21 投票
3 回答
15970 浏览
提问于 2025-04-16 11:39

我有以下的ReportLab代码:

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

我想要实现的是:在每个字符之间留出3个像素的间距(setCharSpace),并把生成的字符串居中对齐在页面的某个区域。

根据我找到的信息,使用文本对象是我能指定字符间距的唯一方法。

有什么想法吗?

3 个回答

-1

试试这个:<para alignment="center"> 来源于:http://two.pairlist.net/pipermail/reportlab-users/2006-June/005092.html

6

Reportlab 有一个方法叫做 drawCentredString(这个“centred”是英国拼写)。这个方法可以让你的文本在指定的 x 坐标上居中显示。

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

19

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

可以使用 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(代码虽然不太优雅,但能正常工作)。

撰写回答