У меня есть программа (на основе Java), которая генерирует SVG из данных. Пользователь может загрузить свои SVG-файлы, чтобы они использовались для значков и маркеров, которые я использую в окончательном SVG-изображении.
Как это работает, у меня есть прямоугольник плахолдера, который я заменяю поставляемым SVG ...
<svg xmlns="http://www.w3.org/2000/svg" height="176" version="1.1" viewbox="0 0 264 176" width="264">
<!-- my own stuff -->
<rect x="50" y="50" width="100" height="100" fill="none" class="placeholder" />
</svg>
Теперь я могу заменить прямоугольник в моем коде другим SVG и добавить атрибуты width и height, чтобы он масштабировался.
<svg xmlns="http://www.w3.org/2000/svg" height="500" version="1.1" viewbox="0 0 500 500" width="500">
<!-- my own stuff -->
<svg x="50" y="50" width="100" height="100" version="1.1" xmlns="http://www.w3.org/2000/svg">
<!-- inner unknown XML -->
</svg>
</svg>
Проблема в том, что если внешние SVG не квадратные (1: 1), вы всегда получите смещение в горизонтальном или вертикальном направлении. Это можно легко исправить, считав значения для viewBox из внешних SVG. Но они не всегда присутствуют.
Если я открою внешний SVG в Chrome, я смогу увидеть вычисленные значения ширины и высоты, но в моем Java-коде я не могу получить доступ к вычисленной ширине и высоте курса.
Единственное решение, которое я вижу, это принуждение пользователя включить атрибут viewBox. Существуют ли другие решения, например, позиционирование элемента на основе его (вычисленного) центроида?