簡體   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