我使用AntennaHouse格式化引擎從DITA書籤創建自定義PDF輸出。我正在嘗試創建一個只出現在本書第一頁上的自定義標題。這些書可以有多個章節,所以我使用的策略是爲第一章創建一個頁面序列,然後爲其餘章節創建一個不同的頁面序列。xsl-fo標題未出現第一章的第二頁
我區分第一章處理和待處理的其餘章節(在文件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+頁上,並且不會出現。我不能爲我的生活弄清楚我的代碼出了什麼問題。任何幫助表示讚賞。
但是,如何爲第一章的第一頁指定不同的靜態內容?我認爲我能做到這一點的唯一方法是使用頁面大師,然後指向不同的區域 - 在區域之前。 – rraleigh