我使用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>
答案 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​o​n​g t​e​x​t here</fo:block></fo:block-container>
</fo:table-cell>
你现在可以得到这个(它在“长”中打破“o”):
如果你如此倾向于一个非常有趣的效果是在那个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>
如果你这样做,你会得到这个: