繁体   English   中英

xsl-fo标头未出现在第一章的第二页

[英]xsl-fo header not appearing second page of first chapter

我正在使用AntennaHouse格式化引擎从DITA图书地图创建自定义PDF输出。 我正在尝试创建仅显示在本书第一页的自定义标题。 这些书可以包含多个章节,因此我使用的策略是为第一章创建一个页面顺序,然后为其余章节创建一个不同的页面顺序。

我区分第一章的处理方式和其余要处理的章节(在commons.xsl文件中)。 第一个块确定章号,并将其放入变量“ chapterNumber”中。 第二个块描述了如何根据ChapterNumber变量的内容处理章节:

    <xsl:variable name="id" select="@id"/>
    <xsl:variable name="topicChapters">
        <xsl:copy-of select="$map//*[contains(@class, ' bookmap/chapter ')]"/>
    </xsl:variable>
    <xsl:variable name="chapterNumber">
        <xsl:number format="1" value="count($topicChapters/*[@id = $id]/preceding-sibling::*) + 1"/>
    </xsl:variable>

    <xsl:when test="$topicType = 'topicChapter'">
    <xsl:choose>
        <xsl:when test="$chapterNumber = '1'">
            <xsl:call-template name="processFirstChapter"/>
        </xsl:when>
        <xsl:otherwise>
            <xsl:call-template name="processTopicChapter"/>
        </xsl:otherwise>
    </xsl:choose>

第一章的页面顺序如下所示:

    <fo:page-sequence-master master-name="body-first-sequence">
        <fo:repeatable-page-master-alternatives>
            <fo:conditional-page-master-reference page-position="first" master-reference="body-first"/>
            <fo:conditional-page-master-reference page-position="rest" master-reference="body-rest"/>
            <fo:conditional-page-master-reference master-reference="body-rest"/>
        </fo:repeatable-page-master-alternatives>
    </fo:page-sequence-master>

其余各章的页面顺序如下所示:

    <fo:page-sequence-master master-name="body-sequence">
        <fo:repeatable-page-master-alternatives>
            <fo:conditional-page-master-reference page-position="any" master-reference="body-rest"/>
        </fo:repeatable-page-master-alternatives>
    </fo:page-sequence-master>

在处理期间,我将调用两个模板,一个用于第一章,一个用于其余各章:

    <xsl:template name="insertBodyStaticContents">
        <xsl:call-template name="insertBodyFootnoteSeparator"/>
        <xsl:call-template name="insertBodyRestHeader"/>          
        <xsl:call-template name="insertBodyFooter"/>
    </xsl:template>

    <xsl:template name="insertBodyFirstStaticContents">
        <xsl:call-template name="insertBodyFootnoteSeparator"/>
        <xsl:call-template name="insertBodyFirstHeader"/>
        <xsl:call-template name="insertBodyFooter"/>
    </xsl:template>

这些模板依次调用标题模板,一个用于第一章的第一页,另一个用于所有其余页面:

    <xsl:template name="insertBodyFirstHeader">
        <fo:static-content flow-name="first-body-header">
            <fo:block-container z-index="-1" position="absolute" top="0pt" left="0pt" height="1.5in" width="100%">
                <fo:block>
                    <fo:external-graphic src="Configuration/OpenTopic/cfg/common/artwork/qrgraphic.png"/>
                </fo:block>
            </fo:block-container>
            <!-- set the title -->
            <fo:block xsl:use-attribute-sets="__qrc__title__header">
                <xsl:value-of select="//*[contains(@class,' bookmap/mainbooktitle ')]"/>
            </fo:block>
            <!-- set the subtitle -->
            <fo:block xsl:use-attribute-sets="__first__heading__qrctext">
                    Quick Reference Card
            </fo:block>
        </fo:static-content>
    </xsl:template>

    <xsl:template name="insertBodyRestHeader">
        <fo:static-content flow-name="rest-body-header">
            <!-- set the title -->
            <fo:block xsl:use-attribute-sets="__qrc__title__header2">
                <xsl:value-of select="//*[contains(@class,' bookmap/mainbooktitle ')]"/>
            </fo:block>
            <!-- set the subtitle -->
            <fo:block xsl:use-attribute-sets="__firstheading__subtitle">
                Quick Reference Card
            </fo:block>
        </fo:static-content>
    </xsl:template>

一切正常,但有一个奇怪的毛病-如果书的第一章长于一页,则第一章的第一页具有正确的标题(流名称为first-body-header的标题),但在该章的后续页面,标题为空白。 第二章及以上的章节也具有正确的标题(该流程名称为rest-body-header)。 我知道该标头的代码是正确的,因为它出现在第二章及以后的章节中。 但是,应该在第一章的第2页以上显示完全相同的标题,并且不会出现。 我一生都无法弄清楚我的代码出了什么问题。 任何帮助表示赞赏。

您可能使事情变得比所需的复杂。 如果所有章节的页面区域的几何形状都相同,则第一章不需要使用不同的页面序列母版,而标题区域的静态内容只需不同的内容。

另一件事是保存.fo文件并检查该文件,以确保按照您的实际方式生成该文件。 将Ant参数“ retain.topic.fo”设置为“ yes”,并将clean.temp设置为“ no”。

干杯,

艾略特

我不确定您要在哪里打电话,但是基本上您需要两个简单的页面母版(4个,计算空白页)。 1是您的第一章开瓶器,一个是您书中的每一页。

为每个定义一个fo:region-before。 然后,在您的流程中,调用适用的静态内容。 现在,当您生成第一章时,您的BodyRestHeader似乎根本没有被调用。

一个非常基本的例子:

<fo:root>
    <fo:layout-master-set>
        <fo:simple-page-master master-name="chapfirstopen">
            <fo:region-body/>
            <fo:region-before region-name="firstopenhead"/>
        </fo:simple-page-master>
        <fo:simple-page-master master-name="everythingelse">
            <fo:region-body/>
            <fo:region-before region-name="elsehead"/>
        </fo:simple-page-master>
        <fo:page-sequence-master master-name="firstchap">
          <fo:repeatable-page-master-alternatives>
            <fo:conditional-page-master-reference master-reference="chapfirstopen" page-position="first">
            <fo:conditional-page-master-reference master-reference="everythingelse">
          </fo:repeatable-page-master-alternatives>
        </fo:page-sequence-master>
        <fo:page-sequence-master master-name="everyotherchap">
          <fo:repeatable-page-master-alternatives>
            <fo:conditional-page-master-reference master-reference="everythingelse">
          </fo:repeatable-page-master-alternatives>
        </fo:page-sequence-master>
    </fo:layout-master-set>
    <fo:page-sequence master-reference="firstchap">
        <fo:static-content flow-name="firstopenhead">
            <!--your first page static content.-->
        </fo:static-content>
        <fo:static-content flow-name="elsehead">
            <!--your every-other-page static content.-->
        </fo:static-content>
        <fo:flow><!--first chapter--></fo:flow>
    </fo:page-sequence>
    <fo:page-sequence master-reference="everyotherchap">
        <fo:static-content flow-name="elsehead">
            <!--your every-other-page static content.-->
        </fo:static-content>
        <fo:flow><!--other chapter--></fo:flow>
    </fo:page-sequence>
</fo:root>

遵循这些原则。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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