在 xsl 中垂直对齐 SVG 旁边的文本
Align text vertically next to SVG in xsl
我正在尝试对齐 SVG 图像旁边的文本 insde XSL,然后用于创建 pdf。
这是我设置文本和 SVG 的地方:
<fo:block font-size="14pt" text-align="center" margin-top="2cm">
<fo:instream-foreign-object>
<svg:svg width="30" height="30" xml:space="preserve">
<svg:g style="fill:none; stroke:black; stroke-width:1">
<svg:rect x="0" y="0" width="30" height="30"/>
</svg:g>
</svg:svg>
</fo:instream-foreign-object>
Mark If Closed
</fo:block>
这是输出:
我希望文本 "Mark If Closed" 与方形 SVG 垂直居中。
如果正方形的大小是恒定的,你可以玩一下baseline-shift。给定 30 的 SVG 高度和 14pt 的字体大小,大约 5pt 的基线偏移就可以了。
<fo:block font-size="14pt" text-align="center" background-color="silver">
<fo:instream-foreign-object>
<svg:svg xmlns:svg="http://www.w3.org/2000/svg" width="30" height="30" xml:space="preserve">
<svg:g style="fill:none; stroke:black; stroke-width:1">
<svg:rect x="0" y="0" width="30" height="30"/>
</svg:g>
</svg:svg>
</fo:instream-foreign-object><fo:inline background-color="yellow" baseline-shift="5pt">Mark If Closed</fo:inline></fo:block>
产生这个(为清楚起见添加了颜色):
让格式化程序解决...
让格式化程序进行计算(假设 line-height
(参见 https://www.w3.org/TR/xsl11/#line-height)是“1.2”):
<fo:block font-size="14pt" text-align="center" margin-top="2pt"
background-color="silver">
<fo:instream-foreign-object baseline-shift="-((30pt - 1em * 1.2) div 2)">
<svg:svg xmlns:svg="http://www.w3.org/2000/svg" width="30" height="30" xml:space="preserve">
<svg:g style="fill:none; stroke:black; stroke-width:1">
<svg:rect x="0" y="0" width="30" height="30" />
</svg:g>
</svg:svg>
</fo:instream-foreign-object>
<fo:inline background-color="yellow">Mark If Closed</fo:inline>
</fo:block>
将框向下移动 50%:
<fo:block font-size="14pt" text-align="center" margin-top="2pt"
background-color="silver">
<fo:instream-foreign-object baseline-shift="-50%">
<svg:svg xmlns:svg="http://www.w3.org/2000/svg" width="30" height="30" xml:space="preserve">
<svg:g style="fill:none; stroke:black; stroke-width:1">
<svg:rect x="0" y="0" width="30" height="30" />
</svg:g>
</svg:svg>
</fo:instream-foreign-object>
<fo:inline background-color="yellow">Mark If Closed</fo:inline>
</fo:block>
在 fo:instream-foreign-object
上使用 alignment-baseline
(参见 https://www.w3.org/TR/xsl11/#alignment-baseline):
<fo:block font-size="14pt" text-align="center" margin-top="2pt"
background-color="silver">
<fo:instream-foreign-object alignment-baseline="middle">
<svg:svg xmlns:svg="http://www.w3.org/2000/svg" width="30" height="30" xml:space="preserve">
<svg:g style="fill:none; stroke:black; stroke-width:1">
<svg:rect x="0" y="0" width="30" height="30" />
</svg:g>
</svg:svg>
</fo:instream-foreign-object>
<fo:inline background-color="yellow">Mark If Closed</fo:inline>
</fo:block>
我正在尝试对齐 SVG 图像旁边的文本 insde XSL,然后用于创建 pdf。
这是我设置文本和 SVG 的地方:
<fo:block font-size="14pt" text-align="center" margin-top="2cm">
<fo:instream-foreign-object>
<svg:svg width="30" height="30" xml:space="preserve">
<svg:g style="fill:none; stroke:black; stroke-width:1">
<svg:rect x="0" y="0" width="30" height="30"/>
</svg:g>
</svg:svg>
</fo:instream-foreign-object>
Mark If Closed
</fo:block>
这是输出:
我希望文本 "Mark If Closed" 与方形 SVG 垂直居中。
如果正方形的大小是恒定的,你可以玩一下baseline-shift。给定 30 的 SVG 高度和 14pt 的字体大小,大约 5pt 的基线偏移就可以了。
<fo:block font-size="14pt" text-align="center" background-color="silver">
<fo:instream-foreign-object>
<svg:svg xmlns:svg="http://www.w3.org/2000/svg" width="30" height="30" xml:space="preserve">
<svg:g style="fill:none; stroke:black; stroke-width:1">
<svg:rect x="0" y="0" width="30" height="30"/>
</svg:g>
</svg:svg>
</fo:instream-foreign-object><fo:inline background-color="yellow" baseline-shift="5pt">Mark If Closed</fo:inline></fo:block>
产生这个(为清楚起见添加了颜色):
让格式化程序解决...
让格式化程序进行计算(假设 line-height
(参见 https://www.w3.org/TR/xsl11/#line-height)是“1.2”):
<fo:block font-size="14pt" text-align="center" margin-top="2pt"
background-color="silver">
<fo:instream-foreign-object baseline-shift="-((30pt - 1em * 1.2) div 2)">
<svg:svg xmlns:svg="http://www.w3.org/2000/svg" width="30" height="30" xml:space="preserve">
<svg:g style="fill:none; stroke:black; stroke-width:1">
<svg:rect x="0" y="0" width="30" height="30" />
</svg:g>
</svg:svg>
</fo:instream-foreign-object>
<fo:inline background-color="yellow">Mark If Closed</fo:inline>
</fo:block>
将框向下移动 50%:
<fo:block font-size="14pt" text-align="center" margin-top="2pt"
background-color="silver">
<fo:instream-foreign-object baseline-shift="-50%">
<svg:svg xmlns:svg="http://www.w3.org/2000/svg" width="30" height="30" xml:space="preserve">
<svg:g style="fill:none; stroke:black; stroke-width:1">
<svg:rect x="0" y="0" width="30" height="30" />
</svg:g>
</svg:svg>
</fo:instream-foreign-object>
<fo:inline background-color="yellow">Mark If Closed</fo:inline>
</fo:block>
在 fo:instream-foreign-object
上使用 alignment-baseline
(参见 https://www.w3.org/TR/xsl11/#alignment-baseline):
<fo:block font-size="14pt" text-align="center" margin-top="2pt"
background-color="silver">
<fo:instream-foreign-object alignment-baseline="middle">
<svg:svg xmlns:svg="http://www.w3.org/2000/svg" width="30" height="30" xml:space="preserve">
<svg:g style="fill:none; stroke:black; stroke-width:1">
<svg:rect x="0" y="0" width="30" height="30" />
</svg:g>
</svg:svg>
</fo:instream-foreign-object>
<fo:inline background-color="yellow">Mark If Closed</fo:inline>
</fo:block>