如何确定reportlab

时间:2016-02-23 09:16:56

标签: python reportlab

我正在使用canvas.stringWidth来计算reportlab中的句子长度。但是当我旋转大型语句时,它会将文本的宽度计算为直的,而不是旋转的。代码段是

text_len = canvas.stringWidth("Hello" , "Helvetica", 10)
canvas.rotate(rotation)
P.drawOn(canvas, 0, 0)

它适用于直文,但对于旋转文本,它不起作用。

1 个答案:

答案 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):

     

获取给定字体和大小的字符串宽度