我使用canvas.stringWidth来计算reportlab.But中的句子长度,当我旋转大的状态时,它用计算出的宽度来包装文本,而不是旋转的。代码段是
text_len = canvas.stringWidth("Hello" , "Helvetica", 10)
canvas.rotate(rotation)
P.drawOn(canvas, 0, 0)
它适用于直体文本,但对于旋转文本则不起作用。
发布于 2016-02-25 13:48:41
代码的问题是,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)
如果字符串宽度将环绕,我们将获得两个旋转句子的相同长度,但是输出如下:
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):
获取给定字体和大小的字符串的宽度。
https://stackoverflow.com/questions/35573357
复制相似问题