2009-10-06 118 views
19

我正在使用iText編寫PDF。在某些情況下,我需要使用SetVisibleSignature函數對PDF進行簽名。有了這個函數,我們需要指定我們將寫入內容的矩形。如何計算iText中的字符串寬度?

但是我很難計算字符串的寬度,所以我可以在設置PDF上的簽名之前設置矩形。

如何計算iText中的字符串寬度?

回答

24

您可以使用BaseFont.getWidthPoint(String text, float fontSize)來獲取pt中字符串的寬度。

或將字符串一大塊,做chunk.getWidthPoint()

+0

您如何檢索basefont實例? – 2013-10-24 09:05:51

+0

我想知道表中段落的寬度。看來使用塊的方法返回錯誤的值。 – 2013-10-24 09:27:03

+0

getWidthPoint如何靜態地知道假定哪種字體? x_X – 2016-03-22 09:07:00

12

接受的答案BaseFont.getWidthPoint,不會在iText的5.5.4工作,因爲方法是不是靜態的了。即使它仍然存在,它不會考慮正在使用的真實字體(它的族或其粗體/斜體),因爲它是靜態的並且正在接收有限的參數。

chunk.getWidthPoint()確實可以像後面提到的那樣處理真正的字體,但是對於某些用途來說,爲了寬度而不斷地創建一個塊是很浪費的,特別是如果該塊不在以後使用。

這是chunk.getWidthPoint()作爲一個獨立的替代品使用的底層代碼,假設你沒有做任何水平縮放:

font.getCalculatedBaseFont(true).getWidthPoint(text, font.getCalculatedSize()); 
1

我終於實現了這個與ColumnText.getWidth(Phrase phrase)大小什麼Phrase的寬度將在用ColumnText.showTextAligned顯示之前。

在這個片段中,我使用ColumnText.getWidth來調整字符串的長度以將其放在頁面的右上角。它在人像A4中工作,沒有進一步測試。

Phrase phrase = new Phrase("Bla bla bla!", new Font(FontFamily.HELVETICA, 9)); 
float width = ColumnText.getWidth(phrase); 

ColumnText.showTextAligned (
    canvas, 
    Element.ALIGN_LEFT, 
    phrase, 
    canvas.getPdfDocument().right() - width, 
    canvas.getPdfDocument().top() + 9, 
    0 
);