В настоящее время у меня есть XSL-файл, который я использую для преобразования XML в формат FO (XSL-FO). Единственная проблема с нижними колонтитулами. У меня есть требование отображать текстовую ссылку из нижнего колонтитула каждой из страниц на одну из других страниц. Это означает, что мне нужно сделать текст нижнего колонтитула динамичным. Например, вот некоторый абстрактный текст из каждой страницы:XSL-FO нижний колонтитул в статическом, но динамическом содержимом?
page 1: Topic A
page 2: Topic B
page 3: Topic C, Subtopic of A
page 4: Topic D, Subtopic of A
page 5: Topic E, Subtopic of B
Представьте себе «Подраздел» часть в качестве колонтитула для отображения на каждую страницу.
Рассмотрим следующий XML:
<DATA_DS>
<LIST_ITEMS>
<ITEMS>
<isChild>0</isChild>
<myvalue>abc</myvalue>
<isLastChild>0</isLastChild>
</ITEMS>
<ITEMS>
<isChild>1</isChild>
<myvalue>def</myvalue>
<isLastChild>0</isLastChild>
</ITEMS>
<ITEMS>
<isChild>1</isChild>
<myvalue>ghi</myvalue>
<isLastChild>0</isLastChild>
</ITEMS>
<ITEMS>
<isChild>1</isChild>
<myvalue>xyz</myvalue>
<isLastChild>1</isLastChild>
</ITEMS>
</LIST_ITEMS>
</DATA_DS>
и этот XSL:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<fo:root>
<fo:layout-master-set>
<fo:simple-page-master master-name="parentLOBPage-master" page-width="11in" page-height="8.5in" margin-left="1.3in" margin-right="0.65in" margin-top="0.35in" margin-bottom="0.35in">
<fo:region-body region-name="body" margin-top="0.5in" margin-right="0.65in"/>
<fo:region-after region-name="footer" extent="14mm" />
</fo:simple-page-master>
<fo:simple-page-master master-name="childLOBPage-master" page-width="11in" page-height="8.5in" margin-left="1.3in" margin-right="0.65in" margin-top="0.35in" margin-bottom="0.35in">
<fo:region-body region-name="body" margin-top="0.5in" margin-right="0.65in"/>
<fo:region-after region-name="footer" extent="14mm"/>
</fo:simple-page-master>
<fo:page-sequence-master master-name="parentLOBPage">
<fo:repeatable-page-master-reference
master-reference="parentLOBPage-master"/>
</fo:page-sequence-master>
<fo:page-sequence-master master-name="childLOBPage">
<fo:repeatable-page-master-reference
master-reference="childLOBPage-master"/>
</fo:page-sequence-master>
</fo:layout-master-set>
<xsl:apply-templates/>
</fo:root>
</xsl:template>
<xsl:template match="DATA_DS">
<xsl:for-each-group select="LIST_ITEMS/ITEMS"
group-adjacent="isChild">
<xsl:choose>
<xsl:when test="isChild = 0">
<fo:page-sequence master-reference="parentLOBPage">
<fo:static-content flow-name="footer">
<fo:table width="100%" table-layout="fixed" margin-top="5mm">
<fo:table-column column-width="80%"/>
<fo:table-column column-width="20%"/>
<fo:table-body>
<fo:table-row>
<fo:table-cell>
<fo:block text-align="left" font-family="Arial" font-size="7pt" font-weight="normal">parent footer</fo:block>
</fo:table-cell>
<fo:table-cell>
<fo:block text-align="right" font-family="Arial" font-size="7pt" font-weight="normal">Page <fo:page-number/> of <fo:page-number-citation ref-id="last-page" /></fo:block>
</fo:table-cell>
</fo:table-row>
</fo:table-body>
</fo:table>
</fo:static-content>
<fo:flow flow-name="body">
<xsl:for-each select="current-group()">
<xsl:apply-templates select="."/>
</xsl:for-each>
</fo:flow>
</fo:page-sequence>
</xsl:when>
<xsl:otherwise>
<fo:page-sequence master-reference="childLOBPage">
<fo:static-content flow-name="footer">
<fo:table width="100%" table-layout="fixed" margin-top="5mm">
<fo:table-column column-width="80%"/>
<fo:table-column column-width="20%"/>
<fo:table-body>
<fo:table-row>
<fo:table-cell>
<fo:block text-align="left" font-family="Arial" font-size="7pt" font-weight="normal">child footer: <xsl:value-of select="myvalue"/></fo:block>
</fo:table-cell>
<fo:table-cell>
<fo:block text-align="right" font-family="Arial" font-size="7pt" font-weight="normal">Page <fo:page-number/> of <fo:page-number-citation ref-id="last-page" /></fo:block>
</fo:table-cell>
</fo:table-row>
</fo:table-body>
</fo:table>
</fo:static-content>
<fo:flow flow-name="body">
<xsl:for-each select="current-group()">
<xsl:apply-templates select="."/>
</xsl:for-each>
<fo:block id="last-page"/>
</fo:flow>
</fo:page-sequence>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each-group>
</xsl:template>
<xsl:template match="ITEMS">
<fo:table width="100%" table-layout="fixed" margin-top="5mm">
<fo:table-column column-width="20%"/>
<fo:table-column column-width="80%"/>
<fo:table-body>
<fo:table-row>
<fo:table-cell>
<fo:block text-align="left" font-family="Arial" font-size="10pt" font-weight="bold">big table</fo:block>
</fo:table-cell>
<fo:table-cell>
<fo:block text-align="left" font-family="Arial" font-size="10pt" font-weight="bold">some stuff</fo:block>
</fo:table-cell>
</fo:table-row>
</fo:table-body>
</fo:table>
<xsl:if test="isChild = 1 and isLastChild = 0">
<fo:block page-break-after="always"/>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
Так как я обернуть большую часть содержимого каждой страницы в фо: стол, а некоторые таблицы перелива на 2+ страниц, я не могу просто поместить «динамический текст нижнего колонтитула» после каждой таблицы, потому что тогда он не будет отображаться на каждой странице.
Итак, я полагаю, что мое использование fo: static-content не подходит, хотя оно делает то, что мне нужно для динамического отображения номеров страниц (например, страницы x of y). Вывод показывает, что для каждой страницы нижнего нижнего уровня значение отображается как «def», что является первым «дочерним» в списке. Итак, fo: static-content заселяет себя при первом запуске и не обновляется для последующих страниц ... поэтому мой подход неверен. Мне нужно руководствоваться тем, как пересмотреть мой подход ...
Любые предложения по поводу того, как я могу использовать нижние колонтитулы, которые мне нужны для моей ситуации XSL-FO? Спасибо ...
Спасибо! Функциональность маркеров - это то, что я искал ... – Kevin