我正在使用 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 页以上,但它没有出现。我一生都无法弄清楚我的代码出了什么问题。任何帮助表示赞赏。