【问题标题】:XSL: chop off string at arbitrary placeXSL:在任意位置切断字符串
【发布时间】:2015-09-03 19:40:16
【问题描述】:
我正在使用 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>
【问题讨论】:
标签:
pdf
xslt
xslt-1.0
xsl-fo
apache-fop
【解决方案1】:
如果您从 XML 和 XSL 生成它,您通常会在输出该特定内容时创建一个模板并放置 实体(零宽度换行符)。所以无论你怎么做,都要像这样制作内容(这表示字母之间的实体“非常长的单词”:
very long word
所以在你的例子中(我只把它们放在休息点附近,这样你就可以看到):
<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>
你现在会得到这个(它在“long”中的“o”处中断):
如果您愿意,一个非常有趣的效果是在该 fo:block 上将“text-align”设置为“justify”,如果在块的末尾插入一个 fo:leader ,这实际上会使所有内容对齐足够的长度来填充单元格。注意:这在 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>
如果你这样做了,你会得到这个: