将XSL-FO表放在同一页面上,而不是将其移到下一页

时间:2018-04-19 00:14:52

标签: xslt xsl-fo xmltable

我正在使用XSL -FO模板从xsl生成PDF。在我的PDF中,我有一些表将由动态数据填充(无法控制生成的行)。我在PDF中有一些静态内容,之后表格是预期的。目前的行为类似于,在pdf中,如果静态内容占据到页面中间,并且具有动态内容的表具有多个行,表被转移到下一页,静态内容空白后留空。我希望行为类似于,在PDF中,表应该在同一页面中的静态内容之后立即启动,并允许该页面中允许的行数,如果表格没有&#,则继续下一页中的表格39; t适合上一页。

我在此添加代码以便更清晰。

 <fo:block>
    <fo:block>
        <fo:table xsl:use-attribute-sets="tablestyle1">
        <fo:table-column xsl:use-attribute-sets="tablecoll" />
        <fo:table-column xsl:use-attribute-sets="tablecoll"/>
        <fo:table-column xsl:use-attribute-sets="tablecoll" />
        <fo:table-column xsl:use-attribute-sets="tablecoll" />
        <fo:table-column xsl:use-attribute-sets="tablecoll" />
            <fo:table-body>
                <fo:table-row xsl:use-attribute-sets="tabletr">
                    <fo:table-cell font-weight="bold" xsl:use-attribute-sets="tabletd">
                        <fo:block>
                            <xsl:text disable-output-escaping="yes">&#xA;</xsl:text>
                        </fo:block>
                    </fo:table-cell>
                    <fo:table-cell font-weight="bold" xsl:use-attribute-sets="tabletd">
                        <fo:block>Name</fo:block>
                    </fo:table-cell>
                    ( 3 more cells here..)
                </fo:table-row>


                <xsl:for-each
                    select="(value is being fetched from function)">
                    <fo:table-row xsl:use-attribute-sets="tabletr">
                        <fo:table-cell font-weight="bold" xsl:use-attribute-sets="tabletd">
                            <fo:block>
                                <xsl:value-of select="position()" />
                            </fo:block>
                        </fo:table-cell>

                        <fo:table-cell xsl:use-attribute-sets="tabletd">
                            <fo:block>
                                <xsl:choose>
                                    <xsl:when
                                        test="./Name/Title!='' or ./Name/ForeName !='' or ./Name/SecondInitial!='' or ./Name/Surname!=''">
                                        <xsl:call-template name="format-name1">
                                            <xsl:with-param name="name" select="./Name/Title" />
                                        </xsl:call-template>
                                        <xsl:text> </xsl:text>
                                        <xsl:call-template name="format-name1">
                                            <xsl:with-param name="name" select="./Name/ForeName" />
                                        </xsl:call-template>
                                        <xsl:text> </xsl:text>
                                        <xsl:call-template name="format-name1">
                                            <xsl:with-param name="name" select="./Name/Surname" />
                                        </xsl:call-template>
                                    </xsl:when>
                                    <xsl:otherwise>
                                        <xsl:text disable-output-escaping="yes">&#xA;</xsl:text>
                                    </xsl:otherwise>
                                </xsl:choose>
                            </fo:block>
                        </fo:table-cell>
                            <fo:table-cell xsl:use-attribute-sets="tabletd">
                            (few more table cells are populated here using for - each iteration)
                            .
                            .
                            </fo:table-cell>
                            </fo:table-body>
        </fo:table>
    </fo:block>
</fo:block>

1 个答案:

答案 0 :(得分:0)

宾果:

<xsl:attribute-set name="tabletr" foa:class="table"> 
    <xsl:attribute name="keep-with-next">always</xsl:attribute>
&#34;总是&#34;设置是你的罪魁祸首。这使得表的所有行都希望保持在一起。格式化程序将尝试将整个表放在一个页面上。

您可以完全删除该属性,也可以更改&#34; always&#34;一个数字。 keep-with设置使用优先级,因此从低优先级编号开始(1)。