Мне нужен способ найти точный размер и положение глифа относительно его ограничивающей рамки.
Мы используем D3.js для создания SVG с заголовком, меньшей подписью и коротким основным текстом. Примерно так:
Лорем ипсум
Lorem ipsum dolor
Lorem ipsum dolor sit amet,
consectetur adipisicing elit,
sed do eiusmod tempor
incididunt ut Labore et dolore
magna aliqua
Как и в этом примере, мне нужно, чтобы текст был выровнен по левому краю независимо от размера шрифта.
Проблема в том, что выравнивается ограничивающая рамка каждой строки, а не глифы. Из-за чего заголовки выглядят с отступом. Как рассчитать расстояние между ограничительной рамкой и глифом, чтобы правильно выровнять текст?
Коллега сел и вручную измерил это для английского шрифта, который работает очень хорошо. Вероятно, мы могли бы сделать это в Adobe Illustrator, но нам нужна информация для английского, китайского и арабского шрифтов. Сделать это вручную более или менее невозможно.
Единственное решение, которое я могу придумать, — это ввести каждый символ в элемент холста и сопоставить каждый пиксель, чтобы увидеть, где начинается и заканчивается глиф.
То, что я думаю, было бы идеальным, так это способ использовать информацию о пути шрифта SVG для поиска крайностей, таким образом, мы получили бы точные числа вместо оценок. Наши оценки имеют большую погрешность. Есть ли способ сделать это с помощью node.js?
Пример того, как выглядит SVG:
<svg viewBox="0,0,1008,1424" height="1052px" width="744px" version="1.1"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg">
<g transform="translate(50,150)" class="container">
<g transform="translate(0,205)" class="textContainer">
<g fill="white" font-family="serif" font-size="" class="header">
<text>
<tspan y="147.7104222717285" style="" font-size="208"
x="-21.8359375">Lorem ipsum</tspan>
</text>
<text>
<tspan y="201.46275431823733" style="" font-size="45"
x="-4.72412109375">Lorem ipsum dolor</tspan>
</text>
</g>
<g lengthAdjust="spacingAndGlyphs" textLength="297" fill="white"
transform="translate(0,214)" font-family="sans-serif"
class="paragraph" font-size="14">
<text y="16.8" x="0">Lorem ipsum dolor sit amet,</text>
<text y="33.6" x="0">consectetur adipisicing elit,</text>
<text y="50.4" x="0">sed do eiusmod tempor</text>
<text y="67.2" x="0">incididunt ut labore et dolore</text>
<text y="84" x="0">magna aliqua</text>
</g>
</g>
</g>
</svg>
Нам нужно вычислить значения x
и y
для элементов text
и tspan
, в частности отрицательные значения x
. Примечание: на самом деле мы не используем семейства шрифтов serif
или sans-serif
, мы используем собственный шрифт. Я не думаю, что английский шрифт создан для использования в Интернете. Мы использовали fontsquirrel.com для создания файла шрифта SVG.
Обновлять
Шрифты SVG казались наиболее логичным вариантом, поскольку вся информация о пути в файле доступна для чтения в node. Вам просто нужно интерпретировать это. Но мы нашли и решили использовать opentype.js, который работает со шрифтами otf и ttf. .
Я все еще хотел бы знать, возможно ли это вообще сделать со шрифтами SVG.
d3-cloud
для обнаружения столкновений между символами, который работал путем рендеринга символов и выполнения рекурсивных вычислений с ограниченным прямоугольником. В конце концов, он не использовал его, но, возможно, вы можете использовать его повторно: jasondavies.com /wordcloud/о - person musically_ut   schedule 20.06.2014