XSL FO: как определить разрыв страницы?

#xsl-fo #page-break

#xsl-fo #разрыв страницы

Вопрос:

У меня ситуация, когда у меня есть 2 блочных контейнера — если они достаточно короткие, они должны быть на одной странице, разделенные строкой. Но если нет, то контейнер 2. block должен начинаться со следующей страницы, и между ними не должно быть строки.

Как я могу это сделать (потому что я не знаю, как я могу проверить, есть ли внутри потока разрыв страницы)? Есть ли какой-либо параметр, который я могу использовать, чтобы проверить, запускается ли блок после разрыва страницы или что-то еще?

Спасибо за любую помощь!!

Frangoo

Ответ №1:

Вы могли бы установить следующий атрибут во втором контейнере блоков

 keep-together.within-page="always"
  

При этом процессор XSL-FO позаботится о том, чтобы весь блок остался на одной странице. Итак, это будет выглядеть примерно так:

 <fo:block keep-together.within-page="always"> <!-- any other attribute as necessary -->
    ...
</fo:block>
  

Комментарии:

1. Спасибо, да, это уже работает. Но проблема в том, чтобы провести линию (или любой другой элемент) между этими блоками, в зависимости от того, есть разрыв страницы или нет.

2. Я не думаю, что это возможно с определением XSL-FO. Если вас действительно интересует строка, вы могли бы попытаться получить количество отображаемых страниц и использовать его для определения рисунка линии.

3. Hmpf. Я ожидал, что это невозможно сделать. Но как я могу проверить количество страниц? Я могу использовать IF только в XSLT, но там я не знаю количество страниц, верно? В любом случае спасибо за ваш ответ!

4. Вы всегда можете напечатать пробел между двумя блоками, если разделение пока является вашей единственной заботой.