除最后一页

时间:2017-11-01 08:09:07

标签: pdf xslt xsl-fo

也许这是一个简单的问题,希望有人可以帮助我。

目前,我已经使用我的PDF开始奇怪页面上的每一章。使用代码

我的 commons-attr.xsl 文件中的

<xsl: attribute-set name = "__ force__page__count">

结果是我的PDF中总是有偶数个页面。

但是我现在如何得到它,如果我的PDF页数奇数,则最后一页不添加此操作 我认为像下面的代码一样无济于事

<xsl:attribute-set name="__force__page__count">
        <xsl:attribute name="force-page-count">
            <xsl:choose>
               <xsl:when test="(position() = last())"> 
                    <xsl:value-of select="'no-force'"/>
                </xsl:when>
                <xsl:otherwise>
                    <xsl:value-of select="'even'"/>
                </xsl:otherwise>
            </xsl:choose>
        </xsl:attribute>
    </xsl:attribute-set>

3 个答案:

答案 0 :(得分:1)

我怀疑你的问题始于<xsl:when test="name(/*) = 'bookmap' != last()">。您正在测试节点的名称是否不等于last()。 您需要<xsl:when test="(position() != last()) and (name(/*) = 'bookmap')">

之类的内容

position() != last()可能就足够了,我希望只在章节/页面序列的开头调用此属性集,因此您的bookmap测试可能没有必要。我不熟悉您正在使用的框架。

当然,这是否有效,取决于XML的结构。如果您的XML每个章节都有一个节点,并且在处理此章节点时调用属性集,那么它应该可以工作。

如果从其他地方调用属性集,或者结构不同,则position()测试不会给出预期结果。

你目前有一个测试试图匹配除了最后一个章节之外的每个章节,所以如果测试有效,那么你的“其他”和“只会在最后一章调用。构造xsl:choose的更好方法是将异常放在xsl:when语句中:

<xsl:when test="position() = last()"> -match only the last chapter here-
    <xsl:value-of select="'no-force'"/>

xsl:otherwise

<xsl:value-of select="'even'"/>

在XSL-FO中,页面计数由force-page-count属性控制。其中一个可能的值是no-force,这会产生您想要的效果:不添加任何页面 值&#39;奇数&#39;强制页面序列具有奇数页面(并且将添加空页面以实现此目的)。

答案 1 :(得分:0)

忘记force-page-count,而是使用initial-page-number="auto-odd"。见https://www.w3.org/TR/xsl11/#initial-page-number

当您忽略force-page-count时,其默认值auto可与initial-page-number一起使用。见https://www.w3.org/TR/xsl11/#force-page-count

答案 2 :(得分:0)

大家好,我们做了几次测试,然后我们出来了。因此代码

<xsl:attribute-set name="__force__page__count">
        <xsl:attribute name="force-page-count">
            <xsl:choose>
                <xsl:when test="following-sibling::*[(contains(@class, 'topic/topic'))] and not(ancestor::*[contains(@class,' topic/topic ')])">
            <!--   <xsl:when test="$mirror-page-margins">-->
                    <xsl:value-of select="'end-on-even'"/>
                </xsl:when>
                 <xsl:when test="not(following-sibling::*[(contains(@class, 'topic/topic'))])">                    
                    <xsl:value-of select="'auto'"/>
                </xsl:when>
                <xsl:otherwise>
                    <xsl:value-of select="'auto'"/>
                </xsl:otherwise>
            </xsl:choose>
        </xsl:attribute>
    </xsl:attribute-set>

谢谢大家分享你的智慧。