2011-02-23 28 views
9

我想與iTextSharp做一些精確的對齊,但我一直在下降,因爲我無法找到一種方法來獲得大塊或段落的寬度/高度值。如果我創建一個具有特定字體和大小以及文本的段落,那麼它的尺寸應該是已知的,對嗎?itextsharp測量塊寬度/高度

我知道默認的左/右/中心線對我來說絕大部分都會訣竅,但是我知道這些尺寸是最有用的。有任何想法嗎?

回答

12

使用GetWidthPoint()可以得到塊的寬度,塊的高度通常是字體的大小,除非您只使用小寫字母。如果是這樣,那麼你可以使用BaseFont.GetCharBBox()手動測量字符。

段落是可流動的項目,但是,它們取決於它們寫入的上下文,因此測量它們更困難。 (塊不會自動換行,但是段落會這樣。)測量段落的最佳方法是將其寫入PdfCell,然後測量PdfCell。您不必實際將PdfCell添加到文檔中。下面的鏈接解釋了一點。下面的代碼

http://itext-general.2136553.n4.nabble.com/Linecount-td2146114.html

+1

謝謝,我也發現瞭如何得到正確的高度測量。 BaseFont.GetAscentPoint() - BaseFont.GetDescentPoint()。也許你可以將它添加到你的答案,所以它是多一點。謝謝您的幫助。 – 2011-02-23 15:07:36

+0

你可能也可以使用'ColumnText'的'go(false)',但我不確定這會讓你的寬度,只是高度。 – 2011-02-23 18:43:05

+0

如果你只關心文本是否適合(如果這就是你正在做的事情,它實際上比測量更容易),ColumnText.go(false)真的更有用。 – DevTheo 2012-07-05 15:38:02

2

使用的確切大小

Font font = ...; 
BaseFont baseFont = font.BaseFont; 
float width = baseFont.GetWidthPoint(text, fontSize); 
float height = baseFont.GetAscentPoint(text, fontSize) - baseFont.GetDescentPoint(text, fontSize);