繁体   English   中英

XSL-FO格式为静态内容,具体取决于位置

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM