2014-01-13 67 views
1

我使用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+頁上,並且不會出現。我不能爲我的生活弄清楚我的代碼出了什麼問題。任何幫助表示讚賞。

回答

0

您可能會讓事情比您需要的更復雜。如果頁面區域的幾何對於所有章節都是相同的,那麼在第一章中不應該需要不同的頁面順序主體,只是標題區域的靜態內容中包含不同的內容。

要做的另一件事是保存.fo文件並檢查它,以確保它正在以您的方式生成。將Ant參數「retain.topic.fo」設置爲「yes」,clean.temp設置爲「no」。

乾杯,

艾略特

+0

但是,如何爲第一章的第一頁指定不同的靜態內容?我認爲我能做到這一點的唯一方法是使用頁面大師,然後指向不同的區域 - 在區域之前。 – rraleigh

0

我不知道你正在做一些您的通話地方,但基本上需要兩個簡單的頁面大師(4,計數blankpage)。 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> 

沿這些行的東西。

相關問題