Нижний колонтитул таблицы не появляется, если содержимое таблицы распространяется на следующую страницу в PDF с помощью xslt - PullRequest
0 голосов
/ 09 мая 2018

Нижний колонтитул таблицы не отображается, если таблица продолжается до следующей страницы.

продолжить текст должен находиться в конце этой таблицы на первой странице. аналогично заголовку таблицы, который идет правильно. Когда таблица расширяется до следующей страницы, в конце первой страницы должен отображаться «продолжение».

Пример XML:

<NewDataSet>
    <DefaultView>
     <Department>2222</Department>
     <Title>Manish</Title>
   </DefaultView>
   <DefaultView>
     <Department>2223</Department>
     <Title>Santosh</Title>
   </DefaultView>
   <DefaultView>
     <Department>2224</Department>
     <Title>Naveen</Title>
   </DefaultView>
   <DefaultView>
     <Department>2225</Department>
     <Title>punith</Title>
   </DefaultView>
   <DefaultView>
     <Department>2226</Department>
     <Title>bharath</Title>
   </DefaultView>
   <DefaultView>
     <Department>2227</Department>
     <Title>vijay</Title>
   </DefaultView>
 </NewDataSet>

Образец XSL:

    <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                              xmlns:fo="http://www.w3.org/1999/XSL/Format"
                              xmlns:rx="http://www.renderx.com/XSL/Extensions"
                              xmlns:psmi="http://www.CraneSoftwrights.com/resources/psmi"
                              xmlns:exsl="http://exslt.org/common">
  <xsl:template match='NewDataSet'>
    <fo:root>
      <fo:layout-master-set>
        <fo:simple-page-master master-name="my-page">
          <fo:region-body margin="1in"/>
        </fo:simple-page-master>
      </fo:layout-master-set>
      <fo:page-sequence master-reference="my-page">
        <fo:flow flow-name="xsl-region-body">
        <fo:table>  
              <fo:table-column column-width="25mm"/>
              <fo:table-column column-width="25mm"/>
              <fo:table-header  keep-together="always">
                        <fo:block text-align="center" font-style="italic" margin="5pt" keep-together="always">
                            <xsl:text>Table</xsl:text>
                        </fo:block>
                </fo:table-header>
        </fo:table>
          <fo:table-and-caption>  
            <fo:table rx:table-omit-initial-header="true">  
              <fo:table-column column-width="25mm"/>
              <fo:table-column column-width="25mm"/>
              <fo:table-header  keep-together="always">
                        <fo:block text-align="center" font-style="italic" margin="5pt" keep-together="always">
                            <xsl:text>Table (Cont.)</xsl:text>
                        </fo:block>
                </fo:table-header>

              <fo:table-header >
                <fo:table-row>
                  <fo:table-cell border-color="black" border-style="solid" width = "85pt" border-width="0.4pt" padding="3pt" align="left">
                    <fo:block font-weight="bold">Dept</fo:block>
                  </fo:table-cell >
                  <fo:table-cell border-color="black" border-style="solid" width = "85pt" border-width="0.4pt" padding="3pt" align="left">
                    <fo:block font-weight="bold">Title</fo:block>
                  </fo:table-cell>
                </fo:table-row>
              </fo:table-header>
              <xsl:for-each select="*">
                <fo:table-body>
                  <fo:table-row>
                    <fo:table-cell border-color="black" border-style="solid" width = "85pt" border-width="0.4pt" padding="3pt" align="left">
                      <fo:block>
                        <xsl:value-of select="Department"/>
                      </fo:block>
                    </fo:table-cell>
                    <fo:table-cell border-color="black" border-style="solid" width = "85pt" border-width="0.4pt" padding="3pt" align="left">
                      <fo:block>
                        <xsl:value-of select="Title"/>
                      </fo:block>
                    </fo:table-cell>
                  </fo:table-row>
                </fo:table-body>
              </xsl:for-each>
            </fo:table>
          </fo:table-and-caption>
        </fo:flow>
      </fo:page-sequence>
    </fo:root>
  </xsl:template>
</xsl:stylesheet>

Пример вывода: enter image description here

1 Ответ

0 голосов
/ 09 мая 2018

Сочетая это с другим ответом о заголовках таблицы ( Заголовок таблицы не повторяется, если содержимое таблицы распространяется на следующую страницу в PDF с использованием XSLT ), здесь приведен полный пример, показывающий как заголовок таблицы, так и нижний колонтитул тянется как маркер в область нижнего колонтитула, когда таблица переносится.

    <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
        xmlns:fo="http://www.w3.org/1999/XSL/Format"
        xmlns:rx="http://www.renderx.com/XSL/Extensions"
        xmlns:psmi="http://www.CraneSoftwrights.com/resources/psmi"
        xmlns:exsl="http://exslt.org/common">


        <xsl:template match='NewDataSet'>
            <fo:root>
                <fo:layout-master-set>
                    <fo:simple-page-master master-name="my-page">
                        <fo:region-body margin="1in"/>
                        <fo:region-after extent="1in"/>
                    </fo:simple-page-master>
                </fo:layout-master-set>
                <fo:page-sequence master-reference="my-page">
                    <fo:static-content flow-name="xsl-region-after">
                       <!-- This retrieves the marker into the footer -->
                        <fo:block>
                           <fo:retrieve-marker retrieve-class-name="table" retrieve-position="last-ending-within-page"/>
                        </fo:block>
                    </fo:static-content>
                    <fo:flow flow-name="xsl-region-body">
                       <!-- This sets the marker content for the footer -->
                        <fo:block>
                            <fo:marker marker-class-name="table">
                                Table continued on next page
                            </fo:marker>
                        </fo:block>
                            <fo:table-and-caption>
                                <fo:table rx:table-omit-initial-header="true">  
                                    <fo:table-column column-width="25mm"/>
                                    <fo:table-column column-width="25mm"/>
                                    <fo:table-header  keep-together="always">
                                        <fo:table-row>
                                            <fo:table-cell number-columns-spanned="2"><fo:block text-align="center" font-style="italic" margin="5pt" keep-together="always">
                                                <xsl:text>Table (Cont.)</xsl:text>
                                            </fo:block>
                                        </fo:table-cell>
                                        </fo:table-row>
                                        <fo:table-row>
                                        <fo:table-cell border-color="black" border-style="solid" width = "85pt" border-width="0.4pt" padding="3pt" >
                                            <fo:block font-weight="bold">Department</fo:block>
                                        </fo:table-cell >
                                        <fo:table-cell border-color="black" border-style="solid" width = "85pt" border-width="0.4pt" padding="3pt" >
                                            <fo:block font-weight="bold">Title</fo:block>
                                        </fo:table-cell>
                                        </fo:table-row>
                                    </fo:table-header>
                                    <fo:table-body>
                                        <fo:table-row>
                                            <fo:table-cell border-color="black" border-style="solid" width = "85pt" border-width="0.4pt" padding="3pt" >
                                                <fo:block font-weight="bold">Depaartment</fo:block>
                                            </fo:table-cell >
                                            <fo:table-cell border-color="black" border-style="solid" width = "85pt" border-width="0.4pt" padding="3pt" >
                                                <fo:block font-weight="bold">Title</fo:block>
                                            </fo:table-cell>
                                        </fo:table-row>
                                        <xsl:apply-templates/>
                                    </fo:table-body>
                                </fo:table>
                            </fo:table-and-caption>
                        <!-- IMPORTANT -- This clears the marker so it does not appear on pages where the table ends -->
                        <fo:block keep-with-previous.within-page="always">
                            <fo:marker marker-class-name="table"/>
                        </fo:block>
                    </fo:flow>
                </fo:page-sequence>
            </fo:root>
        </xsl:template>
        <xsl:template match="DefaultView">
            <fo:table-row>
                <fo:table-cell border-color="black" border-style="solid" width = "85pt" border-width="0.4pt" padding="3pt" >
                    <fo:block>
                        <xsl:value-of select="Department"/>
                    </fo:block>
                </fo:table-cell>
                <fo:table-cell border-color="black" border-style="solid" width = "85pt" border-width="0.4pt" padding="3pt" >
                    <fo:block>
                        <xsl:value-of select="Title"/>
                    </fo:block>
                </fo:table-cell>
            </fo:table-row>
        </xsl:template>
    </xsl:stylesheet>

Результат:

enter image description here

А если у вас было много страниц, это:

enter image description here

А если у вас меньше одной страницы:

enter image description here

...