我在我的XSL文件多个块,我想在一个行被格式化,但如果没有足够的空间 - 块将移动到下一行。目前,我有以下的xsl块:
<fo:static-content flow-name="header-continued">
<fo:block-container>
<fo:block>
<xsl:for-each select="/myroot/category">
<fo:inline>
<xsl:value-of select="name"/>
</fo:inline>
</xsl:for-each>
</fo:block>
</fo:static-content>
</fo:block-container>
目前的情况下,有没有足够的宽度 - 内容只是被削减左侧和右侧。 inline-block的风格:当有几个是DIV的,他们有显示的行为我想是类似于HTML标记。
当给出这方面的一些格式化:
<fo:inline>foo</fo:inline><fo:inline>foo</fo:inline><fo:inline>foo</fo:inline><fo:inline>foo</fo:inline><fo:inline>foo</fo:inline>
每个元件之间不会打破。因此,在每个<fo:inline>
之间模板改变输出断空间。
见https://en.wikipedia.org/wiki/Zero-width_space
该实体是​
喜欢:
<xsl:for-each select="/myroot/category">
<fo:inline>
<xsl:value-of select="name"/>
</fo:inline>
<xsl:text>​</xsl:text>
</xsl:for-each>
这应该创建每个<fo:inline>
之间零宽度断裂空间,以允许其打破多行。
这是假设,当然要在他们之间没有空格。
现在,这么说,在上面的模板我要指出的是,<fo:inline>
元素什么都不做(除了可能导致你有问题),因为它们没有携带单独的样式或任何东西。
我会假设你会很乐意用:
<xsl:for-each select="/myroot/category">
<xsl:value-of select="name"/>
</xsl:for-each>
这在现实中是完全一样的。如果你的数据是这样的:
<name>foo</name>
<name>bar</name>
<name>foo</name>
<name>bar</name>
<name>foo</name>
<name>bar</name>
然后,你的输出将是:
foobarfoobarfoobar
然后,你可以看到为什么没有休息。
在fo:inline
更改为包含包含名称的fo:inline-container
的fo:block
。
里面也不会断裂超过一本线(除非它比现有的宽度更宽)的fo:inline-container
将采取它需要(除非您指定的宽度)尽可能多的宽度和文本。见https://www.w3.org/TR/xsl11/#fo_inline-container。
另外,改变<fo:inline>
到<fo:inline keep-together.within-line="always">
。这应该与FOP 1.1工作。