ich keinen Weg finden kann einen Seitenumbruch in einer Tabelle in der RTF-Ausgabe zu verhindern.XSL-FO 2.0: Prevent page-break innerhalb Tabelle
Ich habe viele Kombinationen von keep-together
/keep-with-next
ausprobiert, aber nichts hat für mich funktioniert. Die aktuelle Version hat ein Elternteil fo:block
mit dem Attribut keep-together.within-page="always"
einschließlich der gesamten Tabelle.
Das Problem tritt nur, wenn ein RTF erzeugt wird. Die PDF-Datei ist korrekt und es ist kein Seitenumbruch innerhalb einer Tabelle vorhanden. Die Tabelle hat eine Kopfzeile und 3 Datenzeilen. In der RTF gibt es einen Seitenumbruch nach der Kopfzeile und den ersten 2 Datenzeilen. Auf der nächsten Seite wird der Header wiederholt und die letzte Datenzeile generiert.
Es ist sehr wichtig, dass die Tabellen enthalten keine page-break.
Hier ist der relevante XSLT-Stylesheet-Code:
<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>
Ein Screenshot der entsprechenden Tabelle:
Es gibt nicht wirklich so etwas wie "XSL-FO 2.0". Meinst du, dass Sie Apache FOP 2.0 verwenden? – mzjn