【发布时间】:2011-02-23 13:28:26
【问题描述】:
我正在尝试与 iTextSharp 进行一些精确对齐,但由于我无法找到一种方法来获取块或段落的宽度/高度值,因此我一直做得不够。如果我创建一个具有特定字体、大小和文本的段落,那么它的尺寸应该是已知的,对吧?
我知道默认的左/右/中心对齐方式对我来说最有效,但我在某些情况下知道尺寸最有用。有什么想法吗?
【问题讨论】:
标签: c# itextsharp
我正在尝试与 iTextSharp 进行一些精确对齐,但由于我无法找到一种方法来获取块或段落的宽度/高度值,因此我一直做得不够。如果我创建一个具有特定字体、大小和文本的段落,那么它的尺寸应该是已知的,对吧?
我知道默认的左/右/中心对齐方式对我来说最有效,但我在某些情况下知道尺寸最有用。有什么想法吗?
【问题讨论】:
标签: c# itextsharp
您可以使用GetWidthPoint() 获得块的宽度,而块的高度通常是字体的大小,除非您只使用小写字母。如果是这样,那么您可以使用 BaseFont.GetCharBBox() 手动测量字符。
但是,段落是可流动的项目,它们取决于写入它们的上下文,因此更难衡量它们。 (块不会自动换行,但段落会自动换行。)测量段落的最佳方法是将其写入PdfCell,然后测量PdfCell。您不必实际将PdfCell 添加到文档中。下面的链接对此进行了更多解释。
http://itext-general.2136553.n4.nabble.com/Linecount-td2146114.html
【讨论】:
ColumnText 的go(false),但我不确定这是否会为您提供宽度,只是高度。
使用下面的代码获得确切的尺寸
Font font = ...;
BaseFont baseFont = font.BaseFont;
float width = baseFont.GetWidthPoint(text, fontSize);
float height = baseFont.GetAscentPoint(text, fontSize) - baseFont.GetDescentPoint(text, fontSize);
【讨论】: