XSL-FO 2.0:防止表内的分页

时间:2016-06-08 09:45:11

标签: xslt xsl-fo apache-fop

我无法找到一种方法来阻止RTF输出中的表格中的分页。

我已经尝试过很多keep-together / keep-with-next的组合,但没有任何方法可以帮助我。实际版本的父级fo:block的属性为keep-together.within-page="always",包括整个表格。

仅在生成RTF时才会出现此问题。 PDF是正确的,并且表中不存在分页符。该表有一个标题行和3个数据行。在RTF中,在标题行和前2个数据行之后有一个分页符。在下一页上,重复标题,并生成最后一个数据行。

表格不包含分页符非常重要。

以下是相关的XSLT-Stylesheet代码:

<fo:block keep-together.within-page="always" > 
        <xsl:for-each select="block"> 
            <xsl:call-template name="drawData"></xsl:call-template> 
        </xsl:for-each> 
        <fo:table text-align="center"> 
            <xsl:for-each select="row[@type='declare'][1]/column"> 
                <fo:table-column column-number="position()" border-style="solid" border-color="#000000" border-width="0.5pt"> 
                    <xsl:attribute name="column-width"><xsl:value-of select="@width"/></xsl:attribute> 
                </fo:table-column> 
            </xsl:for-each> 
            <xsl:if test="row[@type='header']"> 
                <fo:table-header> 
                    <fo:table-row keep-together.within-page="2" background-color="#0000FF" color="#FFFFFF"> 
                        <xsl:for-each select="row[@type='header'][1]/column/block"> 
                            <fo:table-cell border-style="solid" border-color="#000000" border-width="0.5pt"> 
                                <xsl:attribute name="number-columns-spanned"> 
                                    <xsl:value-of select="count(../../../row[@type='declare']/column) div count(../../../row[@type='declare'])"/> 
                                </xsl:attribute> 
                                <xsl:call-template name="drawData"></xsl:call-template> 
                            </fo:table-cell> 
                        </xsl:for-each> 
                    </fo:table-row> 
                </fo:table-header>       
            </xsl:if> 
            <fo:table-body>
                <xsl:for-each select="row[not(@type='header')]"> 
                    <fo:table-row keep-together.within-page="2"> 
                        <xsl:for-each select="column/block"> 
                            <fo:table-cell border-style="solid" border-color="#000000" border-width="0.5pt"> 
                                <xsl:call-template name="drawData"></xsl:call-template> 
                            </fo:table-cell> 
                        </xsl:for-each> 
                    </fo:table-row> 
                </xsl:for-each>
            </fo:table-body> 
        </fo:table>
    </fo:block> 

相关表格的屏幕截图:Document View

1 个答案:

答案 0 :(得分:2)

目前(FOP version 2.1),与PDF输出相比,RTF输出有一些限制;特别是,它不支持保留属性

链接页面说明了

  

RTF输出目前尚未维护

保持

  

由RTF库支持,但未绑定到RTFHandler

所以,虽然在没有外部帮助的情况下可能不会在将来的版本中修复此功能,但可能相对容易实现它(在这种情况下,{is}是个好主意{ {3}})。