XSL:在任意位置切断字符串

时间:2015-09-03 19:40:17

标签: pdf xslt xslt-1.0 xsl-fo apache-fop

我使用XSL来获取XML样式。 xsl定义了一个包含两列的表。感谢Kevin Brown,以下代码可以很好地切断单词边界,但我需要的是在任意位置切断。

<fo:table-cell>
    <fo:block-container overflow="hidden" height="15pt"><fo:block>this is a very, very, very long text here</fo:block></fo:block-container>
</fo:table-cell>

1 个答案:

答案 0 :(得分:3)

如果您是从XML和XSL生成的,那么通常在输出特定内容时会创建一个模板并放置&amp;#8203;实体(零宽度空格字符)。所以,无论你如何做,都要制作这样的内容(这就是在字母之间用实体说“非常长的字”:

v&amp;#8203; e&amp;#8203; r&amp;#8203; y l&amp;#8203; o&amp;#8203; n&amp;#8203; g w&amp;#8203; o&amp;#8203; r&amp;#8203; d

所以在你的例子中(我只把它们放在休息区附近所以你可以看到):

<fo:table-cell border="1pt solid silver">
                            <fo:block-container overflow="hidden" height="15pt"><fo:block>this is a very, very, very l&#8203;o&#8203;n&#8203;g t&#8203;e&#8203;x&#8203;t here</fo:block></fo:block-container>
                        </fo:table-cell>

你现在可以得到这个(它在“长”中打破“o”):

enter image description here

如果你如此倾向于一个非常有趣的效果是在那个fo:block上将“text-align”设置为“justify”,这将实际上使所有事物对齐,如果在块的末尾你插入了一个fo:leader of足够的长度来填充细胞。注意:这在Apache FOP中不起作用,在RenderX XEP中也是如此。

像:

<fo:table-cell border="1pt solid silver">
    <fo:block-container overflow="hidden" height="15pt"><fo:block text-align="justify">this is a<fo:leader leader-length.minimum="3in"/></fo:block></fo:block-container>
</fo:table-cell>

如果你这样做,你会得到这个:

enter image description here