【问题标题】:itextsharp measure chunk width / heightitextsharp 测量块的宽度/高度
【发布时间】:2011-02-23 13:28:26
【问题描述】:

我正在尝试与 iTextSharp 进行一些精确对齐,但由于我无法找到一种方法来获取块或段落的宽度/高度值,因此我一直做得不够。如果我创建一个具有特定字体、大小和文本的段落,那么它的尺寸应该是已知的,对吧?

我知道默认的左/右/中心对齐方式对我来说最有效,但我在某些情况下知道尺寸最有用。有什么想法吗?

【问题讨论】:

    标签: c# itextsharp


    【解决方案1】:

    您可以使用GetWidthPoint() 获得块的宽度,而块的高度通常是字体的大小,除非您只使用小写字母。如果是这样,那么您可以使用 BaseFont.GetCharBBox() 手动测量字符。

    但是,段落是可流动的项目,它们取决于写入它们的上下文,因此更难衡量它们。 (块不会自动换行,但段落会自动换行。)测量段落的最佳方法是将其写入PdfCell,然后测量PdfCell。您不必实际将PdfCell 添加到文档中。下面的链接对此进行了更多解释。

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

    【讨论】:

    • 谢谢,我还发现了如何获得正确的高度测量。 BaseFont.GetAscentPoint() - BaseFont.GetDescentPoint()。也许您可以将其添加到您的答案中,以便更多地结合在一起。感谢您的帮助。
    • 您也可以使用ColumnTextgo(false),但我不确定这是否会为您提供宽度,只是高度。
    • 如果您只关心文本是否适合,那么 ColumnText.go(false) 确实更有用(如果您正在这样做,它实际上比测量更容易)
    【解决方案2】:

    使用下面的代码获得确切的尺寸

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-23
      • 2013-12-30
      • 2010-12-29
      • 1970-01-01
      • 1970-01-01
      • 2014-12-25
      • 1970-01-01
      • 2013-05-24
      相关资源
      最近更新 更多