【发布时间】:2017-04-14 03:43:37
【问题描述】:
我有一些使用Raphael.text() 和font-family 属性渲染的文本,这些属性使用使用@font-face 加载的字体。
我使用 OpenType 加载字体并将其呈现为 base64 并将其注入到我的样式表中。
这是一些伪代码:
// In my css
opentype.load('someFontFamily', (err, font) => {
// Inject in stylesheets
const path = paper.text(x, y, 'Hello World')
.attr({
'font-family': 'someFontFamily'
'font-size': 100
})
path.getBBox() // Calls path.node.getBBox() in RaphaelJS
})
问题是这样的。 getBBox 返回的大小,尤其是宽度,并不反映字体系列,而是一些抽象的未知通用字体(它不是备用字体的宽度,所以不确定它是什么)。
html/page 正确显示了我的 SVG 和所需的字体。我可以检查它,浏览器会看到正确的大小。
这不是等待的问题,我尝试过超时。如果在浏览器中预加载字体,它似乎唯一可行的方法(通过在页面上使用系列元素并在我的css中使用@font-face,这会导致在任何SVG渲染之前触发字体下载。
我尝试在页面加载之前将我的字体添加为@font-face 声明,但它没有任何区别。
如何让 SvG 返回反映其显示字体的大小?我怀疑这是一个内部时间问题。这几乎就像后期渲染需要回调/事件。
【问题讨论】:
标签: javascript css svg fonts raphael