代码之家  ›  专栏  ›  技术社区  ›  feerlay

SVG的<text>元素的高度错误[重复]

  •  0
  • feerlay  · 技术社区  · 6 年前

    我正在尝试测量使用SVG文本标记以给定字体呈现给定字符串所用的确切高度。

    我已经尝试过使用getBBox和getExtentOfChar,但是这两种方法返回的高度在实际呈现的文本上方(有时在下方)包含一些额外的空间。

    http://upload.wikimedia.org/wikipedia/commons/3/39/Typography_Line_Terms.svg 使用这张图片中的术语,我试图得到正在呈现的文本的大写高度+下伸高度。或者,如果不可能的话,只要帽子的高度。有没有计算这些值的好方法?

    这是一个快速的代码笔,显示了我所说的额外空间: http://codepen.io/pcorey/pen/amkGl

    HTML格式:

    <div>
      <svg><text>Hello</text></svg>
      <svg><text>Age</text></svg>
    </div>
    

    JS公司:

    $(function() {
      $('svg').each(function() {
        var svg = $(this);
        var text = svg.find('text');
    
        var bbox = text.get(0).getBBox();
        svg.get(0).setAttribute('viewBox',
                               [bbox.x,
                                bbox.y,
                                bbox.width,
                                bbox.height].join(' '));
      });
    });
    

    我知道这是一个相当特殊的字体,所以这可能是完全不可能的。。。

    0 回复  |  直到 10 年前
        1
  •  2
  •   Paul LeBeau    10 年前

    不可以。所有SVG DOM方法(getBBox(),getExtentOfChar())都被定义为返回完整的glyph单元格高度。帽高上方的额外空间允许使用更高的字形-例如重音大写。我认为对于HTML DOM方法也是如此。

    但是,有一些JS库可以使用。例如:

    https://github.com/Pomax/fontmetrics.js

    我自己没有用过这个图书馆,所以我不能告诉你它有多可靠或准确。