我正在使用canvas.stringWidth来计算reportlab中的句子长度。但是当我旋转大型语句时,它会将文本的宽度计算为直的,而不是旋转的。代码段是
text_len = canvas.stringWidth("Hello" , "Helvetica", 10)
canvas.rotate(rotation)
P.drawOn(canvas, 0, 0)
它适用于直文,但对于旋转文本,它不起作用。
答案 0 :(得分:1)
您的代码存在的问题是canvas.stringWidth(self, text, fontName, fontSize)
返回给定字符串的宽度,而不包装。因此,旋转画布不会减小宽度,因为字符串的长度仍然相同。
要显示此信息,请查看以下示例:
def rotated_text_length(c, string):
text_len = c.stringWidth(string, "Helvetica", 10)
print "Normal text: ", text_len
c.rotate(90)
text_len = c.stringWidth(string, "Helvetica", 10)
print "Rotated text: ", text_len
c = canvas.Canvas("hello.pdf")
rotated_text_length(c, "This is a very silly example"*100)
rotated_text_length(c, "This is a very silly example"*50)
如果字符串Width将换行,我们将为两个旋转句子获得相同的长度,但输出如下:
Normal text: 11891.0
Rotated text: 11891.0
Normal text: 5945.5
Rotated text: 5945.5
表示返回的宽度仅取决于字符串长度(当然还有字体)。因此,根据Reportlab参考文献,没有应用包装是有意义的:
def stringWidth(self, text, fontName=None, fontSize=None):
获取给定字体和大小的字符串宽度