强制页数除最后一页

Force page count except last page

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

目前,我使用我的 PDF 在奇数页上开始每一章。通过使用代码

<xsl: attribute-set name = "__ force__page__count"> 在我的 commons-attr.xsl 文件中

结果是我的 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>

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

这样的东西

或者 position() != last() 可能就足够了,我希望这个属性集只在 chapter/page-sequence 开始时被调用,所以你的 bookmap 测试可能没有必要。我不熟悉你使用的框架。

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

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

并且您目前有一个测试试图匹配除最后一章之外的每一章,因此如果测试有效,您的 'otherwise' 将只针对最后一章被调用。构造 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,这具有您想要的效果:不添加任何页面。
值 'odd' 强制页面序列具有奇数页(并将添加空页以实现此目的)。

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

当您省略 force-page-count 时,其默认值 autoinitial-page-number 配合得很好。参见 https://www.w3.org/TR/xsl11/#force-page-count

大家好,我们做了几次测试,结果出来了。特此代码

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

感谢大家分享您的智慧。