Podría agregar un script dentro de la plantilla SVG que llamó cuando se cargó el SVG y usa getComputedTextLength() para cambiar el tamaño de la fuente. Es una solución algo hacky, pero parece funcionar.
Aquí hay un ejemplo rápido que dibuja una caja y texto dentro de ella. El texto debe cambiar su tamaño para que quepa siempre en el cuadro, sin importar cuánto dure (al menos hasta el punto):
Para invocar el código cuando se carga el SVG, incluya onload = "int (evt)" en el SVG etiqueta.
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
width="400" height="80"
onload="init(evt)">
Entonces la secuencia de comandos real:
<script type="text/ecmascript">
<![CDATA[
function init(evt)
{
if (window.svgDocument == null)
{
svgDocument = evt.target.ownerDocument;
}
maximum_length = 300;
my_text = svgDocument.getElementById('text-to-resize');
for (var font_size=55; font_size>0; font_size--)
{
if(my_text.getComputedTextLength() < maximum_length){break;}
my_text.setAttributeNS(null, "font-size", font_size);
}
}
]]>
</script>
I acaba de utilizar un bucle for para disminuir el tamaño de fuente hasta que la longitud del texto es menor que el máximo especificado; Estoy seguro de que hay una mejor manera de cambiar el tamaño del texto.
Por último, el texto real y la caja:
<rect id="rect1" x="20" y="10" width="320" height="50" fill="white" stroke="black"/>
<text id="text-to-resize"
text-anchor="middle"
x="170" y="50"
font-family="Times New Roman" font-size="55">
whatever text
</text>
</svg>
Si cambia el texto, el tamaño de fuente debe cambiar para que se ajuste dentro de la caja. Probablemente desee cambiar los valores x e y para centrar correctamente el texto también.
Ver también: http://stackoverflow.com/questions/2938779/svg-scaling-text-to-fit-container –