如何在XSL FO中将页脚固定在页面底部?

时间:2015-05-12 06:55:22

标签: xml xslt xsl-fo apache-fop

我正在使用XSL-FO(使用Apache FOP处理)。

我的表的xsl代码如下所示:

<!-- ... Some xsl fo code with data occupying 1/2 page ... -->
<fo:table>
   <fo:table-header>
      Item Name 
   </fo:table-header>
   <fo:table-footer>
      Total: 
         <xsl:value-of select="total" />
   </fo:table-footer>
   <fo:table-body>
      <fo:table-row>
         <xsl:value-of select="itemName" />
      </fo:table-row> 
   </fo:table-body>
</fo:table>

我想在每个页面的底部都有一个表格页脚(我尝试使用fo:table-footer)。

我还想在第一页后面的页面上添加一个脚注:如果内容需要多个页面,我需要在页脚后面添加脚注"Continuation of previous page"

表格页脚必须仅显示最后一页的总价值(我的意思是,如果我的6页表格内容除了最后一页之外的每页都必须将页脚的总值设为空白,并且有价值的最后一页页脚。

XML来源:

<itemDetail>
   <itemName>Car1</itemName>
   <itemName>Car2</itemName>
   <itemName>Car3</itemName>
   <itemName>Car4</itemName>
   <itemName>Car5</itemName>
   <itemName>Car6</itemName>
   <itemName>Car7</itemName>
   <itemName>Car8</itemName>
   <itemName>Car9</itemName>
   <itemName>Car10</itemName>
   <itemName>Car11</itemName>
   <itemName>Car12</itemName>
   <itemName>Car13</itemName>
   <itemName>Car14</itemName>
   <itemName>Car15</itemName>
   <itemName>Car16</itemName>
   <itemName>Car17</itemName>
   <itemName>Car18</itemName>
   <itemName>Car19</itemName>
   <itemName>Car20</itemName> 
</itemDetail>
<total>20</total>

第1页的必需示例输出: Required sample output of page 1

第2页所需的样本输出: Required sample output of page 2

1 个答案:

答案 0 :(得分:1)

重新阅读你的问题后,我会这样做。 你应该有第一个,休息和最后一个页面模板。

这有两个原因 - (1)您希望底部的桌面页脚和(2)许多产品(包括FOP)不支持retrieve-table-marker。将标记检索到表行对于格式化程序来说是非常有问题的,特别是检索到的内容的大小使得表格重新格式化(就像行不再适合)。

第一页模板region-after将有一个表格行,其中&#34; Total:&#34;在它空白。

其余页面模板region-after将有一个表格行,其中&#34; Total:&#34;空白,然后是&#34; *继续上一页&#34;。

最后一页模板在该区域中没有任何内容 - 之后为Total:,只是&#34; *上一页的继续&#34;。

创建表格时,添加&#34;总计:&#34;在添加具有适当总数的所有其他行之后在表中的行。您可以在最后添加(没有那些空白行),或者如果要放入空白行,则将区域放在一行之后,以容纳此行。我不建议这样做,除非你必须有空行,所有表必须是相同的高度。你也可以只是留在页脚中并将标记拉到页脚而不用检索表标记。

唯一需要注意的是,是否选择行大小和页面尺寸以便&#34; Total:&#34;放置在region-after区域中的行与表的其余部分很好地匹配。

有关页面模板设置和顺序,请参阅How to position a block at the bottom in the region-body。在这种情况下,您可以使用唯一的页面模板在区域中放置任何内容 - 之后您不希望&#34; * Continuation&#34;在那种情况下。