1

我有一个用 Inkscape 创建的 SVG 元素。然后,我将该 SVG 放入用于转换 XML 数据的 XSL-FO 样式表的一部分,然后通过 IBEX 渲染器创建一个 pdf(通常然后打印)。例如,我在 svg/stylesheet 中有如下所示的元素(由于 Inkscape 导出而产生的额外噪音):

<text x="114" x="278.36218" id="id1" xml:space="preserve" style="big-long-style-string-from-inkscape">
    <tspan x="114" y="278.36218" id="id2" style="style-string">
        <xsl:value-of select="Alias1"/>
    </tspan>
</text>

我的问题在于我不知道这个文本区域会有多大。对于这个特定的,我在 SVG 中的文本右侧有一个图像。但是,如果这个字符串是 W 的最大允许数量,那么它就太长了并且会超出图像。我想要的(在一个完美的世界中)是一种告诉它我希望文本块有多少像素宽然后让它自动使文本变小直到它适合该区域的方法。如果我不能这样做,截断文本也可以。作为最后的手段,我将使用固定宽度的字体并在 XML 生成中自己进行字符串截断,尽管这会产生一些不太可用和不太美观的东西。

我浏览了 SVG 文档并查看flowRegions了一些路径,但似乎都不是我想要的(也许它们是)。如果有帮助,这是 Inkscape 生成的样式字符串:

"font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"

在此先感谢您的帮助。

4

1 回答 1

2

您有任意行长的文本(就字符而言),并且想要缩放它以适应固定的空间量?我能想到的将文本重新缩放为固定大小的唯一方法是将其放在svg元素内,然后将 SVG 缩放到该大小:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg width="100%" height="100%" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
  <title>Resizing Text</title>
  <defs>
    <svg id="text-1" viewBox="0 0 350 20">
      <text id="text-2" x="0" y="0" fill="#000" alignment-baseline="before-edge">It's the end of the world as we know it, and I feel fine!</text>
    </svg>
  </defs>
  <rect x="500" y="100" width="200" height="40" fill="#eee" />
  <use  x="510" y="110" width="180" height="20" xlink:href="#text-1" />
</svg>

但是,如上所示,viewBox封装svg元素上的 需要设置为文本的宽度,您可能不知道。

如果您在具有可用脚本的用户代理(例如 Web 浏览器)中引用此 SVG,那么您可以轻松编写脚本来捕获text ortspan元素的宽度并进行viewBox相应设置。

于 2011-03-28T19:02:33.757 回答