ReportLab:如何对齐文本对象?

Posted

技术标签:

【中文标题】ReportLab:如何对齐文本对象?【英文标题】:ReportLab: How to align a textobject? 【发布时间】:2011-06-25 15:35:05 【问题描述】:

我有以下 ReportLab 代码:

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

我想要实现的是:每个字符(setCharSpace)之间有一个 3(像素?)的空间,并将生成的字符串对齐在页面中某个区域的中心

据我所知,文本对象是唯一可以在字符之间指定空格的方法。

有什么想法吗?

【问题讨论】:

【参考方案1】:

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

使用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(代码不是美女,但可以)。

【讨论】:

我认为 stringWidth 自 2011 年以来已更新,现在包含字符间距。【参考方案2】:

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

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

【讨论】:

【参考方案3】:

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

【讨论】:

以上是关于ReportLab:如何对齐文本对象?的主要内容,如果未能解决你的问题,请参考以下文章

Jasper Reports:证明分布式对齐文本字段/静态文本的合理性

Python Reportlab PDF - 在页面上居中文本

如何更正 TypeError:Unicode 对象必须在使用 ReportLab 散列之前进行编码

如何在 TextView 中将文本与其复合可绘制对象对齐?

Reportlab - 如果段落对于一行来说太长,如何引入换行符

我可以在 Python 中使用 ReportLab 获取格式化的文本大小吗?