XSL:FO避免表格单元格之间的空间

时间:2016-07-21 11:43:51

标签: xslt-2.0 xsl-fo

大家好我在两个单元格中都有两个表单元格和一个<fo:leader/>。如何避免在两个单元格之间获得空间。它无法跨越两个细胞。

enter image description here

我使用Antennahouse和XSLT 2.0。

这是我的表格代码

 <fo:table width="100%"  >
           <fo:table-column column-width="50%"/>
           <fo:table-column column-width="50%"/>
            <fo:table-body  >
              <fo:table-row>
                 <fo:table-cell  >
                   <fo:block border-right-width="0.0mm" >
                      <xsl:if test="page">
                        <xsl:attribute name="text-align-last">justify</xsl:attribute>
                      </xsl:if>
                     <xsl:value-of select="concat(@ref1,' ')"/>  
                      <xsl:if test="page">                       
                          <fo:leader leader-pattern="dots"/>
                      </xsl:if>          
                   </fo:block>
                 </fo:table-cell>
                 <fo:table-cell >
                   <fo:block  text-align="justify" text-align-last="right" axf:text-align-first="justify">  
                     <xsl:if test="page">
                        <fo:leader leader-pattern="dots"  />
                     </xsl:if>   
                     <fo:inline><xsl:apply-templates select="page" mode="normal"><xsl:with-param name="chapter" select="@chapterNumber"></xsl:with-param></xsl:apply-templates></fo:inline></fo:block>
                 </fo:table-cell>
               </fo:table-row>

2 个答案:

答案 0 :(得分:3)

如果没有其他所有东西,使用纯XSL FO并且没有扩展名,这对我有用:

                <fo:table width="100%"  >
                    <fo:table-column column-width="50%"/>
                    <fo:table-column column-width="50%"/>
                    <fo:table-body  >
                        <fo:table-row>
                            <fo:table-cell>
                                <fo:block text-align-last="justify">     
                                    <fo:inline>Stuff</fo:inline>
                                        <fo:leader leader-pattern="dots"/>         
                                </fo:block>
                            </fo:table-cell>
                            <fo:table-cell>
                                <fo:block text-align-last="justify"> 
                                        <fo:leader leader-pattern="dots"  />
                                    <fo:inline>1</fo:inline></fo:block>
                            </fo:table-cell>
                        </fo:table-row>
                    </fo:table-body>
                </fo:table>

没有空格。

enter image description here

回答这个问题,我有可能幸运吗?再次测试,各种内容和表列宽度。我正在展示的内容可能是kerned和各种长度,我改变了表格单元格的大小。在所有情况下都没有差距。

enter image description here

我测试了一些其他的东西,并意识到差异是格式化程序。 Apache FOP和Antennahouse会产生你所展示的问题,我使用的是RenderX XEP(我为之工作)。它没有表现出这种行为。恕我直言,如果您的格式化程序具有允许字符间和字空间挤压以适应允许容差的算法,则正确答案是没有空格。合理的是#34;合理的&#34;。

答案 1 :(得分:1)

我认为每个表格行的两个系列点之间存在奇怪的“差距”有两个原因:

  1. 该列不是领导者模式的精确倍数(点+空格);例如,假设一个点和一个空格宽3毫米,而leader-alignment="reference-area"填充的空白区域宽度为17毫米,格式化程序只能插入5个点,留出2毫米的额外间隙< / LI>
  2. 不同行上的点未对齐;左列中的每个点系列都从前一个文本的末尾开始,因此差距取决于文本长度
  3. 解决方案

    • 使用leader-pattern-widthXSLFormatter supports
    • 设置width,并将表格{{1}}设置为该
    • 的倍数