2016-02-23 67 views
1

我正在使用canvas.stringWidth來計算reportlab.But中的句子長度,當我旋轉大的語句時,它會將文本的寬度計算爲直線的不旋轉的文本。代碼片段是如何確定reportlab中旋轉文本的長度

text_len = canvas.stringWidth("Hello" , "Helvetica", 10) 
canvas.rotate(rotation) 
P.drawOn(canvas, 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) 

如果字符串寬度將包裹我們會得到相同長度的兩個旋轉的句子,但輸出如下:

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

得到一個字符串的寬度在給定的字體和大小

+0

我明白這一點,但如果我們想寫旋轉的文本假設45度,然後可用的空間來寫是超過平面寫....我的邏輯是使用rotate_length = stringWidth/cos(旋轉角度) –

+0

在這種情況下,你可能會檢查此鏈接https:/ /groups.google.com/forum/#!topic/reportlab-users/jn0F1PI8R2g – B8vrede

+0

Thanx for鏈接......這很有用 –

相關問題