Я хочу создать элемент SVG, который включает в себя список узлов, каждый узел представляет собой прямоугольник с текстом внутри:
<svg class="chart" width="420" height="150" aria-labelledby="title" role="img">
<ng-container *ngFor="let item of listNode">
<g viewBox="0 0 56 18">
<rect [attr.width]="item.w" [attr.height]="2*item.h" fill="white"></rect>
<text [attr.x]="item.x" [attr.y]="item.y" text-anchor="middle" font-family="Meiryo" font-size="item.h"
fill="black">{{item.label}}</text>
</g>
</ng-container>
</svg>
Но я хочу, чтобы текст находился в центре прямоугольника(как вертикально, так и горизонтально).Чтобы сделать это, я думаю, мне нужно измерить ширину текста перед созданием элемента SVG.Я попытался использовать следующую функцию для измерения размера текста:
getTextWidth(text, fontSize, fontFace) {
var canvas = document.createElement('canvas');
var context = canvas.getContext('2d');
context.font = fontSize + 'px ' + fontFace;
return context.measureText(text).width;
}
Но результат не правильный.Итак, есть ли способ измерить размер текстового элемента SVG перед созданием реального элемента (например, моя функция getTextWidth), или есть какой-либо другой способ создать прямоугольник с текстом точно в центре.