Raphael.text()
を使用してレンダリングされるテキストと、@ font-faceを使用してロードされたフォントを使用するfont-family
属性を持つテキストがあります。@ font-faceを使用するとSVG node.getBBoxが正しくない
私は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 /ページは、SVGに目的のフォントを正しく表示しています。私はそれを検査することができ、ブラウザは正しいサイズを見る。
これは待ち時間の問題ではなく、タイムアウトを試しました。フォントがブラウザにプリロードされている場合(ページをファミリを使用して、CSSをレンダリングする前にフォントダウンロードのトリガを引き起こす私のCSS内に@font-face
を使用することによって、フォントがプリロードされている場合)。
私は前ページの読み込みに@font-face
宣言としての私のフォントを追加しようとしましたが、それは何の差分を行いません。
は、私は、SVGはそれが表示されるフォントを反映したサイズを返すために取得できますか?私はそれが内部タイミングの問題だと思う。それはですポストレンダリングのコールバック/イベントの必要性とほぼ同じです。