У меня есть документ, содержащий контент (таблицу, содержащую один или несколько адресов) внизу последней страницы. До сих пор, таблица не была стандартного размера, так что я мог вставить таблицу в сноске и прикрепить этот колонтитул к последней странице:Как разместить содержимое в нижней части последней страницы моего документа
<fo:page-sequence-master master-name="leaflet">
<fo:repeatable-page-master-alternatives>
<fo:conditional-page-master-reference page-position="first" master-reference="page_first_leaflet"/>
<fo:conditional-page-master-reference page-position="last" master-reference="page_last_leaflet"/>
<fo:conditional-page-master-reference master-reference="page_even_2" odd-or-even="even"/>
<fo:conditional-page-master-reference master-reference="page_odd_2_leaflet" odd-or-even="odd"/>
</fo:repeatable-page-master-alternatives>
</fo:page-sequence-master>
Это хорошо работает, когда таблица имеет предсказуемый размер: Я установил размер моего последнего нижнего колонтитула страницы, и я закончил.
Но теперь есть запрос на изменение размера стола (от 5 до 15 см). Если я установил нижний колонтитул в размере 15 см, я трачу много места. Поэтому я хочу установить размер нижнего колонтитула динамически.
У меня нет возможности прочитать высоту таблицы из документа XML: по умолчанию высота ячейки равна 0, что означает «сделать ячейку достаточно большой, чтобы содержимое соответствовало». Поэтому я больше не могу поместить эту таблицу в нижний колонтитул.
Следующая мысль заключалась в том, чтобы вставить таблицу в конец области тела. Это можно сделать, используя конструкцию сноски. Когда я помещаю сноску в конец содержимого документа, это помещает таблицу на ту же страницу, что и последний текст в документе.
<fo:flow flow-name="body">
<xsl:apply-templates/><!--normal chapter content is placed here-->
<fo:block>
<fo:footnote><fo:inline color="white">1</fo:inline><!--footnote number is not visible-->
<fo:footnote-body>
<fo:block>
<fo:table>
<fo:table-column column-width="20mm" column-number="1"/>
<fo:table-column column-width="200mm" column-number="2"/>
<fo:table-body>
<fo:table-row>
<fo:table-cell column-number="2">
<fo:block>
<xsl:apply-templates select="table[1]"/><!--table that contains the addresses-->
</fo:block>
</fo:table-cell>
</fo:table-row>
</fo:table-body>
</fo:table>
</fo:block>
</fo:footnote-body>
</fo:footnote>
</fo:block>
</fo:flow>
К сожалению, количество страниц должно быть четным, так что иногда пустая страница добавляется после того, как в конце содержания документа:
<xsl:attribute name="force-page-count">end-on-even</xsl:attribute>
Так что, если мое содержание длиной 3 страницы, адрес таблицы заканчивается внизу страницы 3. Но мне нужно, чтобы он был на странице 4. Этот подход работает только в том случае, если содержимое заканчивается на четной странице, а таблица вписывается в оставшееся пространство.
Есть ли какой-либо другой подход, который я мог бы использовать для получения блока с переменным размером в нижней части последней страницы моего документа?
В настоящее время я использую обходной путь, где я помещаю таблицу в нижний колонтитул последней страницы. Размер нижнего колонтитула определяется количеством строк в таблице (в основном я предполагаю высоту 50 мм на строку и устанавливаю ее длину). – Hobbes