2016-06-08 7 views
1

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: Document View

+1

Es gibt nicht wirklich so etwas wie "XSL-FO 2.0". Meinst du, dass Sie Apache FOP 2.0 verwenden? – mzjn

Antwort

1

Im Moment (FOP version 2.1), die RTF-Ausgabe zum PDF einige Einschränkungen verglichen hat Ausgabe; insbesondere unterstützt nicht halten Eigenschaften.

Die verlinkte Seite heißt es, dass

RTF-Ausgabe momentan nicht gewartet ist

und hält sind

von der RTF-Bibliothek unterstützt, aber nicht gebunden in die RTFHandler

so, während es wahrscheinlich unwahrscheinlich ist, dass diese Funktion in zukünftigen Versionen ohne externe Hilfe behoben wird, könnte relativ einfach sein, es zu implementieren (in diesem Fall wäre es eine gute Idee zu submit a patch).