如何使用XSL-FO确定页面是否溢出到其他页面?

时间:2016-02-04 04:18:52

标签: xslt xsl-fo apache-fop

我有xsl:for-each递归添加fo:table个元素。在xsl:for-each之前我有一个“标题”块。

我想知道的是,如果我可以确定该表是否溢出到另一页并允许我再次“注入”标题块。这样我就可以表明上一张表已经继续了。

-> Page 1
--> The Title
---> Table
-> Page 2
--> The Title (cont.)
---> Remaining Table

更新

考虑Mathias Müller的建议并尝试使用fo:table-header FOP 2.1支持fo:retrieve-table-marker,这应该允许“续”标题。但是,延续似乎不起作用,现在身体与标题重叠。

<xsl:for-each select="results/group">
    <fo:block>

        <fo:table table-layout="fixed" width="100%">
            <fo:table-column column-width="1.8in"/>
            <fo:table-column />
            <fo:table-column />
            <fo:table-column />
            <fo:table-column />
            <fo:table-column />
            <fo:table-column />
            <fo:table-header>
                <fo:table-row background-color="cmyk(0.72, 0.17, 0.03, 0.04)" color="#FFFFFF" font-size="15pt">
                    <fo:table-cell number-columns-spanned="7">
                        <fo:block padding="1mm" text-indent="0.3em">
                            <xsl:value-of select="$title" />
                        </fo:block>
                    </fo:table-cell>
                </fo:table-row>
                <xsl:call-template name="result_table_header" />
            </fo:table-header>
            <fo:table-body>
                <fo:table-row font-size="9pt">
                    <fo:table-cell number-columns-spanned="7">
                        <fo:block>
                            <fo:table table-layout="fixed" width="100%" border-collapse="separate">
                                <fo:table-column column-width="1.8in" />
                                <fo:table-column />
                                <fo:table-column />
                                <fo:table-column />
                                <fo:table-column />
                                <fo:table-column />
                                <fo:table-column />
                                <fo:table-body>
                                    <xsl:for-each select="result">
                                        <xsl:call-template name="result_row" />
                                    </xsl:for-each>
                                </fo:table-body>
                            </fo:table>
                        </fo:block>
                    </fo:table-cell>
                </fo:table-row>
            </fo:table-body>
        </fo:table>

    </fo:block>
</xsl:for-each>

更新#2

我修复了重叠,但我不得不取出fo:marker。它没有添加“(续)”。

1 个答案:

答案 0 :(得分:-1)

这些适用于AH Formatter V6.3。

标题中有'假标题':

  <fo:table table-layout="auto" width="100%">
     <fo:table-column column-width="1.8in" />
     <fo:table-column />
     <fo:table-column />
     <fo:table-column />
     <fo:table-column />
     <fo:table-column />
     <fo:table-column />
     <fo:table-header>
        <fo:table-row background-color="cmyk(0.72, 0.17, 0.03, 0.04)" color="#FFFFFF" font-size="15pt">
           <fo:table-cell number-columns-spanned="7" padding-bottom="6pt">
              <fo:block padding="1mm" text-indent="0.3em">
                 <fo:retrieve-table-marker retrieve-class-name="header-continued" retrieve-boundary-within-table="table" />
              </fo:block>
           </fo:table-cell>
        </fo:table-row>
        <fo:table-row>
           <fo:table-cell><fo:block>h</fo:block></fo:table-cell>
           <fo:table-cell><fo:block>The real table header</fo:block></fo:table-cell>
           <fo:table-cell />
           <fo:table-cell />
           <fo:table-cell />
           <fo:table-cell />
           <fo:table-cell />
        </fo:table-row>
     </fo:table-header>
     <fo:table-body>
        <fo:table-row>
           <fo:table-cell number-columns-spanned="7"><fo:marker marker-class-name="header-continued">Title</fo:marker></fo:table-cell>
        </fo:table-row>
        <fo:table-row font-size="9pt">
            <fo:marker marker-class-name="header-continued">Title (Cont)</fo:marker>
           <fo:table-cell><fo:block>Lorem ipsum...</fo:block></fo:table-cell>
           <fo:table-cell />
           <fo:table-cell />
           <fo:table-cell />
           <fo:table-cell />
           <fo:table-cell />
           <fo:table-cell />
        </fo:table-row>
     </fo:table-body>
  </fo:table>

和'嵌套表'技术(正如你所尝试的那样):

  <fo:table table-layout="auto" width="100%" break-before="page">
     <fo:table-header>
        <fo:table-row background-color="cmyk(0.72, 0.17, 0.03, 0.04)" color="#FFFFFF" font-size="15pt">
           <fo:table-cell number-columns-spanned="7" padding-bottom="6pt">
              <fo:block padding="1mm" text-indent="0.3em">
                 <fo:retrieve-table-marker retrieve-class-name="header-continued"
                    retrieve-boundary-within-table="table"/>
              </fo:block>
           </fo:table-cell>
        </fo:table-row>
     </fo:table-header>
     <fo:table-body>
        <fo:table-row>
           <fo:table-cell number-columns-spanned="7"><fo:marker marker-class-name="header-continued">Title</fo:marker></fo:table-cell>
        </fo:table-row>
        <fo:table-row font-size="9pt">
           <fo:table-cell>
              <fo:marker marker-class-name="header-continued">Title (Cont)</fo:marker>
                 <fo:table table-layout="fixed" width="100%" border-collapse="separate">
                    <fo:table-header>
                       <fo:table-row>
                          <fo:table-cell><fo:block>h</fo:block></fo:table-cell>
                          <fo:table-cell><fo:block>The real table header</fo:block></fo:table-cell>
                          <fo:table-cell />
                          <fo:table-cell />
                          <fo:table-cell />
                          <fo:table-cell />
                          <fo:table-cell />
                       </fo:table-row>
                    </fo:table-header>
                    <fo:table-body>
                       <fo:table-row>
                          <fo:table-cell><fo:block>Lorem ipsum...</fo:block></fo:table-cell>
                          <fo:table-cell></fo:table-cell>
                          <fo:table-cell></fo:table-cell>
                          <fo:table-cell></fo:table-cell>
                          <fo:table-cell></fo:table-cell>
                          <fo:table-cell></fo:table-cell>
                          <fo:table-cell></fo:table-cell>
                       </fo:table-row>
                    </fo:table-body>
                 </fo:table>
           </fo:table-cell>
        </fo:table-row>
     </fo:table-body>
  </fo:table>