【问题标题】:How to calculate the height of an element?如何计算元素的高度?
【发布时间】:2014-07-03 08:57:20
【问题描述】:

我正在通过 XML 数据生成 pdf 文件。

我将段落元素的高度计算为:

float paraWidth = 0.0f;
for (Object o : el.getChunks()) {
    paraWidth += ((Chunk) o).getWidthPoint();
}
float paraHeight = paraWidth/PageSize.A4.getWidth();

但是这种方法不能正常工作。

你能给我一个想法吗?

【问题讨论】:

  • 我不是 iText 专家,但 widthPoint 听起来不像对象的宽度。
  • 那你为什么用宽度来计算高度?
  • 我想在左边画一个条,这个条必须和段落一样高

标签: java pdf-generation itext


【解决方案1】:

你的问题很奇怪。根据您问题的标题,您想知道字符串的高度,但您的代码显示您正在询问字符串的宽度。

请查看FoobarFilmFestival 示例。

如果bfBaseFont 实例,那么您可以使用:

float ascent = bf.getAscentPoint("Some String", 12);
float descent = bf.getDescentPoint("Some String", 12);

当我们使用 12 的字体大小时,这将返回基线以上的高度和基线以下的高度。您可能知道,字体大小是平均高度的指示。这不是实际高度。这只是我们使用的一个数字。

总高度为:

float height = ascent - descent;

或者您可能想知道Paragraph 占用的行数并将其与leading 相乘。在那种情况下,有不同的可能性。由于您的问题并不清楚您想要什么(块的高度、块的宽度、基线的垂直位置……),因此您不会得到比已经给出的更好的答案。如果 Chunk 中字形的高度不是您所期望的,请重新表述您的问题。

【讨论】:

    【解决方案2】:

    首先,为什么要遍历转换为 Object 的 Chunk 集合?如果这个集合的所有元素都是 Chunk,使用这个:

    for (Chunk c : el.getChunks()) {
        paraWidth += c.getWidthPoint();
    }
    

    你说方法不能正常工作是什么意思?

    【讨论】:

    • text1 = "aaaaaaaaaa" 和 text2 = "a a a a a a a a a" 没有相同的结果。
    猜你喜欢
    • 2015-12-16
    • 2016-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多