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 散列之前进行编码