如何在XSL-FO中的表中总结每页的某些值?

时间:2011-10-28 15:18:44

标签: xslt xsl-fo apache-fop

我正在使用XSL-FO生成打印出的帐户对帐单。 PDF实际上只是一个简单的表格,每页都有一个简单的标题。困难在于我必须显示每页的交易量,例如

Page 1

+------------------------------+-----------+-----------+---------------------+
| Text                         | Credit    | Debit     | Balance             |
+------------------------------+-----------+-----------+---------------------+
| Previous month               |           |           |           (*1) 1000 |
| abc                          |      1000 |           |                2000 |
| abc                          |           |       500 |                1500 |
| abc                          |           |       200 |                1300 |
| ...                          |           |           |                     |
| Carry over                   | (*2) 1000 |  (*3) 700 |           (*4) 1300 |
+------------------------------+-----------+-----------+---------------------+

Page 2

+------------------------------+-----------+-----------+---------------------+
| Text                         | Credit    | Debit     | Balance             |
+------------------------------+-----------+-----------+---------------------+
| Previous page                | (*2) 1000 |  (*3) 700 |           (*4) 1300 |
| abc                          |      1000 |           |                2300 |
| abc                          |           |       500 |                1800 |
| abc                          |           |       200 |                1600 |
| ...                          |           |           |                     |
| Carry over                   | (*2) 2000 | (*3) 1400 |           (*4) 1600 |
+------------------------------+-----------+-----------+---------------------+

以下是一些解释:

  1. 这是上个月的余额。它是预先计算的,并且作为XSL变量而众所周知。没问题,这是一个常规标题(仅在第一页)
  2. 此值基于每页计算。它汇总了同一页面上的所有信用额度。我无法自己计算,因为我不知道XSL-FO何时会进行分页。所以我想XSL-FO必须为我做计算。页面底部的总和与后续页面顶部的值相同。
  3. 此值与2相同,仅适用于借记金额。
  4. 此值只是页面底部的最后一笔交易余额。该值将在下一页的顶部重复。
  5. 如何使用XSL-FO进行这些计算?

    另请参阅此相关问题:How to display one or the other information depending on the page number in XSL-FO?

2 个答案:

答案 0 :(得分:1)

尝试“表格标记”:http://www.w3.org/TR/xsl/#fo_retrieve-table-marker

在XSLT中,每行注入一个带总和的标记。然后让引擎选择一个标记来替换表头或页脚中的fo:retrieve-table-marker。我们的想法是在渲染时选择合适的标记,具体取决于标记在页面上的位置以及@ retrieve-position和@ retrieve-boundary上的fo:retrieve-table-marker。

答案 1 :(得分:1)

不幸的是,fop没有从我发现的内容中实现<fo:retrieve-table-marker/>。相反,这个解决方案对我有用:

How to display one or the other information depending on the page number in XSL-FO?

它涉及在<fo:flow/>之外创建一个单独的表格,该表格使用<fo:retrieve-marker/>元素显示表格标题。