我正在使用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">
</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">
</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>
答案 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)。