[英]XSL-FO format in static content depending on position
我目前正在将xslt的.xml文件转换为xsl:fo文件。 该文件应为演示文稿。 我想要的是每个页面上的侧栏,其中包含所有标题的列表(由h1标签定义)。 我明白了,但是接下来,我想突出显示当前页面或任何先前页面上的最新标题(如果当前页面不包含标题)。
我将页面顺序定义如下:
<fo:page-sequence master-reference="Presentation">
<fo:static-content flow-name="xsl-region-start">
<fo:block color="#fff">
<xsl:call-template name="toc" />
</fo:block>
</fo:static-content>
<fo:flow flow-name="xsl-region-body">
<fo:block>
<xsl:apply-templates/>
</fo:block>
</fo:flow>
</fo:page-sequence>
定义toc如下:
<xsl:template match="toc" name="toc">
<fo:block>
<xsl:for-each select="//h1">
<fo:block font-size="18pt" font-weight="bold" margin-top="0.25cm">
<xsl:if test="is this h1-node the current headline?" >
<xsl:attribute name="color">red</xsl:attribute>
</xsl:if>
<fo:basic-link internal-destination="{generate-id(.)}">
<xsl:number format="1. " count="//h1" level="any"/>
<xsl:value-of select="."/>
</fo:basic-link>
</fo:block>
</xsl:for-each>
</fo:block>
</xsl:template>
我试图使用preciding-sibling :: h1,但是在静态内容中不起作用。 我也尝试使用fo:marker来解决它,但是标记是由fop解决的,所以在xsl转换之后。 换句话说,是否有一种方法可以根据页面甚至页面所在页面的内容,将格式设置为静态内容块? 提前致谢!
首先,您必须在静态内容检索标记中表示整个TOC,每个TOC条目都使用一个标记。 完全没有条件逻辑,只需按照要定位的顺序检索所有标记即可。
然后,在流程中,首先将所有标记定义为未突出显示的内容。
然后,在流程中,当您进入正在流动的每个节时,请开始该节并将该节的标记重新定义为突出显示的内容,然后在到达该节的末尾时,将该节的标记重新定义为未突出显示的内容。
您需要记住的是,在静态内容中检索标记是无条件的,而在流中定义标记是有条件的。 您错误地尝试将条件逻辑放入您的静态内容中,这对您不起作用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.