XSL:FO水平格式,新的生产线,如果不适合

问题描述 投票:1回答:2

我在我的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标记。

xml xslt xsl-fo
2个回答
2
投票

当给出这方面的一些格式化:

<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

该实体是&#8203;

喜欢:

  <xsl:for-each select="/myroot/category">
   <fo:inline>
     <xsl:value-of select="name"/>
   </fo:inline>
   <xsl:text>&#8203;</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>

然后,你的输出将是:

foob​​arfoobarfoobar

然后,你可以看到为什么没有休息。


2
投票

fo:inline更改为包含包含名称的fo:inline-containerfo: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工作。

© www.soinside.com 2019 - 2024. All rights reserved.