Как можно суммировать некоторые значения на страницу в таблице в XSL-FO? - PullRequest
0 голосов
/ 28 октября 2011

Я использую 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. Это значениетолько остаток последней транзакции внизу страницы.Это значение повторяется в верхней части следующей страницы.

Как я могу выполнить эти вычисления с XSL-FO?

См. Также этот связанный вопрос: Как отобразитьта или иная информация в зависимости от номера страницы в XSL-FO?

Ответы [ 2 ]

1 голос
/ 31 октября 2011

К сожалению, fop не реализует <fo:retrieve-table-marker/> из того, что я обнаружил. Вместо этого у меня сработало это решение:

Как отобразить ту или иную информацию в зависимости от номера страницы в XSL-FO?

Это включает создание отдельной таблицы вне <fo:flow/>, которая отображает заголовок таблицы с использованием <fo:retrieve-marker/> элементов.

1 голос
/ 28 октября 2011

Попробуйте "маркеры таблицы": http://www.w3.org/TR/xsl/#fo_retrieve-table-marker.

В XSLT для каждой строки введите маркер с суммой. Затем позвольте движку выбрать маркер для замены fo: retrieve-table-marker в верхнем или нижнем колонтитуле таблицы. Идея состоит в том, что правильный маркер будет выбран во время рендеринга в зависимости от положения маркера на странице и @ retrieve-position и @ retrieve-border для fo: retrieve-table-marker.

...